Utilisation de la transformation TfidfVectorizer de Sklearn

J'essaie d'obtenir le vecteur TF-idf pour un seul document en utilisant L'objet TfidfVectorizer de Sklearn. Je crée un vocabulaire basé sur certains documents de formation et utilise fit_transform pour former le TfidfVectorizer. Ensuite, je veux trouver les vecteurs TF-idf pour n'importe quel document de test donné.

from sklearn.feature_extraction.text import TfidfVectorizer

self.vocabulary = "a list of words I want to look for in the documents".split()
self.vect = TfidfVectorizer(sublinear_tf=True, max_df=0.5, analyzer='word', 
                 stop_words='english')
self.vect.fit_transform(self.vocabulary)

...

doc = "some string I want to get tf-idf vector for"
tfidf = self.vect.transform(doc)

Le problème est que cela renvoie une matrice avec n Lignes où n est la taille de ma chaîne doc. Je veux qu'il retourne juste un seul vecteur représentant le TF-idf pour la chaîne entière. Comment puis-je faire voir la chaîne comme un seul document, plutôt que chaque caractère étant un document? En outre, je suis très nouveau dans l'exploration de texte, donc si je fais quelque chose de mal conceptuellement, ce serait génial de savoir. Toute aide est appréciée.

32
demandé sur Srikar Appalaraju 2013-11-22 01:18:43

1 réponses

Si vous voulez calculer la tf-idf uniquement pour un vocabulaire, utiliser vocabulary argument TfidfVectorizer constructeur,

vocabulary = "a list of words I want to look for in the documents".split()
vect = TfidfVectorizer(sublinear_tf=True, max_df=0.5, analyzer='word', 
           stop_words='english', vocabulary=vocabulary)

Ensuite, pour ajuster, c'est-à-dire calculer les comptes, avec un corpus donné, c'est-à-dire un itérable de documents, utilisez fit:

vect.fit(corpus)

Méthode fit_transform est un raccourcissement de

vect.fit(corpus)
corpus_tf_idf = vect.transform(corpus) 

Enfin, la méthode transform accepte un corpus, donc pour un seul document, vous devez le passer en tant que liste, ou il est traité comme itérable de symboles, chaque symbole étant un document.

doc_tfidf = vect.transform([doc])
42
répondu alko 2017-04-02 07:15:21