NLTK去除停用词后词频统计丢失空格问题求助
解决停用词去除后词频统计单词粘连问题
问题根源
你的代码存在两个核心错误导致单词粘连:
- 过滤非字母数字内容时,错误遍历原始文本的单个字符(
[word for word in review_comments]),而非之前分词得到的tokens列表,导致filtered变成单个字符集合,而非独立单词。 - 拼接字符串时未添加空格分隔单词,还错误使用了未过滤停用词的
filtered列表,最终所有字符连为一体。
修正后的完整代码
import nltk from nltk.tokenize import word_tokenize from nltk.corpus import stopwords from nltk.probability import FreqDist # 1. 对原始文本分词(保留初始正确步骤) tokens = word_tokenize(review_comments) # 2. 过滤非字母数字的token(基于分词后的单词,而非单个字符) filtered_tokens = [token for token in tokens if token.isalnum()] # 3. 加载停用词表 nltk.download('stopwords') english_stopwords = set(stopwords.words('english')) # 4. 过滤停用词(转小写判断,保留原始token大小写) filtered_no_stopwords = [token for token in filtered_tokens if token.lower() not in english_stopwords] # 5. 直接用过滤后的单词列表统计词频 fdist = FreqDist(filtered_no_stopwords) print(fdist)
关键修正说明
- 全程基于分词后的
tokens列表操作,确保处理对象是独立单词,而非单个字符。 - 无需将过滤后的单词拼接成字符串,直接传入
FreqDist即可完成统计,避免字符串处理错误。 - 若需生成过滤后的文本字符串,可在过滤停用词后执行:
filtered_text = ' '.join(filtered_no_stopwords)
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

