NLP:根据给定的语法验证句子

时间:2019-05-09 17:02:19

标签: python machine-learning nlp nltk

我有一组英语句子

 句子= [
    “玛丽有只小羊羔。”,
    “约翰有一只可爱的黑小狗。”,
    “我吃了五个苹果。”
]
 

和语法(为简单起见)

 语法=('''
    NP:{  
* <。>}#NP     ''')

我希望过滤出不符合语法的句子。 是否有内置的NLTK功能可以实现此目的? 在上面的示例中,前两个句子遵循我的语法模式,但不遵循最后一个。

2 个答案:

答案 0 :(得分:1)

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))

答案 1 :(得分:0)

NLTK支持POS标记,您可以首先将POS标记应用于句子,然后与预定义语法进行比较。以下是使用NLTK POS标记的示例。

enter image description here