大量参照 http://www.nltk.org/book/ch08.html ,对于文本结构的研究和教程数不胜数,本文只起抛砖引玉之用。
语言(不考虑非书面语言)一定是字符串,但字符串不一定是语言。
一部分研究认为存在一套规范的规则定义了语言,找到了这些规则,也就找到了语言的内涵,从而定义了语言。但现实生活中,大量不规范的使用方法同样普遍存在,特别是口语和网络用语中。另一方面,语法难以适应语言的变迁,语言总是与时俱进的(各种语言的古文和现代文都有不小的差异)。
不寻找内涵,只从外延出发,被人类普遍适用的就是语言,这种方法简单,直接,但难以作为标准,因为很难确认一段文本是否被人类使用过。
字符串空间的规模非常大,几乎不可能直接研究这个空间,所以必须把问题简化到一定规模,并且这一简化过程必须是自动的,不借助人力的。字符串到文本的第一步便是N-gram约束,N-gram统计大大缩减了文本空间,但其作用也有极限,通常5-gram以上就很难处理的。所以研究者们需要找到其他约束条件。
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"
每一条叫产生式
A → BC, or
A → a, or
S → ε,
任何CFG都能转化到CNF形式
S -> NP VP (1.0)
VP -> V NP (0.6) | V NP PP (0.4)
顾名思义,上下无关就是每一元素扩展时不需要率其他元素,所以下列规则就是上下文有关
VP NP -> "go home"