我想在不使用 Natural Language Toolkit(NLTK) 的情况下从树结构中提取规则。
例如;树形结构为:
( NP-TMP ( NNP December ) ( CD 1998 ) ) \n
我想提取这样的规则:
NP-TMP -> NNP CD
NNP -> 'December'
CD -> '1998'
如何re
在不使用“nltk”的情况下使用 Python 中的库来做到这一点?
一个非常不优雅的解决方案是
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 表达式或树都有两个后代,如果没有,这将不起作用,也许手工制作的解析器比正则表达式更好。