Stanford CoreNLP:从解析树中获取CharacterOffset注释

时间:2013-05-11 22:37:34

标签: java stanford-nlp

使用另一个解析器的解析器输出,我为句子创建了解析树。现在,我需要找到解析中出现的每个名词短语的字符偏移量。

我该怎么办呢?

2 个答案:

答案 0 :(得分:3)

获取与名词短语相对应的子树。得到这棵树的叶子:

List<Tree> leaves = tree.getLeaves();

然后取第一片叶子的起点( CharacterOffsetBeginAnnotation 值)和最后一片叶子的终点( CharacterOffsetEndAnnotation )。结果间隔是NP的偏移量。

要获取偏移值,请取叶子的标签并将其强制转换为HasOffset:

Label label = firstLeaf.label();
HasOffset ofs = (HasOffset) label;
int start = ofs.beginPosition();

适用于Stanford CoreNLP 3.2.0。

答案 1 :(得分:0)

我首先查看解析器使用的tokenizer / chunker。我会更容易找到块和原始文本之间的字符偏移映射(如果字符偏移量尚未存在)。然后你可以遍历你的解析树寻找名词短语,并从那里遍历左手分支,直到你到达一个假,这将是你的解析树中的第一个标记;并且从NP节点开始,遍历右手分支,直到您到达另一个离开,这将是您的结束标记。您可以通过计算树根的叶子来获取第一个标记的偏移量。