[TOC]

對于一門語言來說,一句話有無限可能。問題是我們只能通過有限的程序來分析結(jié)構(gòu)和含義。嘗試將“語言”理解為:僅僅是所有合乎文法的句子的大集合。在這個思路的基礎(chǔ)上,類似于 word -> word and/or/... word 就成立,這種式子叫做遞歸產(chǎn)生式。理論上,句子可以無限擴(kuò)充。

文法

自定義文法

寫法上與上一篇博文的分類規(guī)則思路基本一致,并且更簡單、更直觀,可以和之前的對比著看。

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)

在定義文法的時候,

網(wǎng)友評論