如何统计句子中匹配指定词列表的单词总数并存入sum变量
实现方案
你可以用Pandas处理该结构化数据集,按以下步骤实现需求:
- 预处理
b列:如果你的b列存储的是带单引号的字符串(和示例格式一致),先将其拆分为由纯目标词组成的列表;如果b列本身已经是列表格式可跳过这步 - 逐行统计匹配次数:对每一行的
sentence文本,统计所有属于对应b列表的单词总出现次数,结果存入sum列即可。统计时建议用正则单词边界做匹配,避免把长单词中包含的目标子串误统计为命中。
代码示例
import pandas as pd import re # 读取/构造数据集,此处用你提供的示例数据做演示 df = pd.DataFrame({ 'sentence': ['i like coffee better than tea because coffee can make me stay happy'], 'b': ["'coffee', 'tea'"] }) # 预处理b列:将带引号的字符串转换为目标词列表 df['b'] = df['b'].apply(lambda x: [item.strip(" '") for item in x.split(',')]) # 定义单行文本统计函数 def calc_sum(row): content = row['sentence'] # 若需要不区分大小写匹配,就打开下面这行注释 # content = content.lower() target_list = row['b'] count = 0 for word in target_list: # \b 匹配单词边界,避免子串误匹配,比如不会把'coffeemaker'里的'coffee'算入统计 count += len(re.findall(rf'\b{re.escape(word)}\b', content)) return count # 生成sum列 df['sum'] = df.apply(calc_sum, axis=1)
运行上述代码后,示例数据对应的sum值为3,和你期望的输出效果完全一致。
如果你不需要做严格的整词匹配,只想统计子串出现次数,可以把正则匹配的部分替换为
content.count(word),但这种方式会出现子串误判的问题,优先推荐用正则整词匹配的方案。
内容的提问来源于stack exchange,提问作者Sari Devi
相关产品推荐
相关产品推荐

