WordCloudでテキストマイニングする
テキストマイニングとは、ウェブページ、SNS、アンケートや問い合わせなど大量の文書(文字列)データを単語ごとに区切り、その単語の頻出度などを抽出することで、話題のトレンドなど有益情報を得るためのデータマイニング手法の一つです。
日本語文章のテキストマイニングには、自然言語解析でおなじみの形態素解析を使用します。形態素解析は、文章を構成している単語を、名詞、動詞や助詞など意味を有する最小の言語単位(形態素)に分解する手法です。
英語などの文書では、一般的に単語を空白で分解することができ、コンピュータでも容易に扱うことができます。しかしながら、日本語の文章は、単語が連結していて区切り位置が明確でないため、形態素解析で文章を最小単位の単語に分解する必要があるのです。
テキストマイニングでは、形態素解析で分類された品詞を抽出して、その単語の出現回数をグラフに図示にしたりします。テキストマイニングでは、単語の出現回数に応じて文字の大きさで表現するワードクラウドという図がよく利用されます。
このトライアルでは、PythonのWordCloudライブラリと形態素解析によく利用されているMeCab(読み方:「メカブ」)を使用して、テキストマイニングを実践していきます。
WordCloudでテキストマイニングする
このトライアルは、Windows10のJupyter Lab上でPython3.7.4を使って実践しています。WordCloudやMeCabなどのライブラリは、MacやWindowsによってインストール方法が異なりますので割愛します。
関連ライブラリなどのインストール方法は、様々なウェブや動画で紹介されていますので、そちらを参照してください。
文書を形態素解析する
はじめに、テキストファイルから文書を読み込んで変数に格納します。テキストファイルの内容(文章)は何でもよいので、あらかじめ作成して作業ディレクトリに保存しておきます。
with open('./sample.txt', 'rt', encoding = 'UTF-8') as f:
bunsyo = f.read()
print(bunsyo)
形態素解析ライブラリのMeCabををインポートして、読み込んだ文書を形態素解析していきます。
import MeCab
mecab = MeCab.Tagger()
result = mecab.parse(bunsyo)
print(result)
SDGs 名詞,一般,*,*,*,*,*
( 記号,括弧開,*,*,*,*,(,(,(
エス・ディー・ジーズ 名詞,固有名詞,一般,*,*,*,*
: 名詞,サ変接続,*,*,*,*,*
Sustainable 名詞,一般,*,*,*,*,*
Development 名詞,一般,*,*,*,*,*
Goals 名詞,一般,*,*,*,*,*
) 記号,括弧閉,*,*,*,*,),),)
と 助詞,格助詞,引用,*,*,*,と,ト,ト
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
MeCab.Tagger()に引数を設定することで、分かち書き(単語の区切りに空白を入れる書き方)で出力したり、ChaSen形式(奈良先端科学技術大学院大学で開発された形態素解析ツールの出力形式)で出力することができます。
#分かち書き
import MeCab
mecab = MeCab.Tagger('-Owakati')
result = mecab.parse(bunsyo)
print(result)
SDGs ( エス・ディー・ジーズ : Sustainable Development Goals ) と は 、 2015 年 に 開催 さ れ た ・・・<以下略>
#ChaSen形式
import MeCab
mecab = MeCab.Tagger('-Ochasen')
result = mecab.parse(bunsyo)
print(result)
SDGs SDGs SDGs 名詞-一般
( ( ( 記号-括弧開
エス・ディー・ジーズ エス・ディー・ジーズ エス・ディー・ジーズ 名詞-固有名詞-一般
: : : 名詞-サ変接続
Sustainable Sustainable Sustainable 名詞-一般
Development Development Development 名詞-一般
Goals Goals Goals 名詞-一般
) ) ) 記号-括弧閉
と ト と 助詞-格助詞-引用
は ハ は 助詞-係助詞
また、文書の読みを表示することもできます。
import MeCab
mecab = MeCab.Tagger('-Oyomi')
result = mecab.parse(bunsyo)
print(result)
SDGs SDGs SDGs 名詞-一般
( ( ( 記号-括弧開
SDGs(エス・ディー・ジーズ:Sustainable Development Goals)トハ、2015ネンニカイサイサレタ・・・<以下略>
このように、MeCabライブラリを使うと簡単に形態素解析を行うことができます。
名詞を抽出する
次に形態素解析して名詞のみを抽出していきます。
先ほどは、MeCabのparseメソッドを使用して形態素解析しましたが、ここでは、parseToNodeメソッドで形態素(単語)ごとに詳細情報を取得して、単語が名詞だった場合は、その単語をリスト変数に追加していきます。
featureからは「,(カンマ)」区切りの形態素に関する情報が取得できます。また、surfaceから単語を取得することができます。node.nextで次の形態素にアクセスできます。
mecab = MeCab.Tagger()
node = mecab.parseToNode(bunsyo)
nouns = []
while node:
feature = node.feature
part = feature.split(',')[0]
if part == '名詞':
nouns.append(node.surface)
node = node.next
print(nouns)
['SDGs', 'エス・ディー・ジーズ', ':', 'Sustainable', 'Development', 'Goals', '2015', '年', '開催',・・・<以下略>
WordCloudで図を作る
次に、形態素解析で抽出した名詞をワードクラウド図に描画していきます。WordCloudのライブラリは、デフォルトでは日本語フォントに対応していませんので、日本語フォントを指定する必要があります。
from wordcloud import WordCloud
import matplotlib.pyplot as plt
%matplotlib inline
font_path = 'C:/Windows/Fonts/msgothic.ttc'
WordCloudには分かち書き(単語の区切りに空白を入れる書き方)で入力する必要があるため、リスト変数に格納された名詞をjoinメソッドで半角スペースと結合して分かち書きに変換します。
words = ' '.join(nouns)
print(words)
SDGs エス・ディー・ジーズ : Sustainable Development Goals 2015 年 開催 国連 サミット ・・・<以下略>
WordCloudのインスタンスを作成して、作成した分かち書きを渡します。
wc = WordCloud(width=480, height=320, background_color = 'white',font_path = font_path)
wc.generate(wakati)
<wordcloud.wordcloud.WordCloud at 0x1abbf4d2248>
最後に、matplotlibのimshowメソッドでイメージ表示してみましょう。
plt.axis('off')
plt.imshow(wc)
どこかで見たことがあるような図が表示されたとおもいます。分かち書きの中に含まれる単語(ここでは名詞のみ)のうち、出現回数が多い単語は大きく、少ない単語は小さく表示されています。文字の大きさによって、話題の中心が一目でわかります。
まとめ
今回は、テキストマイニング、MeCabとWordCloudの2つのライブラリを利用した形態素解析とワードクラウド図作成のローコード実践方法について紹介しました。大変取り組みやすい内容だったとおもいます。
文章という非構造の定性的なデータの集合を分析可能な状態に変換すること、つまり文書をコンピュータで分析処理できるようにすることが形態素解析です。
形態素解析は、日本語の自然言語解析においても重要な役割を担っています。形態素解析自体は人工知能ではなく、形態素(単語)の辞書をもった文書解析ツールです。したがって辞書の内容を変更(追加)することにより、単語の分割をコントロールすることができます。
テキストマイニングは、インターネット上にあふれるビッグデータの中からトレンドやキーワード、世界で最も検索されているワードが何なのかを一目で把握することができるため、様々なビジネス分野で活用されています。株や為替などトレードの世界でも活用されており、ファンダメンタルズ分析に従って自動売買するアルゴリズムも多数存在しています。
企業でも顧客などから収集したアンケートを自社のマーケティングに活用していることがありますが、形態素解析やワードクラウドを活用して分析を自動化したり人工知能を加えたりすることによって、さらに進化したマーケティングが可能になることでしょう。
WordCloudによるテキストマイニングについて、ぜひ試してみてください。
SDGsと地方創生に関するお問い合わせについて
どんな内容でも構いませんので、気兼ねなくご相談ください。
システムエンジニアリングの経験を持つスタッフが、ボランティアでご相談に応じさせていただきます。