自然语言处理基础(3)--自底向上的句法分析
自底向上句法分析一般采用LR分析法,该刚发要求文法不包含移进--归约或者归约--归约冲突,由于自然语言的歧义性,不可避免的存在各种冲突,因此,自底向上分析法并不适合汉语句法分析
1.移进--归约算法
算法的基本数据结构是堆栈。
算法中主要的操作:
(1)移进。从句子左端将一个终结符移到栈顶
(2)归约。根据规则,将栈顶的若干个符号替换成一个符号
(3)接收。句子中所有词语都已移动到栈里,并且栈中只剩下一个符号S,分析成功,结束
(4)拒绝。句子中所有词语都已移动到栈里,栈中并非只有一个符号S,也无法进行任何归约操作,分析失败,结束
2.欧雷分析法
算法基本思想是:把每个句法成分的识别过程划分为若干个状态。一个重要贡献是引入了点规则,所谓点规则,是在规则右部的终结符或者非终结符之间的某个位置上加上一个圆点,表示规则右部被匹配的程度
Earley算法涉及到的操作:
算法的具体过程描述:
3.线图分析法
算法的基本思想是:给定一个句子的词性序列s=w1w2...wn,构成一个线图(一组节点和边的集合),查看任意相邻几条边上的标记串是否与某条产生式规则的右部相同,如果相同,则增加一条新的边跨越原来相应的边,新增加边上的标记为这条产生式规则的头。重复这个过程,直到没有新的边产生
算法描述:
从输入串的起始位置到最后位置,循环执行如下步骤:
(1)如果待处理表为空,则找到下一个位置上的词,将该词对应的词类X附以(i,j)作为元素放到待处理表中,即X(i,j)。其中,i,j分别是该词的起始位置和终止位置
(2)从待处理表中取出一个元素X(i,j)
(3)对于每条规则A-->Xr,将A-->X*r(i,j)加入点规则集合中,然后调用扩展弧子程序
4.CYK分析法
CYK分析法首先需要对文法进行Chomsky范式化处理(如果规定右部分必须是一个终结符,或者是两个非终结符,符合这种限制的产生式叫“乔姆斯基范式”)。CYK分析法的主要数据结构是一个n*n的二维矩阵,每个元素对应与输入句子的某一个词串上所有可能形成的短语的非终结符的集合。如果我们把i和j分别看做是平面坐标系中的横纵坐标,那么,横坐标代表该词串左侧第一个词的位置,纵坐标代表该词串包含的词数。
CYK分析法算法描述如下:
(1)对于i=1,...,n,j=1 //填写第一行,词串长度为1
对于每一条规则A-->ti
将非终结符A加入集合P(i,j)
(2)对于j=2,...,n //填写第二行到n行,词串长度为j
对于i=1,...,n-j+1 //对于所有起点i
对于k=1,...,j-1 //对于一个词串内所有分割点k
对于每一条规则A-->BC
如果B属于P(i,K)且C属于P(i+k,j+k)
(3)如果S属于P(1,n),那么分析成功,否则分析失败
由于任何一个上下文无关文法CFG都可以转换成符合Chomsky范式的文法,因此,CYK算法可以应用于任何一个上下文无关文法