EnsekiTT Blog

EnsekiTTが書くブログです。

Juman++を試そうと思ったら詰まったので解決方法を模索した話

つまりなにしたの?

OSXでJuman++をPythonから呼び出せるようになるまでの手順とつまりどころ(昨年くらいのブログ記事だとだいたい引っかかるっぽい。)の解決方法。
この解決方法はGithubにすでにプルリクエストが飛んでるけどマージされてないみたいなのでとりあえず手順でまとめてみた。

f:id:ensekitt:20171010233648j:plain


*1

今回自分が入れたもの

JUMAN++
KNP
PyKNP
の3つ

環境

macOS Sierra 10.12.6
Xcode Version 9.0 (9A235)
Homebrew 1.3.5-4-g56458f0

JUMAN++って何?

京都大学の黒橋・河原研究室で開発されたRecurrent newral network を言語モデルに適用した形態素解析システム。もともとJUMANというのもあったが、++になって性能がとても良くなったらしい。
JUMAN++ - KUROHASHI-KAWAHARA LAB

KNPって何?

JUMAN++と同じく黒橋・河原研究室で開発された日本語文の構文・格・照応解析を行うシステム。どのフレーズが何にかかっているかなどを解析することができる構文解析システム。

PyKNPって何?

JUMANやJUMAN++、KNPをPythonから利用できるようにしたもの。これがなくてもコマンドとしては利用できるけど、僕はPythonから使ってあわよくばツイッタラーの度し難い日本語にもより良い形態素解析ができることに期待している。
ensekitt.hatenablog.com

JUMAN++のインストール

OSXの場合はHomeBrewで普通にインストール出来た。

brew install jumanpp

# 動作確認
jumanpp -v
JUMAN++ 1.02
# ctrl+cで止まる
jumanpp
ひと目で、尋常でないもふもふだと見抜いたよ
ひと目 ひとめ ひと目 副詞 8 * 0 * 0 * 0 "代表表記:一目/ひとめ スル接続可能"
で で で 助詞 9 格助詞 1 * 0 * 0 NIL
、 、 、 特殊 1 読点 2 * 0 * 0 NIL
尋常で じんじょうで 尋常だ 形容詞 3 * 0 ナノ形容詞 22 ダ列タ系連用テ形 13 "代表表記:尋常だ/じんじょうだ"
ない ない ない 接尾辞 14 形容詞性述語接尾辞 5 イ形容詞アウオ段 18 基本形 2 "代表表記:ない/ない"
もふもふ もふもふ もふもふ 名詞 6 普通名詞 1 * 0 * 0 "代表表記:もふもふ/もふもふ 副詞識別 自動獲得:テキスト"
だ だ だ 判定詞 4 * 0 判定詞 25 基本形 2 NIL
と と と 助詞 9 格助詞 1 * 0 * 0 NIL
見抜いた みぬいた 見抜く 動詞 2 * 0 子音動詞カ行 2 タ形 10 "代表表記:見抜く/みぬく 補文ト"
よ よ よ 助詞 9 終助詞 4 * 0 * 0 NIL
EOS

* KNPのインストール
github.com
を使おうと思ったものの、以下の問題が発生した(2017年10月10日)

brew tap uetchy/nlp
brew install knp --with-crf++
Error: Failed to download resource "knp"
Download failed: 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.17.tar.bz2&name=knp-4.17.tar.bz2

ということで

brew edit knp

でUrlとsha256を上書きする
(sha256は公式には見つからなかったので公式からダウンロードしたファイルから自分で作った。)
http://nlp.ist.i.kyoto-u.ac.jp/index.php?KNP

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.18.tar.bz2&name=knp-4.18.tar.bz2" -O knp-4.18.tar.bz2 
shasum -a 256 knp-4.18.tar.bz2
4205ad0d5f2c5174879c7f23990064e531bb170365bf05e75bd683d7c5fe3d4b 

##あくまでえんせきがダウンロードしたもののハッシュ。公式ハッシュではないので注意

require "formula"

class Knp < Formula
  homepage "http://nlp.ist.i.kyoto-u.ac.jp/index.php?KNP"
  url "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.18.tar.bz2&name=knp-4.18.tar.bz2"
  sha256 "4205ad0d5f2c5174879c7f23990064e531bb170365bf05e75bd683d7c5fe3d4b"

  depends_on "juman"
  depends_on "tinycdb"

  def install
    args = %W[
      --disable-debug
      --disable-dependency-tracking
      --disable-silent-rules
      --prefix=#{prefix}
      --with-juman-prefix=#{HOMEBREW_PREFIX}/opt/juman
    ]

    system "./configure", *args
    system "make", "install"
  end

  test do
    system "false"
  end
end

インストールし直す

brew install knp --with-crf++

うまくいったっぽい。

動作確認

echo "笑顔とフラッシュがやかましいこれが私の自称姉です" | jumanpp | knp
# S-ID:1 KNP:4.18-CF1.1 DATE:2017/10/10 SCORE:-57.96652
      笑顔と<P>──┐             <体言>
フラッシュが<P>─PARA─────┐         <体言>
                  やかましい─────┐     <用言:形><格解析結果:ガ/笑顔;ガ/フラッシュ;ガ2/これ>
                              これが─────┐ <体言>
                                私の─────┤ <体言>
                                自称─────┤ <体言>
                                      姉です<体言><用言:判><格解析結果:ガ/これ>

pyKNPのインストール
http://nlp.ist.i.kyoto-u.ac.jp/index.php?PyKNP
からpyknp-0.3.tar.gz (2016.09.21)をダウンロード

wget http://nlp.ist.i.kyoto-u.ac.jp/DLcounter/lime.cgi?down=http://lotus.kuee.kyoto-u.ac.jp/nl-resource/pyknp/pyknp-0.3.tar.gz&name=pyknp-0.3.tar.gz -O pyknp-0.3.tar.gz
pip install pyknp-0.3.tar.gz
from pyknp import Juman
juman = Juman()
result = juman.analysis(u"笑顔とフラッシュがやかましいこれが私の自称姉です")
print(','.join(mrph.midasi for mrph in result))

for mrph in result.mrph_list():
    print(u"%s, \n読み:%s, 原形:%s, 品詞:%s, 品詞細分類:%s, 活用型:%s, 活用形:%s, 意味情報:%s, 代表表記:%s ;" 
    % (mrph.midasi, mrph.yomi, mrph.genkei, mrph.hinsi, mrph.bunrui, mrph.katuyou1, mrph.katuyou2, mrph.imis, mrph.repname))
笑顔,と,フラッシュ,が,やかましい,これ,が,私,の,自称,姉,です
笑顔, 
読み:えがお, 原形:笑顔, 品詞:名詞, 品詞細分類:普通名詞, 活用型:*, 活用形:*, 意味情報:代表表記:笑顔/えがお カテゴリ:動物-部位, 代表表記:笑顔/えがお ;
と, 
読み:と, 原形:と, 品詞:助詞, 品詞細分類:格助詞, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記: ;
フラッシュ, 
読み:ふらっしゅ, 原形:フラッシュ, 品詞:名詞, 品詞細分類:普通名詞, 活用型:*, 活用形:*, 意味情報:代表表記:フラッシュ/ふらっしゅ カテゴリ:人工物-その他 ドメイン:文化・芸術, 代表表記:フラッシュ/ふらっしゅ ;
が, 
読み:が, 原形:が, 品詞:助詞, 品詞細分類:格助詞, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記: ;
やかましい, 
読み:やかましい, 原形:やかましい, 品詞:形容詞, 品詞細分類:*, 活用型:イ形容詞イ段, 活用形:基本形, 意味情報:代表表記:やかましい/やかましい, 代表表記:やかましい/やかましい ;
これ, 
読み:これ, 原形:これ, 品詞:指示詞, 品詞細分類:名詞形態指示詞, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記: ;
が, 
読み:が, 原形:が, 品詞:助詞, 品詞細分類:格助詞, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記: ;
私, 
読み:わたし, 原形:私, 品詞:名詞, 品詞細分類:普通名詞, 活用型:*, 活用形:*, 意味情報:代表表記:私/わたし 漢字読み:訓 カテゴリ:人, 代表表記:私/わたし ;
の, 
読み:の, 原形:の, 品詞:助詞, 品詞細分類:接続助詞, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記: ;
自称, 
読み:じしょう, 原形:自称, 品詞:名詞, 品詞細分類:サ変名詞, 活用型:*, 活用形:*, 意味情報:代表表記:自称/じしょう カテゴリ:抽象物, 代表表記:自称/じしょう ;
姉, 
読み:あね, 原形:姉, 品詞:名詞, 品詞細分類:普通名詞, 活用型:*, 活用形:*, 意味情報:代表表記:姉/あね 漢字読み:訓 カテゴリ:人 ドメイン:家庭・暮らし, 代表表記:姉/あね ;
です, 
読み:です, 原形:だ, 品詞:判定詞, 品詞細分類:*, 活用型:判定詞, 活用形:デス列基本形, 意味情報:NIL, 代表表記: ;

とりあえずJUMAN++部分は使えたっぽい。
公式ドキュメントはなんかリンクが切れているけど、ダウンロードしたファイルのReadmeを読み解けば使えそう。