句法模式识别(二)-正规文法、上下文无关文法

正规文法的特性

1.所有长度有限的语言都是正规的。

2.用正规文法当然能产生无限长串,其中周期重复部分的长度不大于非终止符的长度。

举个例子

在此规则之下,能生成句子

其中周期重复部分为ab,这个例子的非终止符的元素个数为2,故满足2不大于2.

自嵌入特性

我们把上下文无关文法中的正规文法去掉,剩下的那部分我们叫做真正的上下文无关文法。

自嵌入特性是区分真正的上下文无关文法与正规文法的判定标准。

即一个真正的上下文无关文法一定具有自嵌入特性,正规文法具有非自嵌入特性。亦即非自嵌入的上下文无关文法是正规文法,上下文无关文法就蜕化了。

什么是自嵌入特性?

自嵌入顾名思义,就是能够自己嵌入自己:

当然必须保证vx不能是空串。

uvwxy定理

这是一个用以判定上下文无关文法和正规文法的条件。

就是说,当这个文法满足自嵌入条件,表示出来就是

那么,可以得到

其中当vx的重复次数相同且为非空串时,则这个文法肯定就是真正的上下文无关文法。因为这种周期形式是正规文法所不具有的。比如这种

就是必须要用真正的上下文无关文法。

下面介绍上下文无关文法的等价文法。

不同的上下文无关文法,它们生成的语言有可能是等价的,这样就涉及到一个最优文法的问题。那么最优是什么?最有就是高效、没有冗余和浪费。

粗略说有2种冗余,而且只有非终止符能够冗余。终止符总是有用的啦。

其一是浪费环节。

浪费环节是说由单个非终止符传递到了单个的非终止符,比如

这种形式意味着B是多此一举的,还不如直接A到C呢。

其二是无用环节。

细分又有2类。通俗说

1.无尾的无用非终止符

所谓无尾,就是咱用了这个终止符,话根本都没法结束。有头无尾。

A根本没法最后变成常量(终止符)。

不存在x使得

2.无头的无用非终止符

所谓无头,就是这句话根本就不可能从这个非终止符开始。有尾无头。

从起始符开始根本找不到含有A的句子。

从起始符S开始,不存在

首先介绍如何消去浪费环节。

消去浪费环节包括2个部分。

其一消去。

其二修正。

消去过程

这个过程用递归算法来实现。

就是要求出所有非终止符各自对应能到达的所有非终止符集合。

举个例子就好了

现在消去浪费环节,先考虑S,

发现S能在一步之内的非终止符只有A

在K1(S)集合中再次出发,在一步之内能走到的新非终止符只有B

再往后没有新的非终止符了。

同理考察A,A在一步之内能到达的非终止符只有B了,记

再考察B,B根本就没有能在一步之内能到达的新终止符。

于是这对应的3个集合就求完了

修正过程

修正过程就按照上面的消去过程打补丁就好了,因为要消去一堆连接,旧桥拆了总得重新修吧。还是上面那个例子,先把之前的生成关系画出来,如图1黑线所示。

图1

现在考虑A,根据集合,我们要去掉A到B的连接

那么就得补上S到b、A到b、S到aS、A到aS,黄线代表。

然后再考虑S,要去掉S到A

那么就得补上S到BAb,绿线代表。

注意:现在虽然看起来文法规则比以前更麻烦了,但是,实际生成句子的过程却变得简单了许多,所以简化没简化还是要看疗效。

下面介绍消去无用的终止符

消去无用终止符的思路就是,找出所有有用的非终止符,那么剩下的自然就是没有用的了。

消去无尾非终止符

找出所有的有尾非终止符集合,定义为J(G)

方法是

这个表达式很清晰,还是举个例子,反而绕口,但还是举吧

这个表达式其实是一步步找到那些最终的到达终止符的非终止符。

首先J0(G)为空集。则J1(G)为所有能一步走到以终止符为尾的非终止符,即A

继续,J2(G)是J1(G)并上所有能在一步之内到以J1(G)或者其他终止符为尾的非终止符。

好绕口。。。其实就是{S,A}

再往下就找不到了。不过现在忽然发现,B呢?怎么没看到B的影子。

这就说明B就是无尾的无用非终止符。

去掉所有跟B有过关系的生成关系就好,现在是新的生成关系

再说说消去无头非终止符

也是只要找出所有有头的非终止符就好,剩下自然就无头了

用表达式表示是这样的

这个表达式的意义其实就是从起始符,回溯一步步展开,希望能找到句子的头部。

还是举个例子

展开起始符S,发现S能到aAA,因此R1(S)={S,A}

A继续展开,发现A能到aCA,因此R2(S)={S,A,C}

搞定,又发现原来B是无头的非终止符,赶紧删掉与它有关系的所有表达关系就好了,不再赘述。

上下文无关文法的2中标准型

1.C(Chomsky)标准型

举一个例子立即就知道怎么把随便一个上下文无关文本变成C标准型了:

2.G(Greibach)标准型

这个严格的转化方法有点畸形,就暂时不展开了。简单情况用凑的就好了。

欢迎参与讨论并关注本博客微博以及知乎个人主页,后续内容继续更新哦~

转载请您尊重作者的劳动,完整保留上述文字以及本文链接,谢谢您的支持!

句法模式识别(二)-正规文法、上下文无关文法

时间: 2024-11-05 23:09:45

句法模式识别(二)-正规文法、上下文无关文法的相关文章

上下文无关文法的表示与存储

[问题描述]把输入的文法存储在计算机内. [基本要求] 1.输入上下文无关文法的一组产生式. 2.将文法按顺序或链式结构存储在计算机内. 3.输出文法的四要素:终极符集合.非终极符集合.规则式集合和开始符. 4.开始符在输入时指明,否则将所输入第一条规则式的左部符号视为开始符. 例如输入如下文法: E->E+T| T T- >T*F| F F->(E)|i 下面是C++代码: #include<iostream> using namespace std; const int

上下文无关文法

1.上下文无关文法定义 文法:它描述语言语法结构的一组形式规则.  上下文无关文法:它定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境.例如,在程序设计语言中,当碰到一个算术表达式时,我们完全可以"就事论事"处理,而不必考虑它所处的上下文.然而,在自然语言中,随便一个词,甚至一个字的意思在不同的上下文中都有可能有不同的意思.幸运的是,当今的程序设计语言都是上下文无关的 . 好像有点抽象,来个例子 "→"表示箭头左边的由箭头右边的定义 把He gave

基于上下文无关文法的句子生成算法

前言 算法来自国外大牛的一篇博客:点击此处可查看 算法不涉及任何人工智能领域知识,仅仅是针对上下文无关文法提出的生成句子的思路. 上下文无关文法 上下文无关文法仅与句子结构有关,与上下文语意无关. 属性|单词 --|-- S |NP VP NP |Det N / Det N NP |I / he / she / Joe VP |V NP / VP Det |a / the / my / his N |elephant / cat / jeans / suit V |kicked / follow

句法模式识别(一)-串文法

前面介绍的所有思想都属于统计模式识别,然而统计模式识别存在2个问题: 1.有的模式结构很复杂,不能用一个矢量来表示. 2.有的模式识别任务中,我们更关心如何描述它的结构特征. 因此需要另外一种模式识别:结构模式识别. 这其中,句法模式识别主要使用形式语言来描述模式结构,在理论上完备,表1是句法模式识别与统计模式识别的对应关系,下面做介绍. 表1 串文法就是一种机器能识别的语法,所以先讲讲语法. 字母表V 字母a,b,c的有限集合. 句子x,y,z V中的符号形成的有限长度的字符串. 这其中是V的

上下文有关文法

上下文有关文法(CSG,英语:context-sensitive grammar)是一种形式文法,其中任何产生式规则的左手端和右手端都可以被终结符和非终结符构成的上下文所围绕.上下文有关文法比上下文无关文法更一般性,但仍足够有秩序得可以被线性有界自动机所解析. 上下文有关文法的概念是诺姆·乔姆斯基在1950年代介入的,被作为描述自然语言的语法的一种方式,在自然语言中一个单词是否可以出现在特定位置上,要依赖于上下文.可以被上下文有关文法描述的形式语言叫做上下文有关语言. 形式定义 形式文法 G =

了解动态链接(二)—— 地址无关代码

把指令中需要修改的部分剥离出来,放到数据区,保持指令部分不变,数据部分可以由每个进程拥有一个副本.这就是——地址无关代码(Position-independent Code, PIC),好处是实现指令部分由多进程共享,节省内存. 要实现PIC,就得解决指令中的地址定位问题.指令中的地址引用可分为: 1.模块内部的函数调用和变量访问: 2.模块外部的函数调用和变量访问. 第1种情况,由于大家都在同一个模块中定义,相互之间有一定的相对位置,所以可以通过相对地址调用解决问题. 第2种情况,也就是对于模

如何设计与数据上下文无关的接口测试用例

我们在做接口测试的时候很可能设计出这样与数据关联的测试用例.比如 def test_create_user(self): user = create_user(name="fred", age=29) # 调用创建用户的接口 self.assertEqual(user['name'], 'fred') def test_get_user(self): user = get_last_created_user() #调用获取最新注册用户的接口 self.assertEqual(user[

转:NLP+句法结构(三)︱中文句法结构(CIPS2016、依存句法、文法)

NLP+句法结构(三)︱中文句法结构(CIPS2016.依存句法.文法)转自:https://www.cnblogs.com/maohai/p/6453389.html 摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P8 -P11 CIPS2016> 中文信息处理报告下载链接:http://cips-upload.bj.bcebos.com/cips2016.pdf 一.依存句法分析 依存语法存在一个共同的基本假设:句法结构本质上包含词和词之间的

1型,2型,3型,文法的区别

1型文法:又称为上下文有关文法, (1):式子左边可以有多个字符,但必须有一个终结符(2):式子右边可以有多个字符,可以是终结符,也可以是非终结符,但必须是有限个字符2型文法:又称为上下文无关文法,(1):式子左边只能有一个字符,而且必须是非终结符(2):式子右边可以有多个字符,可以是终结符,也可以是非终结符,8但必须是有限个字符3型文法:又称为正规文法(正规文法又包括左线性文法和右线性文法)(1):式子左边只能有一个字符,而且必须是非终结符(2):式子右边最多有二个字符,而且如果有二个字符必须