yasuokaの日記: StanfordNLPで読む『吾輩は猫である』
StanfordNLPの新しいバージョン0.2.0がリリースされたので、少しばかり動かしてみた。まずは、python3のpip3でインストール。
% pip3 install stanfordnlp==0.2.0
% python3
>>> import stanfordnlp
>>> stanfordnlp.download("ja")
確かに、言語モデルが以前より小さくなっており、私(安岡孝一)の手元では、ダウンロードも処理も早くなっている気がする。試しに、言語処理100本ノック2015の『吾輩は猫である』から、「ヴァイオリンを始める」文を探してみよう。
% python3
>>> import stanfordnlp,urllib.request
>>> ja=stanfordnlp.Pipeline(lang="ja")
>>> with urllib.request.urlopen("http://www.cl.ecei.tohoku.ac.jp/nlp100/data/neko.txt") as r:
... q=r.read()
...
>>> u=ja(q.decode("utf-8"))
>>> for s in u.sentences:
... f=False
... for w in s.words:
... if w.lemma=="ヴァイオリン" and w.dependency_relation=="obj":
... if s.words[w.governor-1].lemma=="始める":
... f=True
... if f:
... print("".join("\t".join([str(w.index),w.text,w.lemma,w.upos,w.xpos,w.feats,str(w.governor),w.dependency_relation,"_","_"])+"\n" for w in s.words))
...
1 「 「 PUNCT _ _ 2 punct _ _
2 君 君 PRON _ _ 11 nmod _ _
3 は は ADP _ _ 2 case _ _
4 ヴァイオリン ヴァイオリン NOUN _ _ 9 obj _ _
5 を を ADP _ _ 4 case _ _
6 いつ いつ NOUN _ _ 7 compound _ _
7 頃 頃 NOUN _ _ 9 obl _ _
8 から から ADP _ _ 7 case _ _
9 始め 始める VERB _ _ 11 acl _ _
10 た た AUX _ _ 9 aux _ _
11 のかい のかいる NOUN _ _ 0 root _ _
12 。 。 PUNCT _ _ 11 punct _ _
SVGで可視化すると、こんな感じ。「のかいる」にイラっとくるものの、「ヴァイオリンを始める」がうまく検索できている。ただ、残念ながら、StanfordNLP 0.2.0が学習元にしているのは、旧版のUniversal Dependencies 2.2のようである。Universal Dependencies 2.4への対応は、もうしばらくかかるのかなぁ…。
StanfordNLPで読む『吾輩は猫である』 More ログイン