2016-10-18 1 views
2

Si j'utilise le TfidfVectorizer de sklearn pour générer des vecteurs de caractéristiques comme:Comment classer de nouveaux documents avec tf-idf?

features = TfidfVectorizer(min_df=0.2, ngram_range=(1,3)).fit_transform(myDocuments)

Comment pourrais-je générer alors des vecteurs de caractéristiques pour classer un nouveau document? Puisque vous ne pouvez pas calculer le tf-idf pour un seul document.

Serait-ce une bonne approche, pour extraire les noms de fonctions avec:

feature_names = TfidfVectorizer.get_feature_names()

puis compter la fréquence à long terme pour le nouveau document selon la feature_names?

Mais alors je ne vais pas obtenir les poids qui ont l'information d'une importance de mots.

Répondre

0

Vous devez enregistrer l'instance de TfidfVectorizer, il se souviendra du terme fréquences et du vocabulaire qui a été utilisé pour l'adapter. Il peut donner un sens des choses plus claires si plutôt que d'utiliser fit_transform, vous utilisez fit et transform séparément:

vec = TfidfVectorizer(min_df=0.2, ngram_range=(1,3)) 
vec.fit(myDocuments) 
features = vec.transform(myDocuments) 
new_features = fec.transform(myNewDocuments) 
0

Je préfère utiliser gensim avec un Latent Semantic Indexing comme enveloppe sur le corpus d'origine: bow-> tfidf-> lsi

tfidf = models.TfidfModel(corpus) 
corpus_tfidf = tfidf[corpus] 
lsi = models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=300) 
corpus_lsi = lsi[corpus_tfidf] # create a double wrapper over the original corpus: bow->tfidf->fold-in-lsi 

Ensuite, si vous devez continuer la formation:

new_tfidf = models.TfidfModel(corpus) 
new_corpus_tfidf = new_tfidf[corpus] 
lsi.add_documents(another_tfidf_corpus) # now LSI has been trained on corpus_tfidf + another_tfidf_corpus 
lsi_vec = model[tfidf_vec] # convert some new document into the LSI space 

Où corpus est-sac de mots-Comme vous pouvez le lire dans leur :

La formation LSI est unique en ce sens que nous pouvons continuer la «formation» à tout moment, simplement en fournissant plus de documents de formation. Cela se fait par des mises à jour incrémentielles du modèle sous-jacent, dans un processus appelé formation en ligne. Grâce à cette fonctionnalité, le flux de documents en entrée peut même être infini - il suffit de continuer à alimenter les nouveaux documents LSI dès leur arrivée, tout en utilisant le modèle de transformation calculé en lecture seule en attendant!

Si vous aimez la science-kit, gensim est également compatible with numpy