使用另一个分析器的分析器输出,我创建了句子的分析树。现在,我需要找到解析中出现的每个名词短语的字符偏移量。Stanford CoreNLP:从分析树中获取CharacterOffset注释
我该怎么办?
使用另一个分析器的分析器输出,我创建了句子的分析树。现在,我需要找到解析中出现的每个名词短语的字符偏移量。Stanford CoreNLP:从分析树中获取CharacterOffset注释
我该怎么办?
取一个对应于名词短语的子树。获得此树的叶子:
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。
我首先看看解析器使用的tokenizer/chunker。我会更容易找到块和原始文本之间的字符偏移映射(如果字符偏移量不在那里)。然后你可以遍历你的分析树寻找名词短语,然后从那里遍历左手分支,直到你到达一个假期,这将是你的分析树中的第一个标记;并从NP节点开始,遍历右手边的分支,直到你到达另一个假期,这将成为你的结束标记。您可以通过从树根开始计算树叶来获得第一个标记的偏移量。
如果您使用的是“另一个解析器”,为什么您的问题被标记为stanford-nlp? – 2013-05-13 14:00:50