如何统计语料中特定词出现次数并将计数作为列追加到数据集
可行实现方案
你可以先把单文本的统计逻辑封装为独立函数,再通过pandas的apply方法批量处理每一行的message字段,最后把统计结果直接合并到原数据集即可。
1. 定义统计函数(对齐你原有的计数逻辑:每个命中关键词计1次,累计分类下的命中数)
import pandas as pd # 此处沿用你已定义的terms字典,无需修改 def count_cate_words(text): # 统一转小写避免大小写匹配遗漏 text_low = text.lower() res = {} for area, keyword_list in terms.items(): cnt = 0 for kw in keyword_list: if kw.lower() in text_low: cnt += 1 # 生成新列名,格式为「分类名_word」,可自行调整 res[f"{area}_word"] = cnt return pd.Series(res)
2. 批量处理并合并到原数据集
# 直接将统计结果拼接到原df末尾,自动生成所有分类对应的统计列 df = pd.concat([df, df["message"].apply(count_cate_words)], axis=1)
原有写法失效原因
你之前写的map方法只统计了单个字符串meet的出现次数,没有覆盖terms字典中Meet分类下的所有关键词,同时默认大小写敏感,文本中的Meet、MEET等形式都会被漏统计。
可选优化
- 如果你需要统计关键词的总出现次数(即同一个关键词出现3次就计3次,而非仅计1次),只需把函数中
if kw.lower() in text_low: cnt +=1替换为:
cnt += text_low.count(kw.lower())
- 如果要避免子串误匹配(比如
meeting中的meet不会被统计为命中),可以用正则匹配独立单词:
import re cnt += len(re.findall(rf"\b{re.escape(kw.lower())}\b", text_low))
内容的提问来源于stack exchange,提问作者Daniel Finley
相关产品推荐
相关产品推荐

