scikit-learn执行LDA时停用词被忽略及预处理不一致警告问题求解
问题产生原因
- 编码读取错误:丹麦语包含æ、ø、å等特殊字符,你读取
stopord.txt时未指定编码,Windows系统默认使用GBK/CP1252编码读取文件,导致特殊字符被转义为乱码(比如原词på被错误识别为pã),无法和评论中的正常丹麦语词汇匹配。 - 预处理规则不一致:
CountVectorizer默认会对所有输入内容(包括你传入的停用词列表)执行转小写、分词操作,如果你的停用词表中的词汇存在大小写和评论不匹配、带多余空白字符的情况,向量化器处理停用词后得到的token会和原停用词不一致,最终导致停用词过滤失效。 - 停用词列表存在无效值:你用
split('\n')分割文件内容时,如果停用词文件末尾有空行,会生成空字符串进入停用词列表,干扰匹配逻辑。
解决方法
- 修正停用词读取逻辑,指定UTF-8编码,同时统一转小写、过滤空值和首尾空白:
# 替换原有的停用词读取代码 with open('stopord.txt', 'r', encoding='utf-8') as f: my_stop_words = [line.strip().lower() for line in f if line.strip()]
- 显式指定向量化器的小写参数,保证预处理规则统一:
tf_vectorizer = CountVectorizer( max_df=0.95, min_df=2, max_features=no_features, stop_words=my_stop_words, lowercase=True )
- (可选验证)读取停用词后可以打印部分词汇确认特殊字符无乱码,也可以手动取评论中的已知停用词,验证是否存在于处理后的
my_stop_words列表中。
内容的提问来源于stack exchange,提问作者Kristoffer Larsen
相关产品推荐
相关产品推荐

