Python「WordCloud」でテキストマイニングしてみた!

Python
この記事は約5分で読めます。

みなさんこんにちは!

イザナギです。

最近コロナの影響でイベントや催し物が中止になってきてますよね。

ものすごく残念です。(泣)

なので、ブログでも書いて気持ちを落ち着かせましょう!

さて今回ですが、テキストマイニングに関することを書いていきたいと思います!

テキストマイニングについて、いろいろ検索してきたのですが、その中に「WordCloud」という面白そうなものを発見しました。

現在、私が研究で利用しようとしている技術です。

テキストマイニングとは?

そもそも、「テキストマイニング」についてご存じない方もいらっしゃるのではないでしょうか?

「テキストマイニング」とは、自然言語処理を使いテキストデータを分析することです。

文章データを持ってきて、そのデータの単語の出現頻度相関関係などを調べることができます。

実際にやってみる!

では、早速実際にやってみましょう!

今回、使用するツールをご紹介!

まずは、今回使用するツールをご紹介します!

  • Python 3.7.4
  • pip3
  • WordCloud
  • janome
  • IPAフォント

言語はタイトル通りPythonを使用します。

WordCloudについて

WordCloudとは、単語の使用頻度を可視化できるPythonのライブラリです。

なんとこのツール、画像として出力されるんです!

上の写真のように、出力されます。

大きい文字ほど、使用頻度が高くなってきます。

とても見やすい!

janome

実は、WordCloudを日本語にも適用させるには他にもツールを使う必要があります。

私は「janome」を使いましたが、「Mecab」というツールもあるそうです。

ちなみに、上記のツールは何をしているのかというと、単語をバラしています。

つまり、日本語の単語をわかりやすく作り替えているといったところでしょうか。

IPAフォント

どうやら、画像出力する際に、フォントを適用させないと出力できないみたいです。

なので、今回は「IPAフォント」ダウンロードします。

そして、ダウンロードしたファイルを同じフォルダに移動させます。

*今回は「IPAfont00303フォルダ」だけを移動して使いました。

実装!

では、実装していきましょう!

まずは、必要なライブラリ(ツール)をインストールします。

pip3 install janome
pip3 install wordcloud

次にコード部分です。

今回はcsvファイルからテキストを取り出しています。

import csv
import collections
from janome.tokenizer import Tokenizer
from wordcloud import WordCloud

list = []
with open('data/"csvファイルの名前".csv', 'r') as f:

    # カラムの値を抽出
    for row in csv.reader(f):
        list.append(row[1])

    # 先頭文字を削除
    del list[0]

    # 文字列をつなげる
    b = ""
    for a in reversed(list):
        b += a

    # 文字の整形(改行削除)
    text = "".join(b.splitlines())

    # 単語ごとに抽出
    docs=[]
    t = Tokenizer()
    tokens = t.tokenize(text)
    for token in tokens:
        if len(token.base_form) > 2:
            docs.append(token.surface)

    ## wordcloud の実行
    ## 日本語フォントを指定
    c_word = ' '.join(docs)
    wordcloud = WordCloud(background_color='white',
                        font_path='./IPAfont00303/ipag.ttf',
                        width=800, height=400).generate(c_word)

    ## 結果を画像に保存
    wordcloud.to_file('./wordcloud.png')

    # 単語を多い順に並べる
    c = collections.Counter(docs)
    print(c)

「collections」も使って、ターミナル 上に単語の出現回数の表示も行っています。

重要なのはこちらですね。

docs=[]
t = Tokenizer()
tokens = t.tokenize(text)
for token in tokens:
    if len(token.base_form) > 2:
        docs.append(token.surface)

こちらで、「janome」のメソッドを利用し、単語をバラしています。

今回は二文字以上に指定したため「if len(token.base_form) > 2:」としています。

c_word = ' '.join(docs)
wordcloud = WordCloud(background_color='white',
                    font_path='./IPAfont00303/ipag.ttf',
                    width=800, height=400).generate(c_word)
## 結果を画像に保存
wordcloud.to_file('./wordcloud.png')

こちらで「WordCloud」を使用しています。

そうするとさっき紹介した画像が出てくると思います。

まとめ

さて、今回は「WordCloud」を使用した、テキストマイニングについてご紹介してきました!

初めて使用した時は、「めっちゃわかりやすじゃん!」と感動したものですwww

これからは、これを利用しながら研究を進めていきたいと思います!

それでは、今回はここで筆を置かせていただきます!

最後まで記事をご覧いただきありがとうございました!

コメント

タイトルとURLをコピーしました