前回の記事では、スクレイピングで自分のブログの文書を保存しました。
今回は形態素解析し、自分のブログでどの単語が頻出しているか調べてみます。
形態素解析
文章を意味の持つ最小の単位である形態素に分解します。
最初に、output.csv として出力した ブログ文章の出力データを取り込んでいきます。
1 2 3 |
import pandas as pd df = pd.read_csv('output.csv', index_col=0) df.head() |
1センテンスを、1行ずつデータフレームに格納できました。
Janomeを使用し、形態素解析してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
from janome.tokenizer import Tokenizer t = Tokenizer() words = [] word_dic = {} for i, rows in df.iterrows(): malist = t.tokenize(rows['0']) for w in malist: word = w.surface ps = w.part_of_speech.split(",")[0] if not ps in ["形容詞", "名詞", "副詞"]: continue # if not ps in ["名詞"]: continue if not word in word_dic: word_dic[word] = 0 word_dic[word] += 1 #words.append(w.surface) words.append(w.base_form) text = ' '.join(words) #print(text) with open('wakati.txt', 'w', encoding='utf=8') as f: f.write(text) print("finish") |
1 2 3 |
if not word in word_dic: word_dic[word] = 0 word_dic[word] += 1 |
この部分は 初出の単語を辞書に登録し、数をカウントします。
頻出単語上位100位を表示してみます。
1 2 3 |
keys = sorted(word_dic.items(), key= lambda x:x[1], reverse=True) for word, cnt in keys[:100]: print("{0}({1})".format(word, cnt), end=" | ") |
「こと」「の」「よう」などの あまり意味がない単語もカウントされてますね。
WordCloud
WordCloudで頻出単語を可視化します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import matplotlib.pyplot as plt from wordcloud import WordCloud not_words = [ u'こと', u'の', u'よう', u'ご', u'ん', u'そう', u'ため',u'そう', u'これ', u'もの', u'ない'] path = r" " wc = WordCloud(background_color="white", # colormap = "winter", width=900, height=600, font_path=path, stopwords=set(not_words)) wc.generate(text) plt.figure(figsize=(15,12)) plt.imshow(wc) plt.axis("off") plt.show() |
1 2 |
not_words = [ u'こと', u'の', u'よう', u'ご', u'ん', u'そう', u'ため',u'そう', u'これ', u'もの', u'ない'] path = r" " |
この部分は表示したくない単語と、フォントのPathを指定しています。
フォントファイルは、Mac: /Library/Fonts/~ , Windows: C:/Windows/Fonts/~ にある場合がほとんどのようです。
表示結果はこちら。
「サービス」「ポイント」などのブログの特徴を表す単語が頻出しています。
今回はブログ内の頻出単語を調べましたが、Twitter,青空文庫で小説内の頻出単語を調べても面白いですね。