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

使用CountVectorizer处理movie_reviews数据时遇AttributeError求助

解决CountVectorizer获取词汇表的AttributeError问题

嘿,我来帮你搞定这个错误!你遇到的AttributeError: vocabulary not found是因为调用对象错了——fit_transform()返回的稀疏矩阵没有vocabulary_属性,这个属性是属于你创建的CountVectorizer实例cv的。

错误原因拆解

你执行的movie_train_cv.vocabulary_里,movie_train_cv是cv.fit_transform()生成的稀疏矩阵(类型是scipy.sparse.csr_matrix),它只存储文本的词频统计数据,并不保存词汇表信息。词汇表是由CountVectorizer实例在fit过程中生成,并且存在自身的vocabulary_属性里的。

正确代码示例

把最后一行改成调用cv.vocabulary_就可以了,我还补充了数据集加载的必要步骤:

from sklearn.feature_extraction.text import CountVectorizer
import nltk
from nltk.corpus import movie_reviews

# 下载并加载所需的数据集和分词工具
nltk.download('movie_reviews')
nltk.download('punkt')
movie_train = movie_reviews

# 初始化CountVectorizer
cv = CountVectorizer(tokenizer=nltk.word_tokenize, stop_words='english')
# 拟合文本并转换为词频矩阵
movie_train_cv = cv.fit_transform(movie_train.data)

# 正确获取带索引的唯一词汇字典
vocabulary_with_index = cv.vocabulary_

# 可选:按索引排序查看词汇(更方便浏览)
sorted_vocab = sorted(vocabulary_with_index.items(), key=lambda x: x[1])
print("前10个词汇及对应索引:")
for word, idx in sorted_vocab[:10]:
    print(f"{word}: {idx}")

结果说明

cv.vocabulary_会返回一个字典,其中键是处理后的唯一词汇,值是该词汇对应的特征索引,完全符合你想要的“带索引的唯一词汇”需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:48:16