TF * IDF pour les requêtes de recherche
Ok, donc j'ai suivi ces deux messages sur TF * IDF mais je suis un peu confus: http://css.dzone.com/articles/machine-learning-text-feature
fondamentalement, je veux créer une requête de recherche qui contient des recherches à travers plusieurs documents. Je voudrais utiliser la boîte à outils scikit-learn ainsi que la bibliothèque NLTK pour Python
le problème est que je ne vois pas d'où viennent les deux vecteurs TF*IDF. J'ai besoin d'une recherche interrogation et documents multiples à rechercher. J'ai pensé que je calcule les scores TF * IDF de chaque document par rapport à chaque requête et trouve la similitude cosinus entre eux, et puis les classer en triant les scores dans l'ordre décroissant. Cependant, le code ne semble pas trouver les bons vecteurs.
chaque fois que je réduis la requête à une seule recherche, il retourne une énorme liste de 0 qui est vraiment étrange.
voici le code:
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()
1 réponses
vous définissez train_set
et test_set
comme des tuples, mais je pense qu'ils devraient être des listes:
train_set = ["The sky is blue.", "The sun is bright."] #Documents
test_set = ["The sun in the sky is bright."] #Query
le code semble fonctionner correctement.