在hadoop中使用opennlp(tner)而不返回跨距

2jcobegt  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(278)

我使用opennlp1.5.2与cdh4,并有一个不寻常的问题。
当我运行junit测试时,一切都通过了。当我在localjobrunner模式(psuedo或full模式)下运行时,很多名称并不总是被识别的,并且当我期望得到一些东西时,返回了“blank”span。
是的,在local/psuedo/full模式下找不到的名字在我的junit测试中!
每次我打电话,我都会一次传一句话。我将这个句子标记成一个字符串[],然后使用这些标记进行查找。
我所说的一个例子是:

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%的失败率。
许多经过训练的句子中的一个例子是:

PK FRESH <START:name> IGA <END> PLUS LI PORT KENNEDY WA

我不太清楚为什么,当我用同一个模型调用同一个方法时,它有时在local/psuedo/full模式下运行,但总是在junit模式下运行。
如有任何见解,我们将不胜感激:)

djmepvbi

djmepvbi1#

解决方法:我没有清除文档之间的自适应数据。我犯了个愚蠢的错误!

相关问题