![見出し画像](https://assets.st-note.com/production/uploads/images/64312520/rectangle_large_type_2_659259a874195cb29a3eb1b398288641.png?width=1200)
MeCabを使いワードクラウドを書いてみた。
前回までに、MeCabをインストールし、jupyter notebook で使えるようにしました。
そこで今回は、自然言語処理といえば、のワードクラウドを書いてみました。
環境は前回と同様の、jupyter notebook で作成していきます。
データのダウンロード
まずは解析するデータを入手したいと思います。
だいたいこのような場合は、夏目漱石さんの「吾輩は猫である」が使われることが多いですね。
それでは面白くないので、私がかつて好きだった江戸川乱歩さんにしてみたいと思います。
江戸川乱歩と言えば、怪人二十面相、ですよね。
ですので、怪人二十面相、を探しましょう。
ちょうど「青空文庫」にテキストデータがあるようです。
https://www.aozora.gr.jp/cards/001779/card57228.html
確かにありました。早速テキストデータをダウンロードし、任意のフォルダーにセーブします。
品詞とその頻度を抽出してみる
こちらのサイトをもとに作成します。
with open('kaijin_nijumenso.txt', encoding='shift-jis') as f:
txt_data = f.read()
node = tagger4.parseToNode(txt_data)
hcount = {}
while node:
hinshi = node.feature.split(",")[0]
if hinshi in hcount.keys():
freq = hcount[hinshi]
hcount[hinshi] = freq + 1
else:
hcount[hinshi] = 1
node = node.next
for key,value in hcount.items():
print(key + ":" + str(value))
元とほぼほぼ一緒です。
違うのは、怪人二十面相であることとぐらいでしょうか。
実行した結果が以下のとおりです。
BOS/EOS:2
名詞:17960
記号:12466
助詞:17344
動詞:8289
助動詞:7272
接頭詞:321
連体詞:790
副詞:1994
接続詞:524
形容詞:886
感動詞:269
フィラー:25
その他:3
沢山の品詞、特に名詞と記号がありますね。
どんなワードが多いのか楽しみですね。
ワードクラウドを描く
こちらのページを参考にしました。
以外に簡単、ライブラリを読み込むだけのようです。
https://anaconda.org/conda-forge/wordcloud
しかも、Anacondaですでにパッケージがあるようです。
conda install -c conda-forge wordcloud
でインストールするだけです。
次のお手本によるとフォントが必要なようです。
同じ「ヒラギノ角ゴシック W3」を入れましょう。
探したところ、Macではシステムフォルダー内にあるようです。
fpath = "/System/Library/Fonts/ヒラギノ角ゴシック W3.ttc"
として指定しました。
さあ実際に書いてみましょう。
またまたお手本を元に、以下のようにしてみました。
# 名詞のみ取り出してワードクラウドを描く
with open('kaijin_nijumenso.txt', encoding='shift-jis') as f:
txt_data = f.read()
node1 = tagger4.parseToNode(txt_data)
word1 = ""
while node1:
hinshi1 = node1.feature.split(",")[0]
if hinshi1 in ["名詞"]:
origin1 = node1.feature.split(",")[6]
word1 = word1 + " " + origin1
node1 = node1.next
wordcloud1 = WordCloud(background_color = 'white', font_path = fpath, width=600, height=400, min_font_size=15)
wordcloud1.generate(word1)
wordcloud1.to_file("./wordcloud_meishi.png")
数字のところは適宜変えてください。(例 node1 nodeでもOK)
名詞のみにしたのは、文章が長く、処理に時間がかかりそうだったからです。
実行します。
で、実行した結果が上のサムネイルに貼り付けたものです。
二十面相、小林、明智、少年、などなど乱歩ファンは興味をそそられるワードがありますね。
この程度ならあっという間でした。それ以外は結構時間がかかるようです。
今やっているのは、
名詞かつ要らない用語を削除する。
というスクリプトです。
それ以外にも、お手本どおり、動詞と形容詞を含めて、も実行しています。
で、まだ終わっていません。
結構時間かかるものですね。というのが印象です。
怪人二十面相、重かったのかもしれません。
ちょっと題材を変えてみたほうが良さそうです。
おまけ
時間計測方法
こういう処理をしていると、結構時間があっかかる報告です。
https://qiita.com/fantm21/items/3dc7fbf4e935311488bc
こちらのサイトをもとに、かかった時間が計算できるようです。
import time
start = time.time()
これで開始時刻が収集されます。
終わり時間は
elapsed_time4 = time.time() - start4
print("elapsed_time{0}".format(elapsed_time4) + "[sec]")
で終わります。