再挑戦してみたら上手くいきましたのでメモ的にエントリします。
環境
- Raspberry Pi2 ModelB
- node.js v6.8.1
- mecab 0.996
- mecab-ipadic-neologd 2.0
mecabのインストール
素直にapt-get
を使います。
$ sudo apt-get install mecab
$ sudo apt-get install libmecab-dev
$ sudo apt-get install mecab-ipadic
$ mecab
サミュエルLジャクソン
サミュエル 名詞,固有名詞,人名,名,*,*,サミュエル,サミュエル,サミュエル
L 名詞,固有名詞,組織,*,*,*,*
ジャクソン 名詞,固有名詞,人名,姓,*,*,ジャクソン,ジャクソン,ジャクソン
EOS
mecab-ipadic-neologdのインストール
Raspberry Piに直接インストールしてもエラーになってしまうので、諦めていました。(容量が原因と思いExpand Filesystem
をオンにしてもダメでした)
Macにはインストール出来ていたので、「あれ?これコピーすればいいんじゃ?」と思い試したら上手くいきました。
neologd/mecab-ipadic-neologd - GitHub
こちらよりMacにインストールすると以下のディレクトリに辞書が生成されます。
/usr/local/lib/mecab/dic/mecab-ipadic-neologd
これをzipファイルにして
sftp(私はFilezillaを使用)を利用してホームディレクトリにアップロード。
アップロード後解凍します。
$ unzip dic.zip
mecab辞書の定位置に移動します。
$ sudo mv -v /home/pi/dic /usr/lib/mecab
`/home/pi/dic' -> `/usr/lib/mecab/dic'
辞書を指定して実行します。(Macとは階層が異なるのでちょっと注意が必要です)
$ mecab -d /usr/lib/mecab/dic/mecab-ipadic-neologd
サミュエルLジャクソン
サミュエルLジャクソン 名詞,固有名詞,一般,*,*,*,サミュエル・L・ジャクソン,サミュエルエルジャクソン,サミュエルエルジャクソン
EOS
「サミュエル・L・ジャクソン」が固有名詞として認識されています。上手くいきました。
mecab-asyncでつかう
以下のライブラリを利用させていただきます。
hecomi/node-mecab-async - GitHub
こちらもそのままインストールするとエラーが出てしまうので以下のようにインストールします。
グローバル領域にインストールします。
$ sudo npm install mecab-async -g
任意のフォルダのモジュールに移動します。
$ sudo mv -v /usr/local/lib/node_modules/mecab-async /home/pi/mecab-async/node_modules
`/usr/local/lib/node_modules/mecab-async' -> `/home/pi/mecab-async/node_modules/mecab-async'
これでモジュールが使えるようになりました。試しにこんなファイルを用意しました。
var MeCab = new require('mecab-async')
var mecab = new MeCab();
MeCab.command = "mecab -d /usr/lib/mecab/dic/mecab-ipadic-neologd"
var text = process.argv[2]
//注:パースコマンドを利用する時 "MeCab.~"と大文字にしないと動かないみたいです
MeCab.parseFormat(text, function(err, morphs) {
if (err) throw err;
morphs.map(function(morph) {
if (morph.lexical === '感動詞') {
console.log(morph.lexical + ' : ' + morph.original);
}
if (morph.compound === '固有名詞') {
console.log(morph.compound + ' : ' +morph.original);
}
});
});
「感動詞」と「固有名詞」を抽出します。実行してみます。
$ node app.js こんにちは、サミュエルLジャクソンです。
感動詞 : こんにちは
固有名詞 : サミュエル・L・ジャクソン
やっとこさ上手くいきました。では。