regex 如何在有条件的成绩单中统计特定关键词

zpjtge22  于 2023-06-07  发布在  其他
关注(0)|答案(2)|浏览(376)

我得到了一个大数据框架,在机器人和用户之间有一个“Transcript”列。在给机器人一个机会之前,我需要计算用户在记录中要求代理/代表的次数。
文字记录如下,但更长:

"User : Order status.\nBot : Your order status is your orders tab. \nUser : representative."

"User : Agent please.\nBot : Waiting time is longer than usual."

我尝试使用正则表达式:

df["Transcript"] = df["Transcript"].str.lower()
df.loc[df["Transcript"].str.contains('agent|representative'),:]

但它只会输出带有这些关键字的观察结果。当用户第一次输入是代理/代表时,我如何输出一个计数的数字?

a8jjtwal

a8jjtwal1#

我会将输入拆分为第一个文本(在机器人响应之前),然后搜索您的术语,然后对结果进行求和,以获得用户在第一条消息中请求代理的案例数量:

df['Transcript'].str.split('\n').str.get(0).str.contains('agent|representative').sum()

# Output with your examples: 1
628mspwn

628mspwn2#

你可以使用re.findall()然后获取匹配的长度。
这是一般的方法。还有其他的方法。

>>> import re
>>>
>>> dfTranscript = '''
... User : Order status.
... Bot : Your order status is your orders tab.
... User : representative.
...
... User : Agent please.
... Bot : Waiting time is longer than usual.
... '''
>>>
>>> res = re.findall(r"(?i)\b(User\s*:.*?\b(?:agent|representative))\b", dfTranscript)
>>>
>>> print(len(res))
2

regex大概需要:

(?i)
 \b
 (                             # (1 start)
    User \s* : .*? \b
    (?: agent | representative )
 )                             # (1 end)
 \b

相关问题