私は Python を使用しており、大規模なデータ コーパスの 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 疎行列を返します。問題は、どの機能が選択されるのかがわからず、それらの機能名を取得した scipy 行列にマッピングし直すにはどうすればよいかということです。基本的に、ドキュメントの数n
から選択された機能についてはm
、選択された機能を整数 ID ではなく列名として持つ行列が必要ですm x n
。どうすればこれを実現できますか?
ベストアンサー1
使用できますtfidf_vectorizer.get_feature_names()
これにより、生のドキュメントから選択された機能名(選択された用語)が印刷されます。
attributeを使用して、機能名をそのインデックスにマッピングする辞書を取得することもできますtfidf_vectorizer.vocabulary_
が、ソートされません。配列はget_feature_names()
インデックスによってソートされます。