09

進めない日常

ここ一月ほどTwitterの日本語を解析してみたくて、係り受け解析に手を出してみている。 ちなみに何も(本当に何も)できていません。 その状況報告。

KNP
  • Cabocha と KNPがメジャーどころらしい。ざっと評判を眺めたところ、KNPの方が精度がよさそうだったのでインストールを試みる
  • Amazon Lightsail の最小インスタンスが余っていたのでそこで作業をしていたのだが、この程度のインスタンスだと juman と knp 自体のインストールは可能だが、juman++ はコンパイルに失敗する。メモリ不足のためと思われるが、詳しい原因はよく知らない。
  • juman++のみ別のインスタンスでコンパイル済みのものを導入した
  • pyknp をインストールしてPythonから呼び出せることは確認できた。
  • 半角空白、改行コード、絵文字を取り扱うのはまずいらしいので、全社2つは全角空白に、絵文字は単純に削除して pyknp に渡してみる
  • 何かわからないが不正な文字列があるとしてエラーになる部分が多々(エラーなく解析できる部分もある)
  • エラーはとりあえずパスして続行するも、特定の箇所で無限ループにはまって止まる。
  • ちょっとソースのぞいてみたところ、おそらくサブプロセスを起動してその出力を待っているような雰囲気なのだが、サブプロセスのアウトプットがループから抜ける条件に合致しないのだと思う。たぶんこのサブプロセスはKNPのバイナリを起動しているのだろうが・・・。
StanfordNLP
  • そんなことではまっているうちに、 stanfordnlp とかいうのが出たという情報をキャッチ。
  • 試そうとしてみるも、Lightsailの方ではやはりメモリが足りない。
  • 別途もうすこしメモリのあるインスタンスではインストールはできるものの、Cent OSが6系だったのでglibc のバージョンが合わないらしく、実行できない。
  • Centos 6でglibcをインストールする方法はないでもないらしいが、この上にいろいろ構築することを考えると、単純にCentos7にしてしまったほうがよかろうということでOSごと環境を作り直し。
  • stanfordnlp のインストールはできたものの、最初のサンプルでさえ動かない。 Vector が見つからないとか。何の?
追記

Windows/Anaconda だとモデルのダウンロードでrmコマンドを実行しているというエラーが出るが、解析自体はできる模様で

>>> doc = nlp("きょうもいいてんきですね")
>>> doc.sentences[0].print_tokens()
<Token index=1;words=[<Word index=1;text=きょうも;lemma=きょうも;upos=ADV;xpos=_;feats=_;governor=2;dependency_relation=advmod>]>
<Token index=2;words=[<Word index=2;text=いい;lemma=いい;upos=ADJ;xpos=_;feats=_;governor=0;dependency_relation=root>]>
<Token index=3;words=[<Word index=3;text=て;lemma=て;upos=SCONJ;xpos=_;feats=_;governor=2;dependency_relation=mark>]>
<Token index=4;words=[<Word index=4;text=ん;lemma=ない;upos=AUX;xpos=_;feats=_;governor=2;dependency_relation=aux>]>
<Token index=5;words=[<Word index=5;text=き;lemma=来る;upos=AUX;xpos=_;feats=_;governor=2;dependency_relation=aux>]>
<Token index=6;words=[<Word index=6;text=です;lemma=だ;upos=AUX;xpos=_;feats=_;governor=2;dependency_relation=cop>]>
<Token index=7;words=[<Word index=7;text=ね;lemma=ね;upos=PART;xpos=_;feats=_;governor=2;dependency_relation=mark>]>
>>> doc = nlp("今日もいい天気ですね")")")
>>> doc.sentences[0].print_tokens()")
<Token index=1;words=[<Word index=1;text=今日;lemma=今日;upos=NOUN;xpos=_;feats=_;governor=3;dependency_relation=obl>]>
<Token index=2;words=[<Word index=2;text=も;lemma=も;upos=ADP;xpos=_;feats=_;governor=1;dependency_relation=case>]>
<Token index=3;words=[<Word index=3;text=いい;lemma=いい;upos=ADJ;xpos=_;feats=_;governor=4;dependency_relation=acl>]>
<Token index=4;words=[<Word index=4;text=天気;lemma=天気;upos=NOUN;xpos=_;feats=_;governor=0;dependency_relation=root>]>
<Token index=5;words=[<Word index=5;text=です;lemma=だ;upos=AUX;xpos=_;feats=_;governor=4;dependency_relation=cop>]>
<Token index=6;words=[<Word index=6;text=ね;lemma=ね;upos=PART;xpos=_;feats=_;governor=4;dependency_relation=mark>]>

うーん