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

Python中CountVectorizer传入自定义词汇表返回全零结果如何解决?

问题根因
  • CountVectorizer的vocabulary参数默认接收单个分词单元的集合,你传入的是完整短语,而工具默认分词逻辑会把输入文本拆分为单个词汇,不会将整段短语作为匹配单元,无法命中你自定义的词汇条目,所以输出全为0。
  • 工具默认开启lowercase=True,会自动将所有字符转为小写,你自定义词汇中的大写Cat就算按单个词匹配也会因为大小写不一致无法命中。
  • 默认分词正则会自动过滤标点符号,你自定义词汇中的:不会出现在分词结果中,进一步导致匹配失败。
解决方案

方案1:按短语匹配(匹配你的预期输出)

如果你确实需要将完整短语作为特征维度,调整参数覆盖短语匹配的要求即可,修改后可运行代码如下:

from sklearn.feature_extraction.text import CountVectorizer

foo = ["the Cat is :", "is smart now"]
cv = CountVectorizer(
    vocabulary = foo,
    lowercase = False, # 关闭自动转小写,匹配词汇中的大写格式
    ngram_range = (2,4), # 允许将2-4个连续分词组合为匹配单元,覆盖短语长度
    token_pattern = r'\b\w+\b|:' # 调整分词正则,保留冒号符号
)
new_list =["the Cat is : the most","is smart now"]
data = cv.fit_transform(new_list).toarray()
print(data)

运行后输出:

[[1 0]
 [0 1]]

和你的预期完全一致。

方案2:按单个词汇匹配

如果是误将整句作为词汇表传入,原本需要自定义单个词的词汇维度,直接将vocabulary调整为单个词的列表即可:

# 示例自定义单个词词汇表
foo = ["the", "cat", "is", "smart", "now"]
cv = CountVectorizer(vocabulary = foo, lowercase = True)

内容的提问来源于stack exchange,提问作者Raed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:27:00