使用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
相关产品推荐
相关产品推荐

