4

コサイン類似度を使用してscikitを使用して同様の質問を見つけようとしています。私はインターネットで入手可能なこのサンプルコードを試していました。Link1Link2

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from nltk.corpus import stopwords
import numpy as np
import numpy.linalg as LA

train_set = ["The sky is blue.", "The sun is bright."]
test_set = ["The sun in the sky is bright."]
stopWords = stopwords.words('english')

vectorizer = CountVectorizer(stop_words = stopWords)
transformer = TfidfTransformer()

trainVectorizerArray = vectorizer.fit_transform(train_set).toarray()
trainVectorizerArray = vectorizer.
testVectorizerArray = vectorizer.transform(test_set).toarray()
print 'Fit Vectorizer to train set', trainVectorizerArray
print 'Transform Vectorizer to test set', testVectorizerArray
cx = lambda a, b : round(np.inner(a, b)/(LA.norm(a)*LA.norm(b)), 3)

for vector in trainVectorizerArray:
    print vector
    for testV in testVectorizerArray:
        print testV
        cosine = cx(vector, testV)
        print cosine

transformer.fit(trainVectorizerArray)
print transformer.transform(trainVectorizerArray).toarray()

transformer.fit(testVectorizerArray)
tfidf = transformer.transform(testVectorizerArray)
print tfidf.todense()

私はいつもこのエラーが発生します

Traceback (most recent call last):
File "C:\Users\Animesh\Desktop\NLP\ngrams2.py", line 14, in <module>
trainVectorizerArray = vectorizer.fit_transform(train_set).toarray()
File "C:\Python27\lib\site-packages\scikit_learn-0.13.1-py2.7-win32.egg\sklearn  \feature_extraction\text.py", line 740, in fit_transform
raise ValueError("empty vocabulary; training set may have"
ValueError: empty vocabulary; training set may have contained only stop words or min_df  (resp. max_df) may be too high (resp. too low).

このリンクで入手できるコードも確認しました。そこでエラーが発生しましAttributeError: 'CountVectorizer' object has no attribute 'vocabulary'た。

この問題を解決する方法は?

私はWindows732ビットとscikit_learn0.13.1でPython2.7.3を使用しています。

4

1 に答える 1

6

モジュールがオーバーホールされた開発(0.14より前)バージョンfeature_extraction.textを実行しているため、同じエラーメッセージが表示されません。しかし、私はあなたがこの問題を解決できると思います:

vectorizer = CountVectorizer(stop_words=stopWords, min_df=1)

このmin_dfパラメーターによりCountVectorizer、ドキュメントが少なすぎる場合に発生する用語が破棄されます(予測値がないため)。デフォルトでは2に設定されています。これは、すべての用語が破棄されることを意味するため、空の語彙を取得します。

于 2013-03-05T10:11:02.510 に答える