テキストマイニングの定番であるKH Coder に頻出語及び複合語の抽出、排除等のコントロールをさせて。そのリストから分かち書きのテキストを再作成してWordCloudを作成するまでの手順をBlogにまとめました。  

KHCoder を使った理由

日本語のWordCloud作成方法を丁寧に説明した Blog Qiita: WordCloudで岸田首相の所信表明演説のキーワードを可視化するがネットにあり、簡単にWordCloud が作成できます。 私も、Qiita記事を参考にほとんどそのままのコードでWordCloudが作成できました。このような懇切丁寧なBlogのおかげもあり、 作成自体は簡単ですが、WordCloudで可視化された大きな文字で印象に残るキーワードから何かしらのまとめメッセージや、 文書全体の示唆を導こうとすると、複合語の抽出と排除の問題にぶつかりました。

  1. MeCabで作成される「分かち書き」は、漢字二文字の単語の抽出がメインとなる。
  2. 専門用語等の複合語(例えば、「資本」と「主義」に分割せず、文脈から「資本主義」)を抽出し、その出現をカウントするには複合語を抽出する必要がある
  3. 文字操作で分かち書きされたテキスト内の「一字」、「ひらがなのみの語句」は除外できるが、「高齢者」と一括りにしないと、「高齢」と「者」と別れてしまい、「者」が抜け落ちる
  4. 複合語の拾い出しには、結局、複合語を登録した辞書の手助けが必要となり、辞書そのものをどこからか手当する必要がある。

WordCloudのための入力テキストにはKHCoder を使うこととした

MeCab単体と文字操作だけでは複合語の抽出、取捨選択が難しく、テキストマイニングのソフトウエアを利用して複合語を管理するのが現実的という結論に至りました。

KH Coderで作成した頻出語リストから分かち書きテキストを作成する

KH Coder を使って頻出語リストを作成すれば、以下のKH Coder の画面より抽出する頻出語の品詞によって取捨選択が容易にできます。この例では、「動詞」を排除しています。品詞名にBがつくのは,平仮名のみからなる語を集めた品詞のことです。今回、これらの語句もWordCloudに含めないため、チェックを外しています。

KHCoder_frequent_df

Python 前半部分

前半部分では列名‘col2’ に出現語句を出現回数分、半角スペースを空けて格納しています。 khc6_kishida_frequent.xlsxというExcelファイルにKH Coderから作成した頻出単語リストが Excel形式で格納されています。 また、入力テキストは第二百七回国会における岸田内閣総理大臣所信表明演説としています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#使用するモジュールをimport
import numpy as np
import pandas as pd
import wordcloud

#KHCoderで作成した頻出単語リスト(Excel形式)を読み込む
xlsx = pd.ExcelFile('khc6_kishida_frequent.xlsx')
df = pd.read_excel(xlsx, 'Sheet2', index_col=None, header=0)

#抽出語列からNaN を取り除く(念のため)
print(df.shape)
df = df[df['抽出語'].isnull() == False]
print(df.shape)

#col1 の語句を半角スペースを追加して数分繰り返し、col2 に格納する
df['col2']=(df['抽出語'] + ' ') * df['出現回数']

以下のようなデータフレームを作成しました。 KHCoder_frequent_df

図でお分かりのように、分かち書きを作成するため、各語句に半角スペースを足して、出現回数分掛け合わせています。 しかし、この方法だと各要素の最後に余分な半角スペースが入ってしまうので、最後の半角のみ削除する必要があります。 この処理は、後半のコードで対応しています。

Python 後半部分 WordCloud 作成

実際のWordCloud作成環境は、Qiita: WordCloudで岸田首相の所信表明演説のキーワードを可視化するを参考にDocker for Windows のコンテナ内に構築しました。

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
27
28
#col2 の中身を一旦、リスト化する
string = df['col2'].values
string = string.tolist()

len = len(df)
#各リストの最後についていた半角スペースを削除する python3.9より可能なメソッドを利用
for i in range(0, len):
    string[i] = string[i].removesuffix(' ')
#print(string)
#リストの内容をひとまとめの文字列(分かち書きテキスト)にし、これをWordCloudのインプットとする
string = ' '.join(string)
print(string)

#WordCloud のstop_words機能で以下の言葉はWordCloud で使わないようにする
stop_words =['ない', '行う','対応']

#テキストからwordcloudを生成
fpath = "/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf"
wordc = wordcloud.WordCloud(
    font_path=fpath,
    background_color='white',
    stopwords = set(stop_words),
    collocations = False,
    width=800, 
    height=600)

#画像ファイルとして保存
wordc.generate(string).to_file('wordcloud_kishida.png')

結果は以下のようになりました。 品詞としてタグとなっているのが、複合語になります。

WordCloud_KHCoder


参照ページ一覧

本ブログは、以下のネットの記事等を参考に作成しました。 

1) Qiita: WordCloudで岸田首相の所信表明演説のキーワードを可視化する
2) GitHub Docker環境
3) KH Coder
4) 第二百七回国会における岸田内閣総理大臣所信表明演説