ここでは、Janomeを用いた出現頻度の解析方法について解説しています。
この記事の対象
行ったこと
青空文庫のテキストデータ太宰治の「I can speak」を解析しました。
結果として、出現頻度の上位20個とWordCloudでの可視化した結果を載せています。
プログラム
from janome.tokenizer import Tokenizer
#1---テキストデータの指定
txt ="くるしさは、忍従の夜。あきらめの朝。この世とは、あきらめの努めか。わびしさの堪えか。わかさ、かくて、日に虫食われゆき、仕合せも、陋巷ろうこうの内に、見つけし、となむ。-----以下、略"
#2---形態素解析オブジェクトの生成
t = Tokenizer()
#3---テキストを一行ずつ処理
word_txt = {}
lines = txt.split("\r\n")
for line in lines:
malist = t.tokenize(line)
for w in malist:
word = w.surface#4---単語情報の読込
ps = w.part_of_speech #5---品詞情報の読込
if ps.find('名詞') < 0: continue #6---名詞のカウント
if not word in word_txt:
word_txt[word] = 0
word_txt[word] += 1 #7---カウント
#8---頻出単語の表示
keys = sorted(word_txt.items(), key=lambda x:x[1], reverse=True)
for word,cnt in keys[:20]:
print("{0}({1}) ".format(word,cnt), end="")
上記がプログラムになります。
それでは解説していきます。
1の部分はテキストデータを指定しています。
#2---形態素解析オブジェクトの生成
t = Tokenizer()
2の部分ではjanomeの形態素解析オブジェクトを生成しています。
#3---テキストを一行ずつ処理
word_txt = {}
lines = txt.split("\r\n")
for line in lines:
malist = t.tokenize(line)
3の部分では、はじめにリストを作成し、不要な改行を削除しています。for構文で解析しています。
for w in malist:
word = w.surface#4---単語情報の読込
ps = w.part_of_speech #5---品詞情報の読込
if ps.find('名詞') < 0: continue #6---名詞のカウント
if not word in word_txt:
word_txt[word] = 0
4の部分では単語情報のプロパティである「surface」を指定しています。
同時に5の部分では、品詞情報のプロパティである「part_of_speech」を指定しています。
次に6の部分では、名詞だけをカウントしています。
word_txt[word] += 1 #7---カウント
7の部分では、頻出をカウントしています。
#8---頻出単語の表示
keys = sorted(word_txt.items(), key=lambda x:x[1], reverse=True)
for word,cnt in keys[:20]:
print("{0}({1}) ".format(word,cnt), end="")
8の部分では、解析した内容をソートして上から20個抽出しています。
結果
私(11) 声(6) よう(6) 工場(6) ん(6) 弟(6) 何(5) ひとり(5) の(5) 女工(5) さん(5) 夜(4) 東京(4) もの(4) 仕事(4) それ(4) 甲府(4) I(4) can(4) speak(4)
結果は上記のようになりました。
主題の「I can speak」が出てきていることが分かります。また、私や弟、女工出てきており、人に関する用語も多いことがわかります。
WordCloudでの単語を可視化した結果は以下になります。WordCloudについては下記の関連記事をご参照下さい。
関連記事
項目 | 内容 |
Word Cloudによるテキストファイルの可視化方法 | リンク先では、Word Cloudによる可視化方法を解説しています。 |