janome, mecabによる形態素解析

投稿者:

参照先

本記事で扱うpipをaptであらかじめインストール。

$ sudo apt install python3-pip

janomeのインストール

$ pip3 install janome

mecabのインストール

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

mecabのpython3での利用のために

$ pip3 install mecab-python3

mecabの追加辞書を導入しようとしたら、長時間かかったにもかかわらずエラーをはいて止まってしまった。

$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
$ sudo ./bin/install-mecab-ipadic-neologd -n



reading ./neologd-interjection-dict-seed.20170216.csv … 4701
reading ./neologd-proper-noun-ortho-variant-dict-seed.20161110.csv … 138379
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
/home/aki/dev/mecab-ipadic-neologd/bin/../libexec/make-mecab-ipadic-neologd.sh: 525 行: 725 中止 ${MECAB_LIBEXEC_DIR}/mecab-dict-index -f UTF8 -t UTF8

どうもメモリ不足が原因らしい。Raspberry pi 2Bの1GB メモリではどうしようもない。

参照: https://qiita.com/comocc/items/bfa5c4fe3c84d31e8ae7

しょうがなく、サンプルコードのうち追加辞書を使う部分をコメントアウトして動作確認。

#  demo_mecab.py

import MeCab
wakati = MeCab.Tagger('-Owakati') #分かち書き
# neo_wakati = MeCab.Tagger('-Owakati -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd') #追加辞書を適用

word = input("分かち書き:")

wakati = wakati.parse(word).strip()
# neo_wakati = neo_wakati.parse(word).strip()

print('通常辞書:' + wakati)
# print('追加辞書:' + neo_wakati)

動作確認結果は以下のとおり。

$ python3 demo_mecab.py
分かち書き:動作確認結果はこの通り。
通常辞書:動作 確認 結果 は この 通り 。

とりあえず動いた。

4月19日追記。

メモリ不足で動かなかった追加辞書 mecab-ipadic-neologd のインストールをpi 4で行った。

$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
$ sudo ./bin/install-mecab-ipadic-neologd -n



[install-mecab-ipadic-NEologd] : Install completed.
[install-mecab-ipadic-NEologd] : When you use MeCab, you can set '/usr/lib/arm-linux-gnueabihf/mecab/dic/mecab-ipadic-neologd' as a value of '-d' option of MeCab.
[install-mecab-ipadic-NEologd] : Usage of mecab-ipadic-NEologd is here.
Usage:
$ mecab -d /usr/lib/arm-linux-gnueabihf/mecab/dic/mecab-ipadic-neologd …
[install-mecab-ipadic-NEologd] : Finish..
[install-mecab-ipadic-NEologd] : Finish..

できた!

この辞書ファイルがあるディレクトリ ( /usr/lib/arm-linux-gnueabihf/mecab/ )を 2b のほうにコピーしてdemo_mecab.pyの辞書ファイル指定個所を修正、コメントアウトを戻して再度実行してみる。

# demo_mecab.py                                                                                                                                                                                                                                 

import MeCab

wakati = MeCab.Tagger('-Owakati') #分かち書き
neo_wakati = MeCab.Tagger('-Owakati -d /usr/lib/arm-linux-gnueabihf/mecab/dic/mecab-ipadic-neologd') #追加辞書を適用

word = input("分かち書き:")

wakati = wakati.parse(word).strip()
neo_wakati = neo_wakati.parse(word).strip()

print('通常辞書:' + wakati)
print('追加辞書:' + neo_wakati)

実行してみたが、追加辞書を使ってもほとんど結果が変わらない(追加辞書の”2B”は、もしかして鉛筆の芯の柔らかさじゃないだろうか)。私が適当に書く文章を解釈するには、そんなに語彙は必要ないようだ。

$ python3  demo_mecab.py
分かち書き: どうもメモリ不足が原因らしい。Raspberry pi 2Bの1GB メモリではどうしようもない。
通常辞書:どうも メモリ 不足 が 原因 らしい 。 Raspberry pi 2 B の 1 GB メモリ で は どう しよう も ない 。
追加辞書:どうも メモリ 不足 が 原因 らしい 。 Raspberry pi 2B の 1 GB メモリ で は どう しよう も ない 。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です