本スクリプトは、Insight Tech公開のリポジトリから入手可能です。
※ 長く気がついていませんでしたが、辞書生成途中でエラーが起きていて、多くのエントリが変換されないままになっていました。最新の版では修正済みです。
この記事で紹介すること
- neologd辞書の有効性
- neologd辞書をJUMAN/JUMAN++で利用できるようにするためのスクリプト紹介
neologd辞書とは?
正式にはmecab-ipadic-neologdという名称で、mecabの追加辞書として設計されています。
形態素解析器をweb上のテキストに適用するには、標準の辞書では対応できないケースが多々ありました。特にドラマの名前、スラング的な語(オマエモナー
など)などが顕著です。
例えば、昨年の年末に話題になった逃げるは恥だが役に立つは標準のipadic
では1語と認識できません。
標準ipadic
% echo "逃げ恥は毎週みている" | mecab
逃げ 名詞,一般,*,*,*,*,逃げ,ニゲ,ニゲ
恥 名詞,一般,*,*,*,*,恥,ハジ,ハジ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
毎週 名詞,副詞可能,*,*,*,*,毎週,マイシュウ,マイシュー
み 動詞,自立,*,*,一段,連用形,みる,ミ,ミ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
いる 動詞,非自立,*,*,一段,基本形,いる,イル,イル
EOS
neologd
% echo "逃げ恥は毎週みている" | mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd
逃げ恥 名詞,固有名詞,一般,*,*,*,逃げ恥,ニゲハジ,ニゲハジ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
毎週 名詞,副詞可能,*,*,*,*,毎週,マイシュウ,マイシュー
み 動詞,自立,*,*,一段,連用形,みる,ミ,ミ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
いる 動詞,非自立,*,*,一段,基本形,いる,イル,イル
EOS
neologdはこのように、次々と世の中に出現する新語に次々と対応していこう!という非常に精力的なプロジェクトです。
neologdのプロジェクトページによると、週に2回の更新が実施されているとのことです。(2017/2/24現在)
Juman/Juman++とは?
Juman/Juman++は京都大学の黒橋・河原研究室で開発されている形態素解析器です。
Jumanはmecabよりも単語の意味分類を細かく実施してくれる点で、大きく異なります。
% echo "逃げ恥は毎週みている" | juman
逃げ にげ 逃げる 動詞 2 * 0 母音動詞 1 基本連用形 8 "代表表記:逃げる/にげる 自他動詞:他:逃がす/にがす"
恥 はじ 恥 名詞 6 普通名詞 1 * 0 * 0 "代表表記:恥/はじ 漢字読み:訓 カテゴリ:抽象物"
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
毎週 まいしゅう 毎週 名詞 6 時相名詞 10 * 0 * 0 "代表表記:毎週/まいしゅう カテゴリ:時間"
みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:見る/みる 補文ト 自他動詞:自:見える/みえる"
@ みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:診る/みる 補文ト ドメイン:健康・医学"
いる いる いる 接尾辞 14 動詞性接尾辞 7 母音動詞 1 基本形 2 "代表表記:いる/いる"
EOS
毎週
の行にカテゴリ:時間
という表示があるのが見れます。
このように、単語の意味分類を実施しているため、カテゴリを利用した集計も可能です。
一方、Juman++はJumanの後継として2016年に登場した形態素解析器です。
形態素解析時にRNNを利用しており、「単語の意味的な類似度」を考慮しながら、単語区切りが可能です。
また、Juman++はJumanと同じフォーマットなので、Jumanで可能だったことをそのまま置き換えることができます。
特にKNPとの組み合わせでは、大きな威力を発揮します。
Juman/KNP
という組み合わせを Juman++/KNP
という組み合わせに置き換えることができます。
neolod2juman
さて、本記事のメイントピックです。
Juman/Juman++ユーザーとしては、毎週のように更新されるneologd言語資源は喉から手が出るほど欲しいものです。
そこで、それを実現してくれるスクリプトを作りました。それがneologd2jumanです。
neologdのエントリをJuman辞書形式に変換してくれます。
ただし、neologdのすべてのエントリを変換するわけではなく、 名詞/固有名詞
のみです。
neologdとJuman辞書の品詞体系は別の体系を利用しており、1対1の変換関係を構築するのは困難です。固有名詞のみは共通しているだろう。と考え、このようなアプローチにしています。
また、辞書の見出し語が40文字以上の場合はjuman用の辞書に追加されません。
辞書生成コマンドがエラーを出してしまうからです・・
スクリプトの実行とインストール
Ubuntu14.04とMac El Capitanで動作確認をしています。
必要なもの
- Juman
- Juman++ (Juman++用に辞書を使いたい場合のみ)
- makeコマンド
- python3
手順
手順を紹介します。
Juman用に辞書を用意するには、以下の手順でOKです。
git clone git@github.com:fumankaitori/neologd2juman.git
make
コマンドが無事に全実行されると、
New juman dictionary is at /usr/local/share/juman/juman-neologd-dic
New jumanrc file is at /usr/local/share/juman/jumanrc
という表示があります。
juman
コマンドを呼ぶときに、 -r [jumanrcのパス]
をつけると、neologd辞書が適応されます。
echo "逃げ恥は毎週みている" | juman -r /usr/local/share/juman/jumanrc
逃げ恥 にげはじ 逃げ恥 名詞 6 固有名詞 3 * 0 * 0 "代表表記:逃げ恥/にげはじ"
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
毎週 まいしゅう 毎週 名詞 6 時相名詞 10 * 0 * 0 "代表表記:毎週/まいしゅう カテゴリ:時間"
みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:見る/みる 補文ト 自他動詞:自:見える/みえる"
@ みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:診る/みる 補文ト ドメイン:健康・医学"
いる いる いる 接尾辞 14 動詞性接尾辞 7 母音動詞 1 基本形 2 "代表表記:いる/いる"
EOS
いいですね!一語で獲得することができました。
形態素解析器では、品詞間の連続コストを考慮しているので、「辞書に存在する=必ず獲得できる」わけではないようです。
参考までにgithubのリポジトリでは、うまく獲得できた例を掲載しています。
Juman++で使う
手作業が必要になります。
Juman++をダウンロードすると、 dict-build
というディレクトリがあります。
このディレクトリ下のディレクトリ userdic
に neologd-user-dict.dic
を配置します。
(neologd-user-dict.dic
はneologd2jumanのmake過程で生成されます)
その後に、dict-build
で make
と install.sh
を実行します。
% cd dict-build
% cp [PATH-TO-YOUR neologd-user-dict.dic FILE] userdic/neologd-user-dict.dic
% make
% [sudo] ./install.sh
Jumanの時と違い、特別なコマンドは不要です。
% echo "逃げ恥は毎週みている" | jumanpp
逃げ恥 にげはじ 逃げ恥 名詞 6 固有名詞 3 * 0 * 0 "代表表記:逃げ恥/にげはじ"
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
毎週 まいしゅう 毎週 名詞 6 時相名詞 10 * 0 * 0 "代表表記:毎週/まいしゅう カテゴリ:時間"
みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:診る/みる 補文ト ドメイン:健康・医学"
@ みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:見る/みる 補文ト 自他動詞:自:見える/みえる"
いる いる いる 接尾辞 14 動詞性接尾辞 7 母音動詞 1 基本形 2 "代表表記:いる/いる"
EOS
逃げ恥
はneologd辞書追加前は1語ではなかったので、今度は成功しました。
参考までに、neologd辞書適応前は下のようになります。
逃げ にげ 逃げ 名詞 6 普通名詞 1 * 0 * 0 "代表表記:逃げ/にげv 自他動詞:他:逃がす/にがす 連用形名詞化:形態素解析"
恥 はじ 恥 名詞 6 普通名詞 1 * 0 * 0 "代表表記:恥/はじ 漢字読み:訓 カテゴリ:抽象物 漢字"
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
毎週 まいしゅう 毎週 名詞 6 時相名詞 10 * 0 * 0 "代表表記:毎週/まいしゅう カテゴリ:時間 漢字"
みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:診る/みる 補文ト ドメイン:健康・医学"
@ みて みて みる 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:見る/みる 補文ト 自他動詞:自:見える/みえる"
いる いる いる 接尾辞 14 動詞性接尾辞 7 母音動詞 1 基本形 2 "代表表記:いる/いる"
EOS
まとめ
- neologd辞書をjuman/juman++利用できるようにした
- 新語にうまく対応できている様子
- ぜひご利用ください〜
最後に、このスクリプトはInsight Techから公開されています。Insight Techでは、不満買取センターユーザーの声を元にした調査事業をしています。
マーケティング調査のご用命をお待ちしております。