メモ > 技術 > プログラミング言語: Python > MeCab(形態素解析)
MeCab(形態素解析)
形態素解析とは、文章を意味を持つ最小単位(形態素)に分割し、各形態素に品詞情報などを付加する。
英単語は単語の区切りが明確だが、日本語の形態素解析は容易ではない。
代表的な形態素解析ライブラリとしてMeCabがある。
■MeCabをインストール
Raspberry Piでpythonからmecabを使う初期設定 - Qiita
https://qiita.com/fujit33/items/fd1d09f3332c626c9379
$ sudo apt-get install mecab libmecab-dev mecab-ipadic-utf8 python-mecab
$ sudo apt-get install swig
$ sudo pip3 install mecab-python3
$ python3
Python 3.8.7 (default, Feb 7 2021, 00:21:33)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import MeCab
>>> mecab = MeCab.Tagger()
>>> print(mecab.parse("すもももももももものうち"))
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
>>> exit()
■mecab-ipadic-NEologd を導入
MeCabは形態素解析を行うに当たり単語辞書を用いており、IPADICという単語辞書がよく用いられる。
mecab-ipadic-NEologd は、新しい語や固有表現を追加することで。
IPADICを拡張したMeCab用のシステム辞書。
GitHub - neologd/mecab-ipadic-neologd: Neologism dictionary based on the language resources on the Web for mecab-ipadic
https://github.com/neologd/mecab-ipadic-neologd
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ ./bin/install-mecab-ipadic-neologd -n -p /var/lib/mecab/dic/mecab-ipadic-neologd
Raspberry Pi 4 4B-32GB の環境ではインストールできた。
インストールに成功したら、以下のようにして辞書を指定できる。
$ python3
Python 3.8.7 (default, Feb 7 2021, 00:21:33)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import MeCab
>>> mecab = MeCab.Tagger("-d /var/lib/mecab/dic/mecab-ipadic-neologd")
>>> print(mecab.parse("メイが恋ダンスを踊っている。"))
メイ 名詞,固有名詞,人名,一般,*,*,M.A.Y,メイ,メイ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
恋ダンス 名詞,固有名詞,一般,*,*,*,恋ダンス,コイダンス,コイダンス
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
踊っ 動詞,自立,*,*,五段・ラ行,連用タ接続,踊る,オドッ,オドッ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
いる 動詞,非自立,*,*,一段,基本形,いる,イル,イル
。 記号,句点,*,*,*,*,。,。,。
EOS
>>> exit()
Raspberry Pi 3 Model b+ の環境では以下のエラーになった。
メモリ不足のためインストールできないみたい。
公式の解説によると4GBほどのメモリ空き容量が必要らしいが、今回の環境は1GB程度しかない。
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
/home/pi/mecab-ipadic-neologd/bin/../libexec/make-mecab-ipadic-neologd.sh: 525 行: 23592 中止 ${MECAB_LIBEXEC_DIR}/mecab-dict-index -f UTF8 -t UTF8
mecab-ipadic-neologd/README.ja.md at master - neologd/mecab-ipadic-neologd - GitHub
https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md
Vagrant上のVMへのmecab-ipadic-neologdのインストールが失敗する時 - Qiita
https://qiita.com/comocc/items/bfa5c4fe3c84d31e8ae7
以下のようにすると、300MBほどサイズを削減できるとのこと。
今回の環境ではこれでもインストールできなかった。
$ ./bin/install-mecab-ipadic-neologd -n -y --ignore_adverb --ignore_interject --ignore_noun_ortho --ignore_noun_sahen_conn_ortho --ignore_adjective_std --ignore_adjective_verb --ignore_ill_formed_words -p /var/lib/mecab/dic/mecab-ipadic-neologd
以下のようにすると512MBほどのメモリ空き容量があればインストールできるとのこと。
ただしオススメしないとされている。
今回の環境ではこれでもインストールできなかった。
$ ./bin/install-mecab-ipadic-neologd -n -y --eliminate-redundant-entry -p /var/lib/mecab/dic/mecab-ipadic-neologd
今回はメモリ不足のため mecab-ipadic-NEologd を使えないようなので、標準の辞書を使う。