0

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

我该怎么办?

4

2 回答 2

3

取一个对应于名词短语的子树。获取这棵树的叶子:

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

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

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

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

这适用于斯坦福 CoreNLP 3.2.0。

于 2013-07-11T15:14:07.067 回答
0

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

于 2013-05-13T14:05:06.200 回答