OpenNLPのNamed Entity ではできないこと

OpenNLPに実装されているNamed Entity では残念ながら欧米人の名前しか認識してくれない。
これでは困る。アジア人の名前のほとんどが認識できなければ、そんなの使い物にならない。

というわけで、別の固有名詞を探してくれる何かがないかあと思って探していると...有力そうなのがStanford Named Entity Recognitionだった。通称Ner
(Nervだったらかっこいのになあとか、しょうもない)

ほとんど説明は読んでないが、CRFで訓練しているそうなので、単純にリストに固有名詞があるorなし。よりかはよっぽど強力なのだろう。

ちなみにOnline demoで試した限りは、Naistが認識できた。
これなら、もう十分。

さて、それでは使ってみようか。というとこれが相当手こずっている。

本体はJavaで書かれていて、実行するときにclass pathを通すのだが、これがうまくいかない。エラーの内容は....classifierが見つからないとか....いや、でもclassifierは標準で用意されてるしなあ。わからない。

と思っていたら、原因はclasspathではなかった。
同封のREADMEのコマンドには誤りがあるみたいで、ただしくは

$ java -cp /Users/mi-ssawa/Downloads/stanford-ner-2012-07-09/stanford-ner.jar -mx600m edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier classifiers/english.all.3class.distsim.crf.ser.gz -textFile sample.txt

としないといけない。
(READMEだと分類器の名前が間違っている)

あと、pythonインターフェースがあったので、それを使ってみることに。

Readmeの通りに

>>> import ner
>>> tagger = ner.HttpNER(host='localhost', port=8080)
>>> tagger.get_entities("University of California is located in California, United States")

をすると...connection error.....だと...うーん、そもそもローカルに接続する形になってるからそんなはずはないんだが...

と、ふと思ったのだが、コードを見る限り/stanford-ner/nerが指定されている?

ということはここに置かないといけないのだろうか.....?

きょうはここまでにする