2012-08-11 23 views
12

bien, así que he estado siguiendo estos dos puestos en TF * IDF, pero estoy algo confundido: http://css.dzone.com/articles/machine-learning-text-featureTF * IDF para consultas de búsqueda

Básicamente, quiero crear una consulta de búsqueda que contiene las búsquedas a través de múltiples documentos. Me gustaría usar el kit de herramientas scikit-learn así como la biblioteca NLTK para Python

El problema es que no veo de dónde vienen los dos vectores TF * IDF. Necesito una consulta de búsqueda y varios documentos para buscar. Calculé que calculo los puntajes TF * IDF de cada documento con cada consulta y encuentro la similitud del coseno entre ellos, y luego los clasifico ordenando los puntajes en orden descendente. Sin embargo, el código no parece generar los vectores correctos.

Cada vez que reduzco la consulta a solo una búsqueda, devuelve una enorme lista de 0, lo que es realmente extraño.

Aquí está el código:

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

Me preguntaba si calculó el coseno usando la matriz final que obtiene de print tfidf.todense() en caso afirmativo, ¿cómo lo hace? –

+1

Hola, un segundo ... Pronto publicaré un ejemplo. – tabchas

+0

Gracias eso sería fantástico. ¿Estaría poniendo un enlace aquí ...? Eso es aún mejor. –

Respuesta

13

Usted está definiendo train_set y test_set como tuplas, pero creo que deben estar listas:

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

Usando este código parece corre bien

+0

Impresionante. Gracias por el consejo. ¿Alguna razón por la que no funciona con tuplas? – tabchas

+2

Está codificado para tomar listas como entrada :). Estas listas se convierten internamente en matrices NumPy (también puede pasar una matriz NumPy directamente). – Sicco

Cuestiones relacionadas