如何在将其插入Tsurgeon的树中时命名节点

时间:2014-07-10 02:29:28

标签: java nlp stanford-nlp

当我在Stanford Parser API中使用Tsurgeon时,我想知道在将节点插入语法树时如何命名节点。

例如,我有两个操作:

Tsurgeon.parseOperation("replace predphrase (MAINVP=newpred > PLACEHOLDER)");//Step 1
Tsurgeon.parseOperation("insert predphrase >-1 > newpred")//Step 2

在这些操作之后,树(A(B =前言...))变为(A(MAINVP(B =前导词......)))。

但是,我发现它未能在步骤1中命名MAINVP节点,并且步骤2中的操作无法找到名为newpred的节点并抛出异常。

1 个答案:

答案 0 :(得分:0)

您需要在一个命令中提供多个Tsurgeon模式,以便第二个模式可以访问在第一个模式中创建的命名节点。使用方括号来执行此操作:

TsurgeonPattern t = Tsurgeon.parseOperation(
    "[replace predphrase (MAINVP=newpred > PLACEHOLDER)]" +
    "[insert predphrase >-1 > newpred]");

一种更简单的方法来进行我认为你想要的修改就是这样:

[adjoinF (MAINVP > foot@) predphrase]

这会将匹配的节点predphrase放在新的MAINVP树中。