Python机器学习中CountVectorizer报'NoneType'无lower属性错误
解决CountVectorizer中'NoneType' object has no attribute 'lower'错误
问题原因
你遇到的错误是因为CountVectorizer的执行顺序是先做预处理(preprocessor),再调用分词器(tokenizer)。默认情况下,preprocessor会执行小写转换(doc.lower()),当你的数据里有None值时,这个步骤直接触发AttributeError,你的自定义分词器根本没机会处理None。
修复方案
方案1:自定义预处理函数处理None值
替换默认的preprocessor,提前把None转为空字符串,再执行后续预处理:
def my_preprocessor(text): if text is None: return "" return text.lower() # 保留默认小写转换,不需要可以去掉 def my_tokenizer(text): return text.split() vectorizer = CountVectorizer(preprocessor=my_preprocessor, tokenizer=my_tokenizer) tag_dtm = vectorizer.fit_transform(tag_data['Tags'])
方案2:提前清理数据中的None值
在传入CountVectorizer之前,直接把数据里的None替换成空字符串,这样默认流程就能正常运行:
# 填充None为空字符串 tag_data['Tags'] = tag_data['Tags'].fillna("") # 自定义或默认分词器都可以正常工作 vectorizer = CountVectorizer(tokenizer=lambda x: x.split()) tag_dtm = vectorizer.fit_transform(tag_data['Tags'])
方案3:禁用默认预处理和小写转换
如果你的场景不需要默认的小写转换,可以直接关闭相关配置,让分词器直接处理输入:
def my_tokenizer(text): if text is None: return [] return text.split() # 设置lowercase=False,preprocessor=None,跳过默认预处理 vectorizer = CountVectorizer(tokenizer=my_tokenizer, lowercase=False, preprocessor=None) tag_dtm = vectorizer.fit_transform(tag_data['Tags'])
内容的提问来源于stack exchange,提问作者nes
相关产品推荐
相关产品推荐

