[TOC]

对于一门语言来说,一句话有无限可能。问题是我们只能通过有限的程序来分析结构和含义。尝试将“语言”理解为:仅仅是所有合乎文法的句子的大集合。在这个思路的基础上,类似于 word -> word and/or/... word 就成立,这种式子叫做递归产生式。理论上,句子可以无限扩充。

文法

自定义文法

写法上与上一篇博文的分类规则思路基本一致,并且更简单、更直观,可以和之前的对比着看。

import nltkfrom nltk import CFG

grammar = nltk.CFG.fromstring("""  S -> NP VP  VP -> V NP | V NP PP  PP -> P NP  V -> "saw" | "ate" | "walked"  NP -> "John" | "Mary" | "Bob" | Det N | Det N PP  Det -> "a" | "an" | "the" | "my"  N -> "man" | "dog" | "cat" | "telescope" | "park"  P -> "in" | "on" | "by" | "with"  """)
sent = 'Mary saw Bob'.split()
rd_parser = nltk.RecursiveDescentParser(grammar)for i in rd_parser.parse(sent):    print(i)

在定义文法的时候,

网友评论