如果我使用TfidfVectorizer
中的sklearn
生成要素向量:
features = TfidfVectorizer(min_df=0.2, ngram_range=(1,3)).fit_transform(myDocuments)
我如何生成要素矢量来分类新文档?由于您无法计算单个文档的tf-idf。
使用以下方法提取要素名称是否正确?
feature_names = TfidfVectorizer.get_feature_names()
然后根据feature_names
?
但是我不会得到具有重要信息的权重。
答案 0 :(得分:3)
您需要保存TfidfVectorizer的实例,它会记住用于适应它的术语频率和词汇。如果不是使用fit_transform
而是分别使用fit
和transform
,这可能会让事情变得更清晰:
vec = TfidfVectorizer(min_df=0.2, ngram_range=(1,3))
vec.fit(myDocuments)
features = vec.transform(myDocuments)
new_features = fec.transform(myNewDocuments)
答案 1 :(得分:0)
我宁愿使用gensim和Latent Semantic Indexing作为原始语料库的包装: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
然后,如果你需要继续培训:
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
语料库是词袋
正如你可以在tutorials中读到的那样:
LSI培训的独特之处在于我们可以随时提供“培训”,只需提供更多培训文件即可。这是通过在称为在线培训的过程中对底层模型的增量更新来完成的。由于这个特性,输入文档流甚至可能是无限的 - 只需在LSI新文档到达时继续提供,同时将计算的转换模型用作只读!
如果您喜欢sci-kit,gensim也是compatible with numpy