我有一组英语句子
句子= [
“玛丽有只小羊羔。”,
“约翰有一只可爱的黑小狗。”,
“我吃了五个苹果。”
]
和语法(为简单起见)
语法=('''
NP:{ * <。>}#NP
''')
我希望过滤出不符合语法的句子。 是否有内置的NLTK功能可以实现此目的? 在上面的示例中,前两个句子遵循我的语法模式,但不遵循最后一个。
答案 0 :(得分:1)
编写语法,检查语法是否解析,遍历子树并查找您要查找的非终结符,例如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)