LoginSignup
4
3

More than 5 years have passed since last update.

Raspberry Pi で mecab-ipadic-NEologd をNode.jsから使う

Last updated at Posted at 2016-10-30

再挑戦してみたら上手くいきましたのでメモ的にエントリします。

環境

  • 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ファイルにして

Monosnap 2016-10-30 20-08-51.png

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'

これでモジュールが使えるようになりました。試しにこんなファイルを用意しました。

app.js
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・ジャクソン

やっとこさ上手くいきました。では。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3