【发布时间】:2011-04-11 05:39:15
【问题描述】:
我一直在玩弄自然语言解析树并以各种方式操纵它们。我一直在使用斯坦福大学的 Tregex 和 Turgeon 工具,但代码很乱,不适合我主要使用 Python 的环境(这些工具是 Java,不适合调整)。我想要一个工具集,当我需要更多功能时可以轻松破解。是否有其他工具非常适合在树上进行模式匹配,然后操作那些匹配的分支?
例如,我想将以下树作为输入:
(ROOT
(S
(NP
(NP (NNP Bank))
(PP (IN of)
(NP (NNP America))))
(VP (VBD used)
(S
(VP (TO to)
(VP (VB be)
(VP (VBN called)
(NP
(NP (NNP Bank))
(PP (IN of)
(NP (NNP Italy)))))))))))
和(这是一个简化的例子):
- 查找标签为 NP 的任何节点,该节点的第一个子节点的标签为 NP,一些子节点名为“Bank”,第二个子节点的标签为 PP。
- 如果匹配,则取出 PP 节点的所有子节点并将它们移动到匹配的 NP 子节点的末尾。
例如,取树的这一部分:
(NP
(NP (NNP Bank))
(PP (IN of)
(NP (NNP America))))
把它变成这样:
(NP
(NP (NNP Bank) (IN of) (NP (NNP America))))
由于我的输入树是 S 表达式,我考虑过使用 Lisp(嵌入到我的 Python 程序中),但时间太长了,以至于我在 Lisp 中编写了任何重要的东西,以至于我什至不知道从哪里开始。
描述模式的好方法是什么?什么是描述操作的好方法?考虑这个问题的好方法是什么?
【问题讨论】:
标签: lisp nlp pattern-matching stanford-nlp s-expression