TF-IDF(特徴語の抽出)
※使用したデータ:カップヌードルミュージアムの口コミ500件
(じゃらんの口コミをスクレイピングで取得したもの。
なお、単語はリスト化した後に動詞・名詞・形容詞・副詞のみに限定。)
■分かち書きデータの作成
def generate_wakati_data(text_list): wakati_data = "" from janome.tokenizer import Tokenizer t = Tokenizer() for text in text_list: token_list = t.tokenize(text) for token in token_list: if token.part_of_speech.split(',')[0] in ['名詞']: #ここで品詞を限定 wakati_data = wakati_data + " " + token.base_form return wakati_data wakati_0 = generate_wakati_data(text_list_0) #text_listはデータフレームの1つのカラム(レビュー本文etc.)を指定するなど wakati_1 = generate_wakati_data(text_list_1) #以下、同様に分かち書きデータを作る
■TF-IDFの計算
datas = [wakati_0, wakati_1,...] #比較する分かち書きデータのリスト from sklearn.feature_extraction.text import TfidfVectorizer vectorizer = TfidfVectorizer() X = vectorizer.fit_transform(datas) terms = vectorizer.get_feature_names() #キーワードのリスト matrix = X.toarray() #TF-IDFの行列 def get_tfidfs(i, top): #i=matrixのindex(行)、top=取得する重要語の数 array = matrix[i] key_indexs = array.argsort()[-top:][::-1] key_terms = [terms[index] for index in key_indexs] tfidfs = [matrix[i][index] for index in key_indexs] return key_terms, tfidfs key_terms_0, tfidfs_0 = get_tfidfs(0, 50) key_terms_1, tfidfs_1 = get_tfidfs(1, 50) #以下、同様にTF-IDFを計算
■TFの計算
def get_tfs(wakati_data, key_terms): from collections import defaultdict term_list = wakati_data.split(" ") dic = defaultdict(lambda: 0) for key in term_list: dic[key] += 1 tfs = [(dic[term])/len(wakati_data.split(" ")) for term in key_terms] return tfs tfs_0 = get_tfs(wakati_0, key_terms_0) tfs_1 = get_tfs(wakati_1, key_terms_1) #以下、同様にTFを計算
■必要ならデータフレーム化
DF_tfidfs = pd.DataFrame({ 'category0':key_terms_0, 'category0_tfidf':tfidfs_0, 'category0_tf':tfs_0, 'category1':key_terms_1, 'category1_tfidf':tfidfs_1, 'category1_tf':tfs_1 }) DF_tfidfs