基于词表统计文本文件词频遇问题:代码无结果求助排查
代码问题排查与修正
问题原因
- 文本拆分逻辑错误:你用
re.findall('\w+', ...)将文本拆分为单个单词,但目标词表包含virtual currency这类多词短语,拆分后的单个单词无法与短语匹配,导致没有结果。 - 计数语法错误:
counter[i]= +1的写法无法实现累计计数,即便匹配到目标词,每次也只会将值设为1,且初始空字典直接赋值可能引发键不存在的问题。
修正后的代码
import re from collections import defaultdict counter = defaultdict(int) path = r'C:\test\QTR2\712515\0000712515-17-000035.txt' # 修正了词表中"Etherrum"的拼写错误(如果是输入笔误) target_terms = ['virtual currency','virtual currencies','Bitcoin','Litecoin','dogecoin','Ethereum'] # 安全读取文件并转为小写 with open(path, 'r', encoding='utf-8') as f: doc_content = f.read().lower() # 遍历每个目标短语,统计出现次数 for term in target_terms: # 用正则匹配完整短语,避免部分匹配 match_count = len(re.findall(r'\b' + re.escape(term) + r'\b', doc_content)) counter[term] += match_count # 输出统计结果 print(dict(counter))
改进说明
- 使用
with语句读取文件,确保文件资源自动释放,避免资源泄漏。 - 直接在完整文本中匹配目标短语,
\b用于匹配词边界,避免把类似"virtual currencyabc"的内容误判为匹配;re.escape处理短语中的特殊字符,避免正则语法冲突。 - 用
defaultdict(int)简化计数逻辑,无需手动判断键是否存在。 - 修正了词表中可能的拼写错误(将"Etherrum"改为常见的"Ethereum",如果是输入时的笔误)。
内容的提问来源于stack exchange,提问作者Ciercy
相关产品推荐
相关产品推荐

