CDH 4 で OpenNLP 1.5.2 を使用していますが、異常な問題が発生します。
jUnit テストを実行すると、すべてが成功します。localJobRunner モード (疑似または完全モード) で実行すると、多くの名前が常に認識されるとは限らず、何かを期待していたときに「空白の」スパンが返されます。
はい、ローカル/疑似/完全モードで見つからない名前は、私の jUnit テストにあります!
電話をかけるたびに、一度に 1 文ずつ渡します。文を String[] にトークン化し、これらのトークンを使用して検出します。
私が呼んでいるものの例は次のとおりです。
result = Parser.tokenizedNamedEntityRecognition("PK FRESH IGA PLUS LI PORT KENNEDY WA", nameFinder);
assertEquals("IGA", result);
nameFinder の場所:
InputStream modelIn;
try {
modelIn = new FileInputStream(System.getProperty("user.home") + "pathToModel" + MRConstants.c_namedEntityRecognitionModelFile);
} catch (FileNotFoundException e) {
fail("fail message here");
}
NameFinderME nameFinder = new NameFinderME(new TokenNameFinderModel(modelIn));
呼び出されたメソッドで私がやっている:
String tokens[] = sentence.split(MRConstants.c_singleSpace);
Span nameSpans[] = nameFinder.find(tokens);
私の map メソッドを介して呼び出された場合、常に名前が抽出されるとは限りません。失敗率は20%くらいだと思います。
多くの訓練された文の 1 つの例は次のとおりです。
PK FRESH <START:name> IGA <END> PLUS LI PORT KENNEDY WA
同じモデルで同じメソッドを呼び出すと、ローカル/疑似/フルモードで実行しているときに機能することがありますが、常にjUnitで機能する理由はよくわかりません。
どんな洞察もいただければ幸いです:)