我正在测试让实体在CoreEntityMention中提到新的3.9.0方式。我做了类似的事情:
CoreDocument document = new CoreDocument(text);
stanfordPipe = createNerPipeline();
stanfordPipe.annotate(document);
for (CoreSentence sentence : document.sentences()) {
logger.debug("Found sentence {}", sentence);
if (sentence.entityMentions() == null) continue;
for (CoreEntityMention cem : sentence.entityMentions()) {
logger.debug("Found em {}", stringify(cem));
}
}
当我使用sentence.entityMentions()
迭代实体提及时,我看到生成的一些实体提及是多令牌实体提及。如果我错了,获取实体提及并纠正我的旧方法是,你必须迭代CoreLabel,因此必须自己组合多标记实体。
那么在将相邻令牌与相同的ner标签组合之前,是否存在一些以前不存在的新方法?或者我是否错过了结合多标记实体提及的旧方法?
答案 0 :(得分:2)
非常感谢您使用新界面!
是的,CoreEntityMention应该代表完整的实体提及。这是添加了一些新语法,以帮助您更轻松地使用我们的代码。
传统上需要像sentence.get(CoreAnnotations.TokensAnnotation.class)......等等......所以我们尝试添加一些包装类,以便人们可以使用管道接口,但没有繁琐的语法
使用这个新推出的语法,你可以写:
sentence.tokens();
关于实体提及,如果句子是#34; Joe Smith去了夏威夷。"你会得到两个实体提及:
Joe Smith(2个令牌) 夏威夷(1个代币)
传统上,ner
注释器会使用它的命名实体类型标记句子中的每个标记。然后,单独的entitymentions
注释器将构建Mention
注释,这些注释是完整实体提及的CoreMap
表示(例如Joe Smith)。
多年来我见过很多人问"我如何从标记的令牌序列转到完整的实体提及?"因此,为了回应这一点,我们试图让提取句子中提到的完整实体变得容易得多。
我还应该注意到,在大多数情况下,较旧的方法仍然有用。我们正在努力完成3.9.0版本的更新文档!