我通过执行以下代码创建了一个CountVectorizer对象。
count_vectorizer = CountVectorizer(binary='true')data = count_vectorizer.fit_transform(data)
现在我有一个新字符串,我想将这个字符串映射到从CountVectorizer获得的TDM矩阵中。所以我期望输入到TDM的字符串会得到一个对应的文档术语向量。
我尝试了,
count_vectorizer.transform([string])
结果出现了错误,AttributeError: transform not found。我添加了堆栈跟踪的一部分,由于堆栈跟踪很长,我只添加了相关的最后几行。
File "/Users/ankit/Desktop/geny/APIServer/RUNTIME/src/controller/sentiment/Sentiment.py", line 29, in computeSentiment vec = self.models[model_name]["vectorizer"].transform([string]) File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/scipy/sparse/base.py", line 440, in __getattr__ raise AttributeError(attr + " not found")
请指教。
谢谢
@Ankit S
回答:
你展示的例子无法重现 – 这里的string变量是什么?然而,以下代码似乎运行得很完美:
from sklearn.feature_extraction.text import CountVectorizerdata = ["aa bb cc", "cc dd ee"]count_vectorizer = CountVectorizer(binary='true')data = count_vectorizer.fit_transform(data)# 检查你的词汇表是否完美构建print count_vectorizer.vocabulary_# 尝试几个带有新词的新字符串。新词应该被忽略newData = count_vectorizer.transform(["aa dd mm", "aa bb"])print newData# 你可以通过写print newData.toarray()来获取数组
嗯,count_vectorizer.transform()接受字符串列表 – 而不是单个字符串。如果转换拟合没有工作,它应该会引发“ValueError: Vocabulary wasn’t fitted or is empty!” 在这种类型的错误情况下,请粘贴整个回溯堆栈(异常堆栈)。没有人能看出AttributeError是从哪里来的 – 是你的代码还是sklearn中的某个内部错误。