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の場合の手順を抜粋しておきます。
1 2 3 4 5 6 7 8 9 10 11 |
# 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のパスを渡すことで利用する辞書を変更できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 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の場合は以下のようになります。
1 2 3 4 5 6 7 8 9 |
$ mecab 金曜日のスマたちへ 金曜日 名詞,副詞可能,*,*,*,*,金曜日,キンヨウビ,キンヨービ の 助詞,連体化,*,*,*,*,の,ノ,ノ スマ 名詞,固有名詞,一般,*,*,*,スマ,スマ,スマ たち 名詞,接尾,一般,*,*,*,たち,タチ,タチ へ 助詞,格助詞,一般,*,*,*,へ,ヘ,エ EOS |
mecab-ipadic-NEologdの場合は、
「金曜日のスマたちへ」が固有名詞として認識されているのに対して、
ipadicの場合は固有名詞と認識できずに形態素解析されています。
文章の「読み」の取得について
NEologdによって認識できる固有名詞が増えると文章の「読み」をより正確に取得できるようになります。例えば「幽遊白書」だと以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ 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でカレントディレクトリに導入します。
1 2 |
$ npm install mecab-async |
次に、同じディレクトリに以下のneologd-test.coffeeを作ります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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による形態素解析の結果を確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ coffee neologd-test.coffee 幽遊白書 [ [ '幽遊白書', '名詞', '固有名詞', '一般', '*', '*', '*', '幽遊白書', 'ユウユウハクショ', 'ユウユウハクショ' ] ] [ 'ユウユウハクショ' ] |