Python中去除文本特殊字符生成单词列表及词频统计问题求助
问题解决:去除文本特殊字符并生成单词列表
先说说你代码里的问题:
- 原代码只有在单词包含特殊字符时才执行
append操作,那些本身没有特殊字符的单词根本没被加入new_list,所以输出只会有operations、below这类带符号的单词。 - 当你尝试
if i NOT in的条件时,单词里的每个正常字符都会触发一次append,导致同一个单词被重复添加多次。
方法一:一次性清除所有特殊字符(高效简洁)
用字符串的translate方法批量处理所有特殊字符,再分割成单词列表:
special_chars = '!,.?;:#$%^&*(),' original_text = input().lower() # 创建转换表删除所有特殊字符,再分割为单词 cleaned_list = original_text.translate(str.maketrans('', '', special_chars)).split() print(cleaned_list)
这个方法会先把文本里所有目标特殊字符一次性清除,再按空格分割成单词,完全保留原文本的单词顺序。
方法二:逐个单词过滤字符(直观易懂)
如果不想用translate,可以对每个单词单独过滤特殊字符:
special_chars = set('!,.?;:#$%^&*(),') original_list = input().lower().split() new_list = [] for item in original_list: # 过滤掉单词里的特殊字符,拼接成干净的单词 cleaned_word = ''.join([c for c in item if c not in special_chars]) new_list.append(cleaned_word) print(new_list)
每个单词只处理一次,不会出现重复添加的问题,最终列表和原单词顺序完全一致。
额外:统计单词出现次数
拿到干净的单词列表后,用collections.Counter可以快速统计次数:
from collections import Counter word_counts = Counter(cleaned_list) print(word_counts)
比如输入你的测试文本,会输出类似Counter({'the': 2, 'operations': 1, 'along': 1, ...})的结果。
内容的提问来源于stack exchange,提问作者Kris
相关产品推荐
相关产品推荐

