[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)
在定义文法的时候,
延伸阅读
学习是年轻人改变自己的最好方式