НЛП: проверка предложения по данной грамматике - PullRequest
2 голосов
/ 09 мая 2019

У меня есть набор английских предложений

sentences = [
    "Mary had a little lamb.",
    "John has a cute black pup.",
    "I ate five apples."
]

и грамматика (для простоты)

grammar = ('''
    NP: {<NNP><VBZ|VBD><DT><JJ>*<NN><.>} # NP
    ''')

Я хочу отфильтровать предложения, которые не соответствуютк грамматике.Есть ли встроенная функция NLTK, которая может достичь этого?В приведенном выше примере первые два предложения соответствуют шаблону моей грамматики, но не последнему.

Ответы [ 2 ]

1 голос
/ 10 мая 2019

TL; DR

Напишите грамматику, проверьте, анализирует ли она, переберите поддеревья и ищите нетерминалы, которые вы ищете, например, NP

См:

Код:

import nltk

grammar = ('''
    NP: {<NNP><VBZ|VBD><DT><JJ>*<NN><.>} # NP
    ''')

sentences = [
    "Mary had a little lamb.",
    "John has a cute black pup.",
    "I ate five apples."
]

def has_noun_phrase(sentence):
    parsed = chunkParser.parse(pos_tag(word_tokenize(sentence)))
    for subtree in parsed:
        if type(subtree) == nltk.Tree and subtree.label() == 'NP':
            return True
    return False

chunkParser = nltk.RegexpParser(grammar)
for sentence in sentences:
    print(has_noun_phrase(sentence))
0 голосов
/ 10 мая 2019

NLTK поддерживает POS-теги, вы можете сначала применить POS-теги к вашим предложениям, а затем сравнить с заранее определенной грамматикой.Ниже приведен пример использования POS-тегов NLTK.

enter image description here

...