2017-03-01 6 views
3

私はPythonを使用していますが、大量のデータのTFIDF表現を取得するには、次のコードを使用してドキュメントをTFIDF形式に変換します。選択されたフィーチャー名を取得するTFIDFベクトル化ツール

from sklearn.feature_extraction.text import TfidfVectorizer 
tfidf_vectorizer = TfidfVectorizer(
    min_df=1, # min count for relevant vocabulary 
    max_features=4000, # maximum number of features 
    strip_accents='unicode', # replace all accented unicode char 
    # by their corresponding ASCII char 
    analyzer='word', # features made of words 
    token_pattern=r'\w{1,}', # tokenize only words of 4+ chars 
    ngram_range=(1, 1), # features made of a single tokens 
    use_idf=True, # enable inverse-document-frequency reweighting 
    smooth_idf=True, # prevents zero division for unseen words 
    sublinear_tf=False) 

tfidf_df = tfidf_vectorizer.fit_transform(df['text']) 

ここでは、パラメータmax_featuresを渡します。ベクタライザは、最高の機能を選択して、疎のマトリックスを返します。問題はどの機能が選択されているのか分からず、これらの機能名を私が入手したscipyマトリックスにどのようにマップするのですか?基本的にm個のドキュメントのnの選択されたフィーチャの場合、選択されたフィーチャを持つm x nマトリックスを、その整数IDではなく列名として使用します。これをどのように達成するのですか?

答えて

7

を与えます。これにより、選択されたフィーチャ名(選択された用語)が未加工ドキュメントから印刷されます。

tfidf_vectorizer.vocabulary_属性を使用して、機能名をインデックスにマップするdictを取得することもできますが、ソートは行われません。 get_feature_names()の配列はインデックスでソートされます。

+0

'vocabulary_'属性は、変換された行列ではなく、ベクトル化された行列のためのものです。 –

+1

はい、それはタイプミスでした。 –

3

使用tfidf_vectorizer.vocabulary_が、これはあなたがtfidf_vectorizer.get_feature_names()を使用できる機能からのマッピング(バックインデックスに用語)

+0

'tfidf_df.vocabulary_'は私に属性エラーを与えます。しかし、私は 'tfidf_vectorizer.vocabulary_'を使ってその機能を得ることができます、それはあなたが意味するものですか? –

+2

はい。 tfidf_vectorizer –

+0

はい変更を反映するように編集しましたが、 'get_feature_names()'を使用する方がより良い解決策です。 – putonspectacles

関連する問題