17

さて、私はTF * IDFに関するこれらの2つの投稿をフォローしていますが、少し混乱しています:http: //css.dzone.com/articles/machine-learning-text-feature

基本的に、複数のドキュメントの検索を含む検索クエリを作成したいと思います。scikit-learnツールキットとPython用のNLTKライブラリを使用したい

問題は、2つのTF*IDFベクトルがどこから来ているのかわからないことです。検索するには、1つの検索クエリと複数のドキュメントが必要です。各クエリに対する各ドキュメントのTF*IDFスコアを計算し、それらの間の余弦の類似性を見つけてから、スコアを降順で並べ替えてランク付けすることを考えました。ただし、コードは正しいベクトルを考え出していないようです。

クエリを1回の検索に減らすと、0の膨大なリストが返されますが、これは非常に奇妙なことです。

コードは次のとおりです。

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from nltk.corpus import stopwords

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

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

trainVectorizerArray = vectorizer.fit_transform(train_set).toarray()
testVectorizerArray = vectorizer.transform(test_set).toarray()
print 'Fit Vectorizer to train set', trainVectorizerArray
print 'Transform Vectorizer to test set', testVectorizerArray

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

transformer.fit(testVectorizerArray)

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

1 に答える 1

15

あなたはタプルとして定義train_settest_setていますが、それらはリストでなければならないと思います:

train_set = ["The sky is blue.", "The sun is bright."] #Documents
test_set = ["The sun in the sky is bright."] #Query

これを使用すると、コードは正常に実行されるようです。

于 2012-08-11T09:58:52.530 に答える