pythonで感情分析に入門

こんにちは、クロガネです。

皆さん、ネットを徘徊していて書いてある文章にどんな感情が込められているのか?ということが気になったことはないでしょうか?

まあ、文学に精通している人であれば言葉の表現のみで大体わかるんでしょうけど、僕の場合は特に文学的な部分は触れずに育ってしまったので言葉に堪能ではありません。

とはいえ、感情を読み取ることは人間生活において重要であることは変わりありません。

ということで、辞書を活用して単語の意味から自動で込められた上辺の感情を読み取ろう、というのを、今回Pythonで進めていきます。勿論、人工知能ではありません。

Pythonのインストールまでは割愛です。こちら(http://oita.oika.me/2018/05/03/python3-mecab-on-windows/)を参考にして必要なものをどんどんインストールしておきましょう。

概要

ML-Askというものを利用して、感情表現辞典を元に文字列の含まれる感情表現を抽出、評価します。

ML-AskにはMeCabが必要だそうなので、

MeCabのインストール ② 辞書をNEologd辞書に変更 ③ ML-Askのインストール

の手順で進みます。

また、ここではWindows10 64bit環境で進めていきます。

MeCabのインストール

Pythonは64bitなのでここからダウンロードして、64bit版をインストール。これはページにも書いてありますが公式ビルドのものではありません。ただ、出来るだけ簡単に導入したいのでこれを使います。

問題点は辞書がUTF-8なのでコマンドプロンプトなどから利用する場合に文字化けしまくります。ほかの用途で使うなら向かないかも???

注)32bit版のPythonを使用しているなら公式からダウンロードして利用出来ます。

実行して、そのままインストールしていきます。特にバンドルウェアなどはなさそう(多分)。

インストールできたら、 C:\Program Files\MeCab\bin にPATHを通す。

上手くいかない場合は、C:\Program Files\MeCab\binにある実行ファイルを直接指定しても実行自体は可能。

あと、再起動をかければどうにかなる。

最低限の動作チェック

環境変数の登録が上手くいかなくても、直接実行ファイルを叩いてあげれば動いているかどうかはチェックできる。 文字コード的な問題で文字化けするのでその辺はいったん気にしないでおこう。

Python のMeCabラッパーをインストールする。

ここからが本命。mecab-python-windowsというPythonのラッパーをインストールする。これでPythonからMeCabを操作できるようになる。

インストールはpipから実行すればよい。仮想環境の切り替えなどは適宜行えばよいので割愛。

  pip install mecab-python-windows

すんなり入った。

そのままipythonで動作チェックしてみる。

  import MeCab
m = MeCab.Tagger("-Ochasen")
print(m.parse("すもももももももものうち"))

問題無く動作することを確認。例文も参考元からそのままだね。

NEologd 辞書を導入

標準の辞書の制度がそこまでよくないらしい。そのため、精度をよくするために別の辞書であるNEologd辞書を導入しておく。

この部分は実はいらない、ここから少し面倒になるので割愛してよい。

NEologd辞書のビルドがLinux環境でしかできないらしい。ここで、Linux機を導入するのも面倒なので、Linux環境がない人はWindows Subsystem for Linux(WSL)を使用する必要がある。なので、まずはWSLのUbuntuをインストールしていきます。

参考: https://qiita.com/ChenZheChina/items/42f1fcc763e88cb02cca

まずはWSLの使用許可

これは管理者権限ありのPowerShellで以下のコマンドを実行すればよい。

  Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

ちなみに、アイコンを右クリックすれば「管理者権限で実行」が出てくる。

以下のような画面が出てくるので少し待つ。

すると再起動を求められるので、ここで再起動。

WSL用のUbuntuをインストール

導入自体は簡単。Microsoft Storeでインストールする。「Ubuntu」って検索すれば出てくる。

容量もそんなに食いません。容量が足りない場合は適当に要らないものを消すか、…というかそんなに容量が足りない状態でPC使うなよ(笑)って感じですな。ストレージの交換かディスクのクリーンアップでもしておきましょう。

インストールが終わればポップアップが出てきます。

インストールが終われば起動します。普通にスタートメニューに登録されます。

初回起動時はUbuntuのシステムのインストールから始まるようです。少し待ちましょう。

まずはユーザーネームとパスワードを設定します。これが終わればubuntuを利用できるようになります。これらのユーザーネームとパスワードは任意のものでよいです。

WSLのUbuntuでのインストールの下準備

実は、ビルドの準備はまだ終わらないんだ。とはいえ、以下の手順でやっていけば恐らく正常にインストールできるはず。時間がちょっとかかるけどね。以下はWSLのUbuntuのターミナル内での作業。

まずはaptのアップデートとupgradeをかませておく。

  sudo apt update
sudo apt upgrade

この辺りでいきなりエラーが出まくるので、恐らく、リポジトリを日本サーバーに変更することで解決される?? 以下を実行することで僕の環境では解決した。その後、aptのアップデートなどを再度試してエラーが出ないことを確認。https://qiita.com/Aruneko/items/c79810b0b015bebf30bb

  sudo sed -i -e 's%http://.*.ubuntu.com%http://ftp.jaist.ac.jp/pub/Linux%g' /etc/apt/sources.list

後のNEologdのビルドでエラーが出るのを避けるため、build-essentialを再インストールしておく。ビルド時にmake is not found.というエラーが出た場合、「build-essential」の再インストールが必要だそうだ。というか何もせず進めたら出た。http://zaka-think.com/linux/ubuntu/ubuntu-make-error/

  sudo apt install --reinstall build-essential

ただ、上の日本サーバーに切り替えをしておかないとここで躓くのでやっておこう。

gitをインストールする必要があるので、以下でインストール。

  sudo apt-get install git

gitと入力すると、各種コマンドについての説明が出てるので恐らく問題ない?

  git

また、gitの初期設定も行う…ってのはいらなかった。逆に、GitHubにいってアカウントを作っておこう。これはググってwebサイトに行ってね。

  git config global user.name [任意のユーザ名]
git config global user.email [任意のユーザ名]

NEologd辞書のビルドとmecab関連のインストール

gitがインストールできたので、mecab関連をインストールしていきます。この手順が不要かどうかは試していない…。まあ、入れておきましょう。

  sudo apt install mecab
sudo apt install libmecab-dev
sudo apt install mecab-ipadic-utf8

次に、gitを用いてNEologd辞書をインストールしていきます。この時にgithubのユーザーネームとパスワードが必要になります。入力して問題がなければ、インストールされる容量が結構あるのでじっくりと待ちましょう。約350MBです。

回線速度というか、よくわからない何かがボトルネックになっているかと。1Mbpsは出ていなかった…。

  git clone https://github.com/neologd/mecab-ipadic-neologd.git

ダウンロードが済んだら、移動してビルドしましょう。上記手順をすべてこなしていれば恐らく正常にインストールできるはず。僕は上記手順のみでできた。

  cd mecab-ipadic-neologd
sudo bin/install-mecab-ipadic-neologd

NEologd辞書をWindows側の移す

ビルドされた辞書をWindows側に移していきます。

Ubuntu側のNEologd辞書は/usr/lib/mecab/dic/mecab-ipadic-neologd/にある…?\usr\lib\x86_64-linux-gnu\mecab\dicじゃね? 僕の環境では後者の場所にありました。

これをWindows側のC:\Program Files\MeCab\dic\ipadic-neologd\にコピーすればよい。こんな感じ?まあ、多分フォルダ名まで変更する必要はなかったかと。

注) コピーについて

多分、WSLのUbuntu側から操作してコピーできるかもしれないけど、面倒なので直接取りに行く。

Ubuntuのフォルダは、%LOCALAPPDATA%\Packages\内にある。Windows側のエクスプローラーに直接入れて叩けば飛んでくれる。

その中から、CanonicalGroupLimited.UbuntuonWindows_[謎の文字列]というフォルダを見つけて、「LocalState」→「tootfs」と順に移動していけばUbuntu内のファイルにアクセスできる。

「mecab-ipadic-neologd」フォルダの場所の例は以下。[ユーザー名]と[謎の文字列]はたぶん人によって違う。

C:\Users\[ユーザー名]\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_[謎の文字列]\LocalState\rootfs\usr\lib\x86_64-linux-gnu\mecab\dic\mecab-ipadic-neologd\

参考: https://qiita.com/keita44_f4/items/4fffda7048b2c3554f14

mecabが指定している辞書の位置を変更する

最後に、C:\Program Files\MeCab\etc\mecabrc (拡張子無しのファイルだよ)をテキストエディタで開いて、6行目のdicdir = $(rcpath)\..\dic\ipadic

  dicdir =  $(rcpath)\..\dic\ipadic-neologd

に書き換えます。

注意事項として、テキストエディタ側に管理者権限がないとこのファイルは書き換えができないので要注意。

動作チェック

再度、以下で確かめてみる。

  import MeCab
m = MeCab.Tagger("-Ochasen")
print(m.parse("すもももももももものうち"))

????

微妙?もっと長い文章で試しておいた方がいいかもね。

WSLでのコピペ

注意、WSLの画面にコマンドをコピペするにはCtrl+Vでは(多分)できません。ただ、左上のアイコンをクリックするとメニューが出てくるので、ここから貼り付けます。

ML-Askを導入

これでようやく感情分析に入ることが出来ます。以下を参考にしてML-Askを導入していきましょう。

参考: https://qiita.com/yukinoi/items/ef6fb48b5e3694e9659c?utm_source=stock_summary_mail&utm_medium=email&utm_term=kwtsh365&utm_content=ML-Ask%E3%81%A7%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%E6%84%9F%E6%83%85%E5%88%86%E6%9E%90&utm_campaign=stock_summary_mail_2018-12-29

インストール

以下からインストール

  pip install pymlask

問題無くインストールできた。

動作確認

  from mlask import MLAsk
emotion_analyzer = MLAsk()
emotion_analyzer.analyze('彼のことは嫌いではない!(;´Д`)')

最低限動いてくれているようだ。ぱちぱち。おめでとう。

今回出来るようになったことのまとめ

出来るようになったのは形態素解析と感情分析

  import MeCab
from mlask import MLAsk

string="近年では、親愛の情を込めて友人、知人や親族にも贈るお歳暮へと少しずつ変化してきているようです。"

m = MeCab.Tagger("-Ochasen")
print(m.parse(string)

emotion_analyzer = MLAsk()
emotion_analyzer.analyze(string)

結果はこんな感じ。

最後に

これで、形態素解析+感情分析が一応出来るようになりました。ここから、ML-Askの使い方を学んでいけば、最低限の感情分析を出来るようになるかと。

適当にモジュールを使って、何かしらのパラメーターを取り出して言えたらいいなー、って感じだね。

まあ、人工知能的なものではないので、辞書をカスタムしないと精度はよくならないので、この辺はGoogleとかIBMとかMicrosoftとかの感情分析の方がちゃんとパラメーターを取り出せるんだろうけどね。

こっちの方がお金はかからないのでいいね。

それでは、クロガネでした。