4

我是 OpenNLP 的新手。我使用 OpenNLP 从句子中查找位置的名称。我的输入字符串是“意大利在 CIA 案中赦免美国上校”。我在结果集中找不到“意大利”字样。我怎么解决这个问题。提前致谢!

try {
   InputStream modelIn = new FileInputStream("en-token.bin");
   TokenizerModel tokenModel = new TokenizerModel(modelIn);
   modelIn.close();
   Tokenizer tokenizer = new TokenizerME(tokenModel);
   NameFinderME nameFinder =
      new NameFinderME(
         new TokenNameFinderModel(new FileInputStream("en-ner-location.bin")));
   String tokens[] = tokenizer.tokenize(documentStr);
   Span nameSpans[] = nameFinder.find(tokens);
   for( int i = 0; i<nameSpans.length; i++) {
      System.out.println("Span: "+nameSpans[i].toString());
   }
}
catch(Exception e) {
   System.out.println(e.toString());
}
4

1 回答 1

1

opennlp 结果取决于创建模型的数据。sourceforge 上的 en-ner-location.bin 文件可能不包含对您的数据有意义的样本。此外,使用分块器或词性标注器提取名词或名词短语 (NNP) 将不会仅局限于位置。因此,您的问题的答案是:该模型并未考虑数据中的所有情况,这就是您没有对这个特定句子感兴趣的原因。顺便说一句,NER 从来都不是完美的,并且总是会返回一定程度的误报和漏报。

于 2013-12-08T16:50:06.137 回答