yasuokaの日記: 日本語係り受け解析エンジンとしてのNLP-Cube
AdobeのNLP-Cube1.0.5のベクトル・ダウンロード回りが治った、との連絡をいただいた。昨日の日記に続いて、NLP-Cubeの日本語モデルもインストールしてみよう。
% pip3 install nlpcube
% python3
>>> from cube.api import Cube
>>> Cube(verbose=True).load("ja")
>>> quit()
巨大なwiki.ja.vecを筆頭に、あちこちから色んなモノを取ってくるので、とにかくダウンロードに時間がかかるが、一回だけ我慢することになる。次に、インターフェースの準備。
% python3
>>> from cube.api import Cube
>>> ja_nlpcube=Cube(verbose=True)
>>> ja_nlpcube.load("ja")
>>> def nlpcube2ud(sentence):
... return("".join("".join("\t".join([str(t.index),t.word,t.lemma,t.upos,t.xpos,t.attrs,str(t.head),t.label,t.deps,t.space_after])+"\n" for t in s)+"\n" for s in ja_nlpcube(sentence)))
...
>>>
NLP-Cubeを使って、Universal Dependenciesを返す関数が、これで準備できたことになる。どうせなので、私(安岡孝一)の「SVGによるUniversal Dependencies可視化ツール」にも繋いでみよう。
>>> def svgviewer(ud):
... import urllib.parse,webbrowser
... webbrowser.open("http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/kyodokenkyu/ud-kanbun/conllusvg/viewer.svg#"+urllib.parse.quote(ud))
...
>>>
これで、関数の準備は完了だ。では「望遠鏡で泳ぐ彼女を見た」を、試しに解析してみよう。
>>> u=nlpcube2ud("望遠鏡で泳ぐ彼女を見た")
>>> print(u)
>>> svgviewer(u)
この結果、私の手元では、以下のUniversal Dependenciesが出力されると同時に、こんな感じのSVGが表示された。
1 望遠鏡 望遠鏡 NOUN _ _ 6 obl _ SpaceAfter=No
2 で だ AUX _ _ 1 case _ SpaceAfter=No
3 泳ぐ 泳ぐ VERB _ _ 4 acl _ SpaceAfter=No
4 彼女 彼女 PRON _ _ 6 obj _ SpaceAfter=No
5 を を ADP _ _ 4 case _ SpaceAfter=No
6 見 見る VERB _ _ 0 root _ SpaceAfter=No
7 た た AUX _ _ 6 aux _ SpaceAfter=No
正しく「望遠鏡←obl─見」となっているのが、素晴らしい。ただ、NLP-Cubeは「で」がAUX(助動詞)になってしまっていて、このあたりが「あと一息」だったりする。ちなみにNLP-Cubeは、wiki.ja.vecを必要としないバージョンを開発中らしいので、個人的には楽しみである。
日本語係り受け解析エンジンとしてのNLP-Cube More ログイン