MeCabをインストールしPythonから呼び出す
Google HomeやAmazon Echoなど、AIアシスタントが流行している。
これらは人間の声に対応し処理を行うものであるが、その処理は、
「声を受け取る→文にする→文の内容を解釈する→それに対応した出力をする」
、といったプロセスをとると考えられる。
さて、ここにおける「文の内容を解釈する」はどのようなことを指すだろうか。
おそらくではあるが、AIアシスタントにおける処理パターンは有限で、入力に近いパターンを判断しているのだろう。
こうした「判断」ひいては「解釈」にあたっては、大雑把に言えば単語それぞれにベクトルを与えるのが主流である。
しかし、日本語の処理においてこれらの手法にはやや壁がある。それは、文から単語を取り出すことにある。
というのも、日本語では欧米言語と異なり、単語と単語が空白で区切られていない。
つまり、日本語の処理においてはまず単語と単語を区切ることから始まるのである。
それらは、「形態素解析」によって実現することができる。
代表的なツールとしてMeCabやJanomeがあるが、ここではMeCabを使う。
MeCabは高速かつ的確で人気である(と思う。)が、使用するまでにやや難があるため記事としたい。
なお、このページなどを参考にしている。
まずはMeCabをインストールする。
環境は以下の通りである。
いろいろと設定するのが面倒なので、MeCabのインストールはapt-getで行う。
apt-getはパッケージ管理システムであり、apt-getでインストールすると環境設定が楽にできる。
$ sudo apt-get install mecab mecab-ipadic mecab-ipadic-utf8 libmecab-dev
これで、MeCabのインストール自体は完了である。
実際にターミナル上で動かしてみる。
$ mecab 青木宣親選手が日本球界に復帰することになった 青木 名詞,固有名詞,人名,姓,*,*,青木,アオキ,アオキ 宣 名詞,サ変接続,*,*,*,*,宣,セン,セン 親 名詞,一般,*,*,*,*,親,オヤ,オヤ 選手 名詞,一般,*,*,*,*,選手,センシュ,センシュ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 日本 名詞,固有名詞,地域,国,*,*,日本,ニッポン,ニッポン 球界 名詞,一般,*,*,*,*,球界,キュウカイ,キューカイ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 復帰 名詞,サ変接続,*,*,*,*,復帰,フッキ,フッキ する 動詞,自立,*,*,サ変・スル,基本形,する,スル,スル こと 名詞,非自立,一般,*,*,*,こと,コト,コト に 助詞,格助詞,一般,*,*,*,に,ニ,ニ なっ 動詞,自立,*,*,五段・ラ行,連用タ接続,なる,ナッ,ナッ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ EOS
このように単語ごとに分割してくれるが、デフォルトの辞書では固有名詞の扱いに弱い。
(ちなみに青木宣親選手は筆者の一番好きな野球選手である。)
そこで、固有名詞にも対応した辞書を追加でインストールする。
使うのはmecab-ipadic-NEologdという辞書である。
好意で定期的に更新されている辞書である。頭が下がる。
gitを経由してインストールするのが一番筋が良い。
$ sudo apt-get git $ git clone https://github.com/neologd/mecab-ipadic-neologd.git $ cd mecab-ipadic-neologd $ ./bin/install-mecab-ipadic-neologd -n -a
辞書のデータは結構膨大で、2~3分はかかると思っていい。
完了したら、階層を移動しインストールファイルを実行する。
なお、デフォルトでは辞書のインストール先は/usr/lib/mecab/dic/mecab-ipadic-neologd
となっている。
変更したい場合は/usr/mecab/mecab-config
の--dicdir
を編集すればよい。
新しくインストールした辞書は、-dオプションで指定すると利用できる。
$ mecab -d /usr/lib/mecab/dic/mecab-ipadic-neologd/ 青木宣親選手が日本球界に復帰することになった 青木宣親 名詞,固有名詞,一般,*,*,*,青木宣親,アオキノリチカ,アオキノリチカ 選手 名詞,一般,*,*,*,*,選手,センシュ,センシュ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 日本球界 名詞,固有名詞,一般,*,*,*,日本球界,ニッポンキュウカイ,ニッポンキ ューカイ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 復帰 名詞,サ変接続,*,*,*,*,復帰,フッキ,フッキ する 動詞,自立,*,*,サ変・スル,基本形,する,スル,スル こと 名詞,非自立,一般,*,*,*,こと,コト,コト に 助詞,格助詞,一般,*,*,*,に,ニ,ニ なっ 動詞,自立,*,*,五段・ラ行,連用タ接続,なる,ナッ,ナッ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
このように、「青木宣親」が一つの固有名詞と判断されている。
しかしながら、いちいち辞書を指定するのも面倒なので、これをデフォルトの辞書に設定してしまおう。
mecabrc
ファイルを編集するが、通常は編集できないのでパーミッションを変更しよう。
$ sudo chmod 777 /etc/mecabrc $ vi /etc/mecabrc dicdir = /usr/lib/mecab/dic/mecab-ipadic-neologd $ sudo chmod 644 /etc/mecabrc
これでデフォルトでインストールした辞書を使用できる。
$ mecab 青木宣親選手が日本球界に復帰 青木宣親 名詞,固有名詞,一般,*,*,*,青木宣親,アオキノリチカ,アオキノリチカ 選手 名詞,一般,*,*,*,*,選手,センシュ,センシュ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 日本球界 名詞,固有名詞,一般,*,*,*,日本球界,ニッポンキュウカイ,ニッポンキ ューカイ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 復帰 名詞,サ変接続,*,*,*,*,復帰,フッキ,フッキ する 動詞,自立,*,*,サ変・スル,基本形,する,スル,スル こと 名詞,非自立,一般,*,*,*,こと,コト,コト に 助詞,格助詞,一般,*,*,*,に,ニ,ニ なっ 動詞,自立,*,*,五段・ラ行,連用タ接続,なる,ナッ,ナッ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ EOS
さて、MeCabがコマンドライン上で利用できるようになったが、実際に利用するのはプログラム上であるのがほとんどであろう。
ここでは、PythonからMeCabを呼び出せるよう設定する。
といっても、mecab-python3パッケージをインストールするだけでよい。
$ pip install mecab-python3
import MeCab mecab = MeCab.Tagger("-O wakati") print(mecab.parse("青木宣親選手が日本球界に復帰することになった。"))
なお、MeCab.Tagger
の引数はオプションである。
-Oは出力の形式を変更するオプションで、wakatiは分かち書き(単語と単語の間に空白を入れる)をする形式である。
$ python mecab_test.py 青木宣親 選手 が 日本球界 に 復帰 する こと に なっ た 。