CYK算法详解
来源:互联网 发布:怎样注销手机淘宝号 编辑:程序博客网 时间:2024/05/17 23:50
在计算机科学领域,CYK算法(也称为Cocke–Younger–Kasami算法)是一种用来对 上下文无关文法(CFG,Context Free Grammar)进行语法分析(parsing)的算法。该算法最早由John Cocke, Daniel Younger and Tadao Kasami分别独立提出,其中John Cocke还是1987年度的图灵奖得主。CYK算法是基于动态规划思想设计的一种自底向上语法分析算法。
Context Free Grammar 和 Parsing 在编译技术和自然语言处理中都有用到,我们这里介绍的内容主要基于后者,因此所举之例子也是自然语言处理中的例子。
1、乔姆斯基范式(CNF,Chomsky Normal Form)
我们首先来谈谈CNF的话题。通常把一门语言定义成一些由单词组成的词串(也就是句子)构成的集合。所以如果问两种语法(或文法)是否等价,其实就是要考察它们能否生成完全一样的词串集合。事实上,两个完全不同的CFG是不可能生成相同语言的。
而谈到两种语法“等价”,我们又可以定义弱等价和强等价两种类型的等价:
- 如果两种语法能够生成相同的词串集合,且为每个句子都赋与相同的短语结构(phrase structure),也就是说仅允许对non-terminal symbols进行重命名,那么它们就是强等价的。
- 如果两种语法能够生成相同的词串集合,但不会为每个句子都赋与相同的短语结构,那么它们就是弱等价的。
有时候,让各个语法都拥有一个标准的形式非常有用,也即是语法的规则部分都采用一种特殊的形式。CNF就是这样一种标准形式。如果 一个 CFG 是 ε-free ( ε 表示空串),而且它的rules只有如下两种形式之一:
- A→B C
- A→a
那个这个CFG就是采用CNF形式的,可见CNF语法都是二分叉的。任何语法都可以转化成一个弱等价的CNF形式,具体方法如下:
2、CYK 算法
CYK处理的CFG必须是CNF形式的。所以算法首先要把非CNF形式的CFG转化到CNF形式,方法前面刚刚讲过。
接下来就是要填写一个 parse table,如果我们要处理的句子中有n个词,那么这个parse table就是一个(n+1)×(n+1)的矩阵的上三角部分。如下图所示。
注意,我们前面说过CYK是一种自底向上的算法,这里的自底向上意思是从单词开始,朝向 S(句子)工作。所以在上图我们填写的大方向是从左到右填写的。S 位于表的右上角,表示成功。算法描述如下:
其中,i 和 j 指示的内容如下图所示:
到此为止,我们得到的是一个recognizer, 还不是一个 parser,最后我们要根据已经得到的表返回所有可能的语法分析情况,就是大功告成了。
- CYK算法详解
- CYK算法详解
- CYK算法
- cyk的小学妹
- cyk的题目清单
- cyk的烂代码
- cyk的游戏
- cyk追楠神系列一
- cyk追楠神系列一
- cyk追楠神系列三
- cyk的题目清单
- cyk追楠神系列三
- cyk追楠神系列二
- sdutacm-cyk追楠神系列一
- cyk的烂代码 内存转换
- 算法详解
- 【算法详解】分治算法详解
- 【算法详解】洗牌算法
- 算法提高 9-2 文本加密
- Java基础学习总结——面向对象
- 6.2.3
- jQuery基础
- 3.变量与数据类型
- CYK算法详解
- Python 类属性变量和全局变量
- 跨平台开发app讲解
- Maven热部署及错误排除
- Java设计模式之单例模式
- Android读取csv文件并写到数据库中
- Java基础类型总结
- echo str_repeat("Shanghai ",5);基础啊
- vim 常用的若干命令