我正在使用nltk解析文本的项目。我正在用分块语法器来定义我要查找的单词。具体来说,我想找出('alt','NNS')后面('not','RB')后面(通常是几句话)。它们之间可以找到的词可能相差很大,但是我希望有一个能够处理此问题的分块表达式。
我的代码(到目前为止)是:
sentences = nltk.word_tokenize(text)
for sent in sentences:
sent_tok = nltk.pos_tag(sent.split())
myGrammar = '''
NotAlter:
{<RB.?><NNS>}
{<RB.?><PDT>}'''
parser = nltk.RegexpParser(myGrammar)
treelist = [tree.leaves() for tree in parser.parse(sent_tok).subtrees() if tree.label() == 'NotAlter']
for elem in treelist:
print str(elem)
以下是一些(较简单的)示例输入文本短语:
遵守本条第(8)(b)款的规定,不得对已废除的房屋进行任何结构或外部的更改或增加
未经房东事先书面同意,不得对房舍进行任何改动或增加
承租人不得对公寓内部进行改动
是否可以使用nltk来处理像这样的分块,还是我应该完全尝试其他事情?