我想從樹結構中提取規則而不使用自然語言工具包(NLTK)。例如:
對於ex;樹結構是:從樹結構中重新生成規則但不是沒有nltk
(NP-TMP (NNP December ) (CD 1998 ) ) \n
,我要提取規則,以便:
NP-TMP -> NNP CD
NNP -> 'December'
CD -> '1998'
我如何能做到這一點可以用Python re
庫,而無需使用「NLTK」?
我想從樹結構中提取規則而不使用自然語言工具包(NLTK)。例如:
對於ex;樹結構是:從樹結構中重新生成規則但不是沒有nltk
(NP-TMP (NNP December ) (CD 1998 ) ) \n
,我要提取規則,以便:
NP-TMP -> NNP CD
NNP -> 'December'
CD -> '1998'
我如何能做到這一點可以用Python re
庫,而無需使用「NLTK」?
極不優雅的解決辦法是
import re
s_expr = "(NP-TMP (NNP December ) (CD 1998 ) )"
regex = re.compile("([\\w-]+)")
matches = re.findall(regex, s_expr)
# assert the s-expressions are 5
assert (len(matches) == 5)
print matches[0], matches[1], matches[3]
print matches[1], matches[2]
print matches[3], matches[4]
在這裏,我承擔所有的s表達式或樹木有兩個後代,如果沒有,這是不是要去工作,也許由按手解析器比正則表達式更好。
所有的樹都是那樣的嗎? – snf
您需要描述多個規則,因此您是否只是從固定模式進行簡單提取或解析s表達式就會更清楚。 –
正則表達式是* regular *它是遞歸語法的一個子集。即它不能解析遞歸語法的產品,這正是你正在嘗試做的。但是,如果由於某種原因,您反對使用NLTK,您可以查看任何Lisp解析器(它們通常不是非常複雜)來弄清楚如何解析它。還有其他庫,可以幫助您構建特殊類型的解析器。我沒有使用[這一個](http://code.google.com/p/funcparserlib/),但它看起來不錯。 – 2013-07-30 16:29:49