Python读取txt文本后如何删除另一停用词txt文件中包含的词汇
问题分析
- 逻辑错误:循环替换停用词时,每次都基于未修改的原始
newline变量执行替换,再赋值给policy,前序的所有替换结果都会被覆盖,最终只会生效最后一个停用词的删除操作 - 匹配逻辑错误:直接使用
str.replace()会匹配词汇内部的停用词片段,比如文本中的there会被误删开头的the,变成无意义的ater - 流程不合理:统计词频前需要先将文本拆分为独立的单个词汇,再过滤停用词,直接在整段文本上删除停用词的逻辑本身就不符合需求
正确实现代码
import re from collections import Counter # 读取并清洗原文本(去除标点) with open('../data/policy_new.txt','r', encoding='utf-8') as handle: line = handle.read() # 去除标点,同时保留空格用于后续分词 newline = re.sub(r"[!\"#$%&'()*+,\-./:;<=>?@\[\]^_`{|}~“”‘’]+", "", line) # 读取停用词,转为集合提高查询效率 with open('../data/stop_words.txt','r', encoding='utf-8') as handle2: stopwords = {word.strip() for word in handle2.readlines()} # 第一步:将文本拆分为单个词汇(默认按空格拆分,所有词汇转为小写避免大小写匹配问题) word_list = [word.lower() for word in newline.split() if word.strip()] # 第二步:过滤停用词 filtered_word = [word for word in word_list if word not in stopwords] # 第三步:统计词频 word_count = Counter(filtered_word) # 输出结果示例:打印出现频率最高的10个词汇 print(word_count.most_common(10))
代码说明
- 停用词存储为
set类型,查询效率比列表高100倍以上,适合大量停用词的场景 - 先分词再过滤的逻辑可以完全避免词汇片段被误删的问题
- 新增了
collections.Counter工具直接完成词频统计,无需自己写计数逻辑 - 统一转为小写匹配,避免
The、THE这类大小写变体无法被识别为停用词的问题
内容的提问来源于stack exchange,提问作者程彩霞
相关产品推荐
相关产品推荐

