TF *

2012-08-11 32 views
12

Okay Arama Sorguları için IDF, bu yüzden TF * IDF bu iki mesajları takip ediyorum, ancak çok az karıştı: http://css.dzone.com/articles/machine-learning-text-featureTF *

Temelde, birden çok belge içinde arama yapar içeren bir arama sorgusu oluşturmak istiyorum. Ben scikit-learn araç setini ve Python

için NLTK kitaplığını kullanmak istiyorum. Sorun şu ki, iki TF * IDF vektörünün nereden geldiğini görmüyorum. Aramak için bir arama sorgusuna ve birden çok dokümana ihtiyacım var. Her bir dokümanın TF * IDF puanlarını her bir sorguya göre hesapladığımı ve aralarındaki kosinüs benzerliğini bulmayı ve puanları azalan düzende sıralayarak sıraladığımı düşündüm. Ancak, kod doğru vektörlerle gelmiyor gibi görünüyor.

Sorguyu yalnızca bir aramaya indirdiğimde, çok garip olan 0'ların büyük bir listesini döndürüyor. İşte

kodudur:

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() 
+0

Baskı tfidf.todense() öğesinden aldığınız son matrisi kullanarak kosinüsü hesaplarsanız bunu nasıl yapıyorsunuz diye merak ediyordum. –

+1

Hey bir saniye ... Yakında bir örnek göndereceğim. – tabchas

+0

Teşekkürler, bu harika olurdu. Buraya bir link koyar mısınız ..? Bu daha da iyi. –

cevap

13

Sen küpe olarak train_set ve test_set tanımlarken, ama onlar listeleri olması gerektiğini düşünüyorum: Bu kod görünüyor kullanma

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

iyi koş.

+0

Awesome. Tavsiyen için teşekkürler. Tuples ile çalışmadığı herhangi bir sebep var mı? – tabchas

+2

Listeleri giriş olarak almak için kodlanmıştır :). Bu listeler dahili olarak NumPy dizilerine dönüştürülür (doğrudan bir NumPy dizisini de geçirebilirsiniz). – Sicco