我一直在玩自然語言解析樹,並以各種方式操縱它們。我一直在使用斯坦福大學的Tregex和Tsurgeon工具,但代碼很混亂,並且不適合我主要的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的孩子和一些名爲「銀行」的後代,第二個孩子的標籤爲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的東西,所以我不知道從哪裏開始。
什麼是描述模式的好方法?什麼是描述操作的好方法?想想這個問題的好方法是什麼?
是否有使用SP樹正則表達式的任何文檔?或者到目前爲止,javadoc是唯一的文檔嗎? – sholsapp 2010-09-18 22:07:20
啊,你好,曼寧教授,抱歉不批評你的工作,沒有提供具體的理由。我想對代碼進行破解,但是我發現有100,000行有點令人生畏,只是增加了一點抽象層。我非常感謝Tregex/Turgeon的存在。我只是好奇,如果DSL做類似的事情可以寫得更簡潔。仍然存在Java相互作用的問題,我已經以不令人滿意的方式解決了這個問題,但它有效。 – guidoism 2010-09-19 16:39:49
@gnucom:我承認文檔可能會更好/更廣泛。但是還有其他一些資源。 ppt幻燈片http://nlp.stanford.edu/software/tregex/The_Wonderful_World_of_Tregex.ppt是進行tregex模式介紹的最佳位置。在GUI應用程序中有很多有用的幫助屏幕。有關更多信息,請參閱:http://nlp.stanford.edu/software/tregex-faq.shtml#b。 – 2010-09-19 22:35:06