我是 OpenNLP 的新手。我使用 OpenNLP 从句子中查找位置名称。我的输入字符串是“意大利在中央情报局案件中赦免美国上校”。我在结果集中找不到“意大利”字样。我怎么解决这个问题。提前致谢!
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());
}
最佳答案
opennlp 结果取决于创建模型的数据。 sourceforge 上的 en-ner-location.bin 文件可能不包含对您的数据有意义的样本。此外,使用词块分析器或词性标注器提取名词或名词短语 (NNP) 不会仅被隔离到位置。因此,您的问题的答案是:该模型并未考虑您数据中的每一种情况,这就是您在此特定句子上没有受到打击的原因。顺便说一句,NER 从来都不是完美的,它总是会返回一定程度的误报和漏报。
关于java - 使用 OpenNLP 查找位置名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160090/