Я работаю над проектом для разбора текста, используя nltk. Я борюсь с грамматикой чанкинга, чтобы определить слова, которые я хочу найти. В частности, я хочу найти, где («not», «RB») следует (часто несколькими словами позже) («alterations», «NNS»). Слова, которые могут быть найдены между ними, могут значительно различаться, но я надеюсь, что есть частичное выражение, которое справится с этим.
Мой код (пока):
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 для борьбы с такими порциями, или я должен попробовать что-то еще полностью?