Python文本关键词计数时多词组合关键词无法统计问题排查
问题根因
代码存在两个核心问题,直接导致多词关键词统计失效、后续逻辑无法正常执行:
- 缩进语法错误:
data字典定义、遍历统计、结果打印的全部代码,被错误缩进放在get_keyword_counts函数内部,且位于return语句之后,属于永远不会执行的死代码。代码运行时定义完函数和关键词列表就会结束,根本不会走到后续统计流程。 - 统计逻辑不兼容多词关键词:原有逻辑通过
text.split()将文本按空格拆分为独立单个单词,再用Counter统计单个词的频次,拆分结果中不存在my name这类带空格的多词组合,自然无法匹配到对应关键词。
修复方案
- 调整代码缩进,将业务逻辑(data定义、遍历、打印)移到函数外部的全局作用域,保证执行流程通顺。
- 重写关键词统计逻辑,放弃拆分单个词计数的方案,直接遍历每个关键词统计其在文本中的出现次数,同时兼容单词、多词短语场景。
修复后完整代码
from collections import Counter import json from typing import List, Dict keywords = ['is', 'my name'] def get_keyword_counts(text: str, keywords: List[str]) -> Dict[str, int]: count_result = {} for keyword in keywords: # 直接统计关键词出现次数,同时兼容单词、多词短语 count_result[keyword] = text.count(keyword) return count_result data = { "policy": { "1": { "ID": "ML_0", "URL": "www.a.com", "Text": "my name is Martin and here is my code" }, "2": { "ID": "ML_1", "URL": "www.b.com", "Text": "my name is Mikal and here is my code" } } } for policy in data['policy'].values(): policy.update(get_keyword_counts(policy['Text'], keywords)) print(json.dumps(data, indent=4))
效果说明
修复后运行代码,两个文本条目都可以正确输出统计值:is单词语句中出现2次,my name多词短语出现1次,统计结果会自动追加到对应的policy字典条目下。
如果需要更精准的匹配(比如避免把
this中包含的is误判为关键词),可以引入正则基于单词边界做匹配优化,当前版本已经可以满足多词关键词统计的基础需求。
内容的提问来源于stack exchange,提问作者ZA09
相关产品推荐
相关产品推荐

