Node.jsでmecab-ipadic-NEologdを使う

kuromoji.jsを使ってみたに引き続き、Node.jsでmecab-ipadic-NEologdを使ってみた際のメモです。

システムにmecabとmecab-ipadic-NEologdを導入し、mecabのラッパーであるmecab-async経由で形態素解析する例です。

mecab-ipadic-NEologdの導入

mecab-ipadic-NEologdを導入するために、まずはmecabとmecab-ipadicをシステムに導入します。

手順については、mecab-ipadic-NEologdのREADMEに詳しく書いてありますので、ここでは、OSXの場合の手順を抜粋しておきます。

# mecabとmecab-ipadicと関連ツールをbrewでインストール
$ brew install mecab mecab-ipadic git curl xz

# mecab-ipadic-NEologdをgithubからクローン
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git

# mecab-ipadic-NEologdのインストールor更新
$ cd mecab-ipadic-neologd
$ ./bin/install-mecab-ipadic-neologd -n
# 途中でインストール可否を yes/no で聞かれます

以上で導入が完了です。

コマンドラインから使ってみる

まずはmecabをコマンドラインから使ってみます。
コマンドに引数でNEologdのパスを渡すことで利用する辞書を変更できます。

# mecabの辞書のパスを確認
$ mecab-config --dicdir
/usr/local/Cellar/mecab/0.996/lib/mecab/dic

# さらにNEologdのディレクトリを確認
$ ls /usr/local/Cellar/mecab/0.996/lib/mecab/dic
ipadic               mecab-ipadic-neologd

# 辞書を指定してmecabを実行
$ mecab -d /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd
金曜日のスマたちへ
金曜日のスマたちへ   名詞,固有名詞,一般,*,*,*,金曜日のスマたちへ,キンヨウビノスマタチヘ,キンヨウビノスマタチヘ
EOS

ちなみに、デフォルトのipadicの場合は以下のようになります。

$ mecab
金曜日のスマたちへ
金曜日 名詞,副詞可能,*,*,*,*,金曜日,キンヨウビ,キンヨービ
の   助詞,連体化,*,*,*,*,の,ノ,ノ
スマ  名詞,固有名詞,一般,*,*,*,スマ,スマ,スマ
たち  名詞,接尾,一般,*,*,*,たち,タチ,タチ
へ   助詞,格助詞,一般,*,*,*,へ,ヘ,エ
EOS

mecab-ipadic-NEologdの場合は、
「金曜日のスマたちへ」が固有名詞として認識されているのに対して、
ipadicの場合は固有名詞と認識できずに形態素解析されています。

文章の「読み」の取得について

NEologdによって認識できる固有名詞が増えると文章の「読み」をより正確に取得できるようになります。例えば「幽遊白書」だと以下のようになります。

$ mecab
幽遊白書
幽   形容詞,自立,*,*,形容詞・アウオ段,ガル接続,幽い,カソケ,カソケ
遊白  名詞,一般,*,*,*,*,*
書   名詞,接尾,一般,*,*,*,書,ショ,ショ
EOS
# ipadicの場合は幽遊白書の読みがカソケショに

$ mecab -d /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd
幽遊白書
幽遊白書    名詞,固有名詞,一般,*,*,*,幽遊白書,ユウユウハクショ,ユウユウハクショ
EOS
# NEologdの場合は正しくユウユウハクショと読める

Node.jsから利用

次に、Node.jsから辞書を指定してmecabを使うためにmecab-asyncをnpmでカレントディレクトリに導入します。

$ npm install mecab-async

次に、同じディレクトリに以下のneologd-test.coffeeを作ります。

Mecab = require 'mecab-async'
mecab = new Mecab()

Mecab.command = "mecab -d /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd"

mecab.parse process.argv[2], (err, result) ->
  console.log result

  readings = []
  for token in result
    readings.push(token[8])
  console.log readings

hubotでの利用を見据えて、CoffeeScriptで実装してみました。
コマンド引数で形態素解析したい文字列を指定できます。
7行目で形態素解析の結果を、12行目で解析結果をもとに文字列の読みを出力します。

実行

前記のソースをCoffeeScriptで実行すればmecab-ipadic-NEologdによる形態素解析の結果を確認できます。

$ coffee neologd-test.coffee 幽遊白書
[ [ '幽遊白書',
    '名詞',
    '固有名詞',
    '一般',
    '*',
    '*',
    '*',
    '幽遊白書',
    'ユウユウハクショ',
    'ユウユウハクショ' ] ]
[ 'ユウユウハクショ' ]
スポンサーリンク
レクタングル(大)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
レクタングル(大)