こんにちは。GMOアドマーケティングのS.Rです。
前回は形態素解析のツール「MeCab」へユーザー辞書を追加する方法を紹介しました。
MeCabを使うことで日本語の形態素解析を簡単に行うことができます。
ただ、NLPの開発には形態素解析だけではなく、構文解析も非常に重要です。
MeCabには形態素解析の機能はありますが、構文解析の機能はありません。
そこで、今回は日本語の構文解析ツールセットJUMAN++/KNPを紹介します。
1. 構文解析とは
構文解析については以下のWikipediaの解説をご覧ください。
構文解析(こうぶんかいせき、syntactic analysis あるいは parse)とは、文章、具体的にはマークアップなどの注記の入っていないベタの文字列を、自然言語であれば形態素に切分け、さらにその間の関連(修飾-被修飾など)といったような、統語論的(構文論的)な関係を図式化するなどして明確にする(解析する)手続きである。自然言語については自然言語処理における要点のひとつであり、プログラミング言語など形式言語の場合は、形式文法に従い構文木を得る。構文解析を行う機構を構文解析器(parser)と呼ぶ。
引用元 | 構文解析、2019年09月24日、ウィキペディア日本語版、https://ja.wikipedia.org/wiki/構文解析
2. JUMANとは
JUMANは京都大学黒橋・河原研究室で開発されている日本語の形態素解析のツールの一つで、RNN(再帰型ニューラルネットワーク)モデルを採用しています。
MeCabよりも精度は高いですが、計算速度は劣ります。
3. KNPとは
構文解析については京都大学黒橋・河原研究室の公式サイトで下記のように紹介されています。
KNPは同じく京都大学黒橋・河原研究室で開発されている日本語の構文解析を行うシステムです。
形態素解析システムJUMANの解析結果(形態素列)を入力とし、文節および基本句間の係り受け関係,格関係,照応関係を出力することができます。引用元 | KNP – KUROHASHI-KAWAHARA LAB、2019年09月24日、 http://nlp.ist.i.kyoto-u.ac.jp/index.php?KNP
4. JUMAN/KNPの利用方法
4.1 JUMANをインストールする
それでは早速 JUMAN/KNPの使い方を説明させていただきます。
4.1.1 ColabのInstanceを作る
Colabの公式サイトからColabのPython3のInstanceを作ります。

4.1.2. JUMANをインストールする
1 2 3 4 5 |
!wget http://nlp.ist.i.kyoto-u.ac.jp/nl-resource/juman/juman-7.01.tar.bz2 !tar jxvf juman-7.01.tar.bz2 !cd juman-7.01 && ./configure --prefix=/home/sasano/usr && make && sudo make install !sudo echo "include /usr/local/lib" >> /etc/ld.so.conf !sudo ldconfig |
4.2 KNPをインストールする
1 2 3 4 |
!wget http://nlp.ist.i.kyoto-u.ac.jp/DLcounter/lime.cgi?down=http://nlp.ist.i.kyoto-u.ac.jp/nl-resource/knp/knp-4.19.tar.bz2&name=knp-4.19.tar.bz2 !tar jxvf knp-4.19.tar.bz2 !cd knp-4.19 && ./configure --prefix=/home/sasano/usr --with-juman-prefix=/home/sasano/usr && make && make install !pip install pyknp |
4.3 形態素解析+構文解析を試す

正しく分析するために、辞書へ“天気の子”を追加する必要があります。
4.4 ユーザー辞書の追加
4.4.1. ユーザー辞書のdicファイルを作成
辞書のフォーマットは下記のと通りです。
1 2 3 |
(名詞 (普通名詞 ((見出し語 天気の子) (読み てんきのこ)) )) |
フォルダを作成します。
1 |
!mkdir /home/sasano/usr/share/juman/custom_dict_juman |
dicファイルを作成するコメントは下記の通りです。
1 |
!echo "(名詞 (普通名詞 ((見出し語 天気の子) (読み てんきのこ)) ))" > /home/sasano/usr/share/juman/custom_dict_juman/custom_dict_juman.dic |
4.4.2. 作成したdicファイルをJUMAN/KNPの実行環境へ追加
1 2 3 |
!cd /home/sasano/usr/share/juman/custom_dict_juman && /home/sasano/usr/libexec/juman/makeint custom_dict_juman.dic !cd /home/sasano/usr/share/juman/custom_dict_juman && /home/sasano/usr/libexec/juman/dicsort custom_dict_juman.int > jumandic.dat !cd /home/sasano/usr/share/juman/custom_dict_juman && /home/sasano/usr/libexec/juman/makepat custom_dict_juman.int |

4.4.3. “天気の子” を解析
実行した結果は下記の通りです。

“天気の子”を1つの単語として認識することができました。
5. まとめ
今回は構文解析のツールJUMAN/KNPへユーザー辞書を追加する方法を紹介しました。
構文解析は日本語のNLPにおいて非常に重要なステップの一つです。
今回のブログが皆さんの日本語のNLPの開発にお役に立てば幸いです。
参考ページ
- 構文解析、2019年09月24日、ウィキペディア日本語版、https://ja.wikipedia.org/wiki/構文解析
- KNP – KUROHASHI-KAWAHARA LAB、2019年09月24日、 http://nlp.ist.i.kyoto-u.ac.jp/index.php?KNP
