Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用OpenNLP查找位置名称_Java_Location_Opennlp - Fatal编程技术网

Java 使用OpenNLP查找位置名称

Java 使用OpenNLP查找位置名称,java,location,opennlp,Java,Location,Opennlp,我是OpenNLP的新手。我使用OpenNLP从句子中查找位置的名称。我的输入字符串是“意大利在中情局案件中赦免美国上校”。我在结果集中找不到“意大利”这个词。我怎样才能解决这个问题。提前谢谢 try { InputStream modelIn = new FileInputStream("en-token.bin"); TokenizerModel tokenModel = new TokenizerModel(modelIn); modelIn.close(); To

我是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());
}
试试看{
InputStream modelIn=新文件InputStream(“en token.bin”);
TokenizerModel tokenModel=新的TokenizerModel(modelIn);
modelIn.close();
Tokenizer Tokenizer=新的Tokenizer(tokenModel);
名字查找器=
新名字芬德姆(
新的TokenNameFinderModel(新的FileInputStream(“en-ner-location.bin”));
字符串标记[]=tokenizer.tokenize(documentStr);
Span nameSpans[]=nameFinder.find(令牌);

对于(int i=0;iopennlp结果取决于从中创建模型的数据。sourceforge上的en-ner-location.bin文件可能不包含对您的数据有意义的示例。此外,提取名词或名词短语(NNP)使用chunker或POS标记器时,标记器不会被孤立在某个位置。因此,您的问题的答案是:该模型并不能解释数据中的每一个案例,这就是为什么您无法找到这一特定句子的原因。顺便说一句,NER从来都不是完美的,总是会返回一定程度的误报和误报。

尝试移动
modelIn.close();
for()
循环之后谢谢你的回复,我在for()循环之后移动了modeIn.close();但它仍然返回空结果。如果我用法国替换意大利,那么它工作得很好。我不知道为什么它不能检测到一些职位名称,比如意大利、意大利、英格兰。我把句子改为“亚利桑那州附近的加利福尼亚州”它能够告诉亚利桑那州是一个地方,但没有加利福尼亚州的输出。我担心训练数据不完整。嗨,Akshayb,我测试了许多其他输入字符串,我发现如果位置名称在句子的第一个单词中,例如意大利,那么程序就无法识别它。我使用了你的输入句子,它返回了加利福尼亚州和加利福尼亚州亚利桑那州,我不知道为什么它会返回不同的结果。我在这个链接中下载了工具:我使用这个工具(下载链接:opennlp.sourceforge.net/models-1.5/en pos maxent.bin)来解决我的问题。我解析你的输入句子。结果是“加利福尼亚州在亚利桑那州附近”。我不仅可以检测到加利福尼亚州和亚利桑那州,还可以找到其他类型(组织,个人)。我可以这样做,因为它是NNP或NNPs类型