You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:18:21