はじめに
意外と誰もやっていなさそうなので、イラク日報をテキスト分析してみます。今回は諸々の準備とワードクラウド作成までやってみました。
準備
データ
データは、atuyosiさんがOCRでJSONデータにしたものを使わせていただきました。JSONはdescriptionだけあればよいので、スクリプトに多少手を入れてテキスト化しました。
オリジナルのPDFは2upで、JSONはPDF1ページごとに1ファイルになっています。PDF1ページ目は表紙・目次となっているので、最初の1ページ分はスキップして全ファイルをマージしました。
(一部4upのファイルもありましたが、気にしない方針で…)
確認用に、オリジナルのPDFデータはだるやなぎさんのPowerShellスクリプトを使用してダウンロードしておきます。実行しようとしたら、セキュリティエラーが出たので、オプションをつけて実行しました。
powershell -NoProfile -ExecutionPolicy Unrestricted .\download.ps1
環境
PythonからMeCabを使うには、Yukino IkegamiさんのWindows で pip で mecab-python をいれるがよさそうだと見当をつけました。
まずは MeCab 64bit版をインストールし、それからpipでmecab-python-windowsをインストールしようとしましたが、Python3.6が必要なことがわかりました。以前入れたAnacondaの環境はPython3.5だったので、anacondaでpython3.6をインストール(Windows) を参考にして、3.6の環境を作成しました。
conda create -n py36 python=3.6
activate py36
これでpipでmecab-python-windowsをインストールできました。
反省点
- Windows環境でやらず、ちゃんとLinux環境を作るべきだった
- さらにMeCabをインストールする際に、うっかり空白を含むパス(Program Files以下)にインストールしてしまった
ワードクラウド作成
まつけんさんの Word Cloudで文章の単語出現頻度を可視化する。[Python] を参考に、amuellerさんの word_cloudライブラリ を使用してワードクラウドを作ることにしました。
word_cloudを使うためにはpyside2が必要なので合わせてインストールしておきます。
conda install -c conda-forge pyside2
conda install -c conda-forge wordcloud
今回のデータに合わせてまつけんさんのスクリプトにいくつか手を加えました。
- テキストはファイルから取得するのでbeautifulsoup4を使わず、直接ファイルを読み込むように変更
- 巨大なファイルを読み込もうとすると、MeCabの部分で黙って落ちてしまうようなので、行を分割してMeCabに渡して結果をマージするように変更
- 単語の出現回数が多い場合に表示がおかしくなったので、ワードクラウド作成のオプションにcollocations=Falseを追加 (GitHub Issue)
MeCabユーザ辞書の作成
形態素解析の結果を眺めてみたところ、辞書登録が必要そうなので、形態素解析・特徴語抽出エンジン『MeCab』に単語やユーザ辞書を追加する方法を参考にして辞書に登録しました。
米軍,-1,-1,100,名詞,一般,*,*,*,*,米軍,ベイグン,ベイグン
サマーワ,-1,-1,100,名詞,固有名詞,地域,一般,*,*,サマーワ,サマーワ,サマーワ
echo on
"C:\Program Files\MeCab\bin\mecab-dict-index.exe" -d "C:\Program Files\MeCab\dic\ipadic" -u user.dic -f shift-jis -t utf-8 iraq_dict.csv
pause
最後にPythonスクリプト内でMeCabを呼び出すときにユーザ辞書を参照するようにオプションを追加しました。
t = mc.Tagger('-Ochasen -u user.dic')
できあがり
キーワードとしては地味な活動に関するものが多そうに見えますね。