TfidfVectorizer运行报错first argument must be string or compiled pattern咨询
错误原因
- 核心触发点:你在
analyzer='word'模式下将token_pattern设为None,且未额外指定自定义分词器。TfidfVectorizer的word分析模式默认需要调用token_pattern对应的正则表达式提取词汇,传入None会导致正则调用时参数类型不匹配,直接触发该TypeError。 - 次要格式问题:你直接将整个DataFrame传入
fit_transform方法,该方法要求输入为一维的文本序列,传入二维DataFrame也不符合输入格式要求。
解决方法
如果你的dfff中已经完成分词,每一行对应文本的分词结果为空格分隔的字符串,按以下步骤修改即可:
- 修正TfidfVectorizer初始化参数,两种方案二选一:
方案一:搭配自定义分词器使用token_pattern=None
# 已提前完成分词,直接按空格拆分即可 def dummy_tokenizer(text): return text.split() tfidf_vecer2 = TfidfVectorizer( analyzer = 'word', tokenizer = dummy_tokenizer, token_pattern = None )
方案二:调整token_pattern适配已分词内容,无需自定义分词器
# 正则匹配所有非空格连续字符串,对应你提前拆分好的词单元 tfidf_vecer2 = TfidfVectorizer( analyzer = 'word', token_pattern = r'\S+' )
- 传入正确的一维语料序列:假设你存储分词结果的列名为
cut_text,修改fit_transform入参:
# 仅传入分词内容列,不要传入整个DataFrame tfidf_vectorr= tfidf_vecer2.fit_transform(dfff['cut_text']) # 可直接调用toarray()方法,无需先转dense再转numpy数组 tfidf_array = tfidf_vectorr.toarray()
内容的提问来源于stack exchange,提问作者Mint THnk
相关产品推荐
相关产品推荐

