2013-11-21 17 views
27

Sto cercando di ottenere il vettore tf-idf per un singolo documento utilizzando l'oggetto TfidfVectorizer di Sklearn. Creo un vocabolario basato su alcuni documenti di formazione e utilizzo fit_transform per addestrare TfidfVectorizer. Quindi, voglio trovare i vettori tf-idf per ogni dato documento di test.Utilizzo della trasformazione TfidfVectorizer di Sklearn

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) 

Il problema è che questo restituisce una matrice con n righe dove n è la dimensione della mia stringa doc. Voglio che restituisca solo un singolo vettore che rappresenta il tf-idf per l'intera stringa. Come posso rendere questo vedere la stringa come un singolo documento, piuttosto che ogni carattere è un documento? Inoltre, sono molto nuovo nel text mining, quindi se sto facendo qualcosa di sbagliato concettualmente, sarebbe bello saperlo. Qualsiasi aiuto è apprezzato.

risposta

36

Se si vuole calcolare TF-IDF solo per un determinato linguaggio, usare vocabulary argomento TfidfVectorizer costruttore,

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) 

Poi, per adattarsi, cioè calcolare i conteggi, con un dato corpus, vale a dire un iterabile di documenti, utilizzare fit:

vect.fit(corpus) 

Metodo fit_transform è un'abbreviazione per

Ultimo, il metodo transform accetta un corpus, quindi per un singolo documento, è necessario passarlo come elenco oppure viene trattato come iterabile di simboli, ogni simbolo è un documento.

doc_tfidf = vect.transform([doc]) 
+3

Allora, qual è la differenza tra fit_transform e trasformare? Ho letto la documentazione, ma non capisco chiaramente. Usiamo fit_transform per contare le occorrenze di ogni termine in un elenco di documenti? Quindi trasformare ... prende quei conteggi e calcola il vettore tf-idf per un elenco di documenti? – Sterling

+4

@Sterling si usa 'fit' o' fit_transform' (vedi aggiornamento) per addestrare la trasformazione di tfidf, e 'transform' per applicare senza contare l'aggiornamento – alko

Problemi correlati