Python中计算TF-IDF时fit_transform报错:空词汇表问题求助
解决TF-IDF空词汇表错误的方案
错误原因
你的代码里所有文本都是单个字符的单词(a、b、c等),而TfidfVectorizer默认的token_pattern参数是r"(?u)\b\w\w+\b",这个正则表达式只会匹配至少两个字符的单词,导致所有单个字符的词都被过滤,最终词汇表为空,触发报错。
修复代码
修改TfidfVectorizer的初始化参数,指定能匹配单个字符的token_pattern,同时可以直接提取目标词的TF-IDF值:
import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer mylist = [ 'a a b c', 'a c c c d e f', 'a c d d d', 'a d f', ] df = pd.DataFrame({"texts": mylist}) # 修改token_pattern,匹配单个或多个字符的单词 tfidf_vectorizer = TfidfVectorizer(ngram_range=[1, 1], token_pattern=r"(?u)\b\w+\b") tfidf_separate = tfidf_vectorizer.fit_transform(df["texts"]) # 查看生成的词汇表,确认包含单个字符的词 print(tfidf_vectorizer.vocabulary_) # 提取第3行(索引为2)文本中"d"的TF-IDF值 d_vocab_index = tfidf_vectorizer.vocabulary_['d'] print(f"第3行文本中'd'的TF-IDF值: {tfidf_separate[2, d_vocab_index]}")
额外说明
- 若需要过滤英文停用词,可添加
stop_words='english'参数,但要注意单个字符的停用词仍会受token_pattern影响;当前代码默认stop_words=None,不会过滤任何词。 ngram_range=[1,1]是默认值,可省略不写。
内容的提问来源于stack exchange,提问作者nursat
相关产品推荐
相关产品推荐

