2017-07-31 109 views
1

我有一个字符串表示一篇文章,名为text。我试图运行TFIDF并得到一个数据帧。生成的数据框应该将每个单词作为列名称。这里是我的尝试:此代码运行SKLearn:使用TfidfVectorizer时丢失列名称

corpus = [text] 
tfidf_transformer = TfidfVectorizer(min_df=1, ngram_range=(1,1), use_idf=True) 
tfidf_df = tfidf_transformer.fit_transform(corpus) 
tfidf_df = pd.DataFrame(tfidf_df.toarray()) 

print 'tfidf_df: ', tfidf_df.head() 

之后,我有一个数字我的列名,而不是较TFIDF的特征词。

我应该如何得到列中的每个词在text字符串中遇到?

谢谢!

回答

4

可以使用vocabulary_属性从TfidfVectorizer.

# -*- coding: utf-8 -*- 

from sklearn.feature_extraction.text import TfidfVectorizer 
import pandas as pd 
import numpy as np 

corpus = ["quick brown fox", "something else"] 

tf_idf = TfidfVectorizer(min_df=1, ngram_range=(1,1), use_idf=True).fit(corpus) 
vocab = tf_idf.vocabulary_ 
tf_idf_df = tf_idf.transform(corpus) 

# make sure keys are sorted 
tf_idf_df = pd.DataFrame(tf_idf_df.toarray(), columns=sorted(vocab.keys())) 
tf_idf_df 
    brown  else  fox  quick something 
0 0.57735 0.000000 0.57735 0.57735 0.000000 
1 0.00000 0.707107 0.00000 0.00000 0.707107