2012-08-11 14 views
12

Va bene, così ho seguito questi due messaggi su TF * IDF ma sto po 'confuso: http://css.dzone.com/articles/machine-learning-text-featureTF * IDF per query di ricerca

Fondamentalmente, voglio creare una query di ricerca che contiene le ricerche attraverso più documenti. Vorrei usare il toolkit scikit-learn e la libreria NLTK per Python

Il problema è che non vedo da dove provengano i due vettori TFF IDF. Ho bisogno di una query di ricerca e più documenti da cercare. Ho calcolato di calcolare i punteggi TFF IDF di ciascun documento rispetto a ogni query e di trovare la similarità del coseno tra di essi, quindi di classificarli ordinando i punteggi in ordine decrescente. Tuttavia, il codice non sembra venire con i giusti vettori.

Ogni volta che riduco la query a una sola ricerca, restituisce un elenco enorme di 0 che è davvero strano.

Ecco il codice:

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

Mi chiedevo se si calcola il coseno usando la matrice finale che si ottiene dalla stampa tfidf.todense() in caso affermativo come si fa? –

+1

Hey one sec ... Ill poster presto un esempio. – tabchas

+0

Grazie sarebbe fantastico. Vuoi mettere un link qui ..? È anche meglio. –

risposta

13

si sta definendo train_set e test_set come tuple, ma penso che dovrebbero essere liste:

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

Utilizzando questo codice sembra funziona bene

+0

Impressionante. Grazie per il consiglio. Qualche ragione per cui non funziona con le tuple? – tabchas

+2

È codificato per prendere liste come input :). Questi elenchi vengono convertiti internamente in array NumPy (è anche possibile passare direttamente un array NumPy). – Sicco