Stanford NLP 3.9.0:使用CoreEntityMention是否结合了相邻的实体提及?

时间:2018-02-05 22:04:37

标签: stanford-nlp named-entity-recognition

我正在测试让实体在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标签组合之前,是否存在一些以前不存在的新方法?或者我是否错过了结合多标记实体提及的旧方法?

1 个答案:

答案 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版本的更新文档!