一种自然语言语法分析器及其方法

文档序号:6438079阅读:387来源:国知局
专利名称:一种自然语言语法分析器及其方法
技术领域
本发明涉及自然语言的语法分析,特别是涉及一种能够降低复杂度提高准确率的自然语言语法分析器及其方法。
背景技术
传统的自然语言语法分析器的基本工作原理是将特定词性的单词依照句法规则逐步合并为最终的语法分析树。
生成的语法分析树的具体的做法是以一个叶子节点代表一个单词的一个词性;几个连续的叶子节点依照句法规则生成一个中间节点;几个连续的叶子节点或者中间节点依照句法规则生成一个更高层次的中间节点。重复直至最后一个中间节点包括了输入句子的所有单词。一个完整的句子结构就生成了。
传统的自然语言语法分析器使用合并规则时允许重复使用。
典型的语法分析器的数据结构使用一个节点表保存已经生成的节点。对该节点表中的节点使用语法规则。
语法分析时采用穷尽搜索法。搜索过程中,既可以使用传统的句法规则,也可以结合启发式或者统计式规则使最可能正确的结果最先出现。语法分析结束条件一种情况是一个或者几个完整的语法分析树已经生成了;另一种情况是没有生成任何完整的语法分析树,那么就拼凑出最可能的完整的语法分析树。
这种穷尽搜索法的致命缺点是复杂度随单词数目呈指数级增长,直至系统资源耗尽而中断。
当然,语法分析过程中还可以利用优先参数进行裁减。对于语法分析过程中的每一个状态,节点表中有特定数目的节点。应用所有可行的句法规则后,会相应生成一些新的中间接点。但不是将所有这些新的中间接点直接加入到节点表中,而是通过一定的手段从中选择一个最可能是正确的新的中间节点加入到节点表中。这样就不是穷尽搜索了。进行裁减时,其数据结构就是在节点表之外再附加一个候选表。节点表中的节点应用句法规则后生成的新节点首先放进候选表中。候选表中的所有节点都被赋予一个优先参数来描述它是正确的可能性。最终加入节点表中的候选节点就是该候选表中优先参数值最大的节点。
裁减法也会带来下面两个问题一个就是复杂度随单词数目呈指数级增长,导致可能的语法分析树太多;另一个就是如何来确定正确的语法分析树。
综上,如果用裁减法,很多可能的语法分析树都被裁减掉了,根本就没有生成最终的语法分析树;如果用传统的穷尽搜索法,尽管理论上可以产生包括正确语法分析树在内的所有的语法分析树,但是无法保证正确的语法分析树是第一个生成的。由于前面所述的复杂度随单词数目呈指数级增长的难题,程序在生成第一个完整的语法分析树之后,再继续分析时只会使有限数目的新的节点加入到节点表中。所以如果第一个生成的完整的语法分析树不正确的话,就无法保证在剩下的有限步骤内找到正确的语法分析树。
所以在自然语言语法分析的领域中,迫切需要能提出一个新的技术方案,以保证语法分析过程不受计算机有限资源的限制,从而保证正确的语法分析树一定能生成出来。与此同时能够有效的消除复杂度指数级增长的难题。

发明内容
本发明要解决的技术问题是提出一种自然语言语法分析器及其方法,以保证语法分析过程不受计算机有限资源的限制,从而保证能生成出正确的语法分析树,并且能够有效地消除复杂度指数级增长的难题。
本发明所述自然语言语法分析器,包括输入模块,用于存放输入的句子,并通过查找数据库词典,将输入的句子按照单词的各种可能的词性分解成一个个子表;例如子表1,子表2,......,子表N;数据库,用于存放词典资源,为运算处理提供词性比较,确定每个单词在词典中所有可能的词性;子表控制模块,用于子表的保存、调用、排序、查找、索引、子表状态保存以及计算机系统资源调用和分配等控制,将需要处理的子表送到运算处理模块进行分析运算;运算处理模块,包括一个规则库,用于对当前的某一个子表通过与规则库的规则进行比较运算,根据运算结果作出相应处理。如果发现了明显不可能的语言现象,就将该子表丢弃。
本发明所述一种自然语言语法分析方法,包括如下步骤第一步、输入句子,查找每个单词在词典的所有词性,生成子表列表,所述子表列表中每个子表包含输入句子的所有单词,且每个单词只有一个词性;第二步、子表控制模块判断子表列表中是否还有尚未进行运算处理的子表,如果没有,转第五步,如果有,继续;第三步、将该子表放入运算处理模块,与规则库比较进行运算处理,既利用排除规则将肯定错误的子表裁减掉,也利用生成规则合并出新的中间节点;第四步、判断处理过的子表是否可以排除,如果能排除,则返回到第二步;如果不能排除,则将该子表更新并做好标记后,放回到第一步中的子表列表的尾部;第五步、结束。
采用本发明,可以实现在现有计算机性能的前提下,使语法分析运算过程不受计算机有限资源的限制,保证能够正确生成语法分析树,同时能够有效消除复杂度指数级增长的难题,从而提高准确度和实用性。


图1为本发明自然语言分析器的结构示意图;图2为本发明所述语法分析方法流程示意图。
图3为本发明所述语法分析方法的具体例子示意图。
具体实施例方式
图1给出了本发明自然语言分析器的模块结构,包括数据库10、输入模块20、子表控制模块30和运算处理模块40。
数据库10数据库的内容为各种词典资源,存放于硬盘中,在程序运行时可以将其中的一部分调入内存。其中的句法词典11为处理模块提供词性查找功能,用来确定每个单词在词典中所有可能的词性。
输入模块20该模块位于内存中,包含输入缓存区21和子表展开程序22。首先将待处理的输入句子暂时存放在输入缓存区21中;然后子表展开程序22查询数据库10之中的句法词典11获取每个单词的所有可能的词性;最后子表展开程序22将输入句子分解成一个个子表。每个子表交给子表控制模块30保存。
子表控制模块30包括位于内存中的子表控制程序31和位于存储器中的子表文件32;子表控制程序31用于子表的保存、调用、排序、查找、索引、子表状态保存以及计算机系统资源调用和分配等控制,将结果保存子表文件32中。
运算处理模块40该模块位于内存中,包括规则库、分析控制程序41和当前子表分析单元42。分析控制程序41将还需要进行语法分析的子表从子表控制模块中取出来放入当前子表分析单元42之中,然后将当前子表的句子内容与规则库的规则进行比较。如果发现了明显错误的语言现象,就将该子表丢弃;否则,就按照生成规则进行分析,然后将分析结果及其状态标志放回子表控制模块30。
图2是本发明自然语言翻译方法的流程图。
200开始接受所输入句子,就可以进行语法分析运算了;210查找词典,确定每个单词在词典中的所有词性;220按照每个子表包含输入句子的所有单词而且每个单词只有一个词性的规则生成子表列表。其中子表的存储通过调用子表控制模块来实现,最终的结果保存在子表列表中。
230判断子表列表中是否还有需要进行语法分析运算的子表。如果没有,就进入280,程序结束;如果有,就继续;240从子表列表中取出一个需要进行语法分析运算的子表,放入当前子表处理单元中。
250对于当前子表处理单元中的子表,判断此时该表是否完全满足了某种排除规则的所有条件而需要排除掉。如果需要排除掉,就将当前子表处理单元清空,返回230;如果不需要排除掉,就继续;260判断是否可以将该子表的节点合并。
如果能够合并节点,则将合并节点后的子表送回到220中的子表列表里。此时,也可以对合并处理过的子表的属性作出标记。例如,可以针对其应用过的生成规则,作出相应的标记。这样,有多少种可应用的生成规则,就可以对应多少种标记,从而提高了下一轮的分析运算的速度。本发明称这种做法为“广度分析”,意思是先对每一个子表广泛地进行分析运算,然后,在此基础上再反复进行下一轮。当然,本发明还可以采用“深度分析”的做法,这就是如果能够合并节点,则将合并节点后的子表再送回到240中的当前子表处理单元里,再次进行逻辑运算。这样,对该子表反复进行多次排除、合并,直至不能再合并了才转270。
如果判断的结果是该子表不能进行合并了,则直接转270;270根据运算结果对该子表进行更新并作出“结束”标记;将更新的子表送到子表列表的尾部;清空当前子表处理单元。
280结束。
从以上的本发明所述方法可以总结其具有如下的特点排除规则既可以直接应用于代表单词的叶子节点,也可以应用于代表短语或者从句等等的中间节点。
每一轮完整的动作是先将绝对不可能的情形通过排除规则裁减掉,后按照生成规则合并为中间节点,简单地讲就是先裁减后生成;而传统的语法分析使用优先参数进行裁减时,每一轮完整的动作是先按照生成规则合并为中间节点,然后对中间节点计算优先参数,再将优先参数值小的中间节点裁减掉,简单地讲就是先生成后裁减。
本发明语法分析既包括应用排除规则的丢弃过程,也包括传统的应用生成规则的合并过程。这两者是交错重复进行的一轮丢弃过程,接着一轮合并过程,再一轮丢弃过程,再接着一轮合并过程......。这个交错分析过程的结束条件是再也没有任何生成规则可以使得节点继续合并了。
值得一提的是,本发明还可以从信息理论角度来理解。信息理论将信息分成“绝对正确、可能正确、绝对错误”三种情况。传统的语法分析方法将“绝对正确,可能正确,绝对错误”这三种信息全部通过优先参数的途径来使用,难免鱼目混珠;由于优先参数方法本身从理论上讲必然存在着一定程度的信息丢失,所以传统方法在使用绝对错误信息的过程中必然存在一定程度上的信息丢失,也就是没有充分利用绝对错误信息。而本方法对于绝对错误的信息直接使用,发现了具有绝对错误的子表就丢弃,就没有任何信息丢失。另外,传统的语法分析主要是利用生成规则,极少使用排除规则;而本发明方法在充分利用了排除规则的基础上,又完全继承了传统的生成规则,所以总体的有价值信息比传统方法丰富得多。
下面结合图1和图2进一步详细说明本发明。
如背景技术所介绍的现有技术的语法分析运算方法,如果终结条件许可的话,可以产生所有的语法分析运算树,但是也会产生错误的语法分析运算树。通常情况下,错误的分析结果在正确结果之前产生。更糟糕的是,在满足终结条件以前根本就不会产生正确的结果。
本发明为了克服上述现有技术的缺点,其基本解决思路提出了先按句法特性尽可能多地展开为子表,然后再用规则库的规则对子表进行运算处理,包括通过排除规则排除错误子表。
假设一个句子有n个单词,其中的第i个单词有Ni种词性(名词/动词/形容词等等),那么整个句子所有词性的组合总共为Tn=N1·N2·N3·...·Nn.
结合图1和图2,本发明的做法是首先将所有的组合全部展开为Tn个子表,使得每个子表中的每个单词都只有一种词性。
然后依次对每一个子表进行语法分析运算。由于每一个子表中的每个单词只有一个确定的词性,所以对一个子表的语法分析运算要简单得多。
在对每个子表进行传统的语法分析运算的同时,也要利用一系列的排除规则将肯定错误的子表裁减掉。
在生成子表的过程中,由于生成的子表数量大,本发明所述方法在实现时需要一个专门的子表控制模块30。通过所述子表控制模块30的控制、调度和管理,保证语法分析运算过程不受计算机有限资源的限制。
例如内存中放不下时自动完成CPU、内存和磁盘文件之间的交换。假设一个句子生成总共需要生成200个子表,而计算机的内存中无法同时放下100个子表。句子从开始生成的第1个,第2个,......,第99个子表都放在内存中,这时子表控制模块就暂时停止从句子继续生成新的子表的过程;将内存中的第1至第99个子表保存到硬盘文件中;将内存空间释放出来;重新启动从句子继续生成新的子表的过程;这样第100个至第198个子表存放在内存中;子表控制模块又一次暂时停止从句子继续生成新的子表的过程;将内存中的第100至第198个子表保存到硬盘文件中;将内存空间释放出来;重新启动从句子继续生成新的子表的过程......。了解计算机技术的人士都知道,具体的内存与硬盘文件的交换技术可以分为单机环境的文本数据库,客户机-服务器结构的数据库,基于网络结构的分布式数据库等等。
本发明中,排除规则的使用时机既可以在一个子表完全生成以后,也可以在子表的生成过程之中利用已经生成的部分单词的信息进行排除。
例如句子“I know that he likes football.”由于英语语法中不可能出现一个形容词紧靠在一个人称代词前面,所以可以得出一个句法排除规则“形容词+人称代词”。
一种方式是首先将整个句子所有的子表都展开。那么就得到两个子表子表1=“I(人称代词)know(动词)that(形容词)he(人称代词)likes(及物动词)football(名词).”;子表2=“I(人称代词)know(动词)that(连接代词)he(人称代词)likes(及物动词)football.(名词).”;然后依次对两个子表使用排除规则进行分析。对于子表1,“that(形容词)he(人称代词)”就满足句法排除规则“形容词+人称代词”,所以丢弃该子表;对于子表2,没有满足条件的排除规则,改子表2最后分析出正确的语法分析树。
另外一种方式是在子表的生成过程之中边生成边进行排除分析。当句子生成到中间状态“I(人称代词)know(动词)that(形容词)he(人称代词)likes football.”时,已经完成了左边4个单词的词性分配,右边两个单词的词性还没有分配出来。这时进行排除分析,发现已经分配了词性的句子局部“I(人称代词)know(动词)that(形容词)he(人称代词)”之中的“that(形容词)he(人称代词)”满足句法排除规则“形容词+人称代词”,所以丢弃该局部子表。也就是说,不用再考虑右边两个还没有分配词性的单词,就直接丢弃。由此很容易就能明白,如果该句子后面还有由多个单词组成的从句,仅仅依据左边4个单词分配的词性就决定了后面所有可能的子表都必然被丢弃,这样最后生成的子表就比先将子表完全生成然后再分析的子表总数要少很多。
众所周知,类似的句法排除规则还有很多。尤其对于长句子,运用在子表的生成过程之中进行排除分析的方法,能够有效地消除语法分析运算随单词数目呈指数级增长的复杂度。
图3是本发明的一个具体例子,所输入的例句为“they considered him afool”,通过该例句可以进一步说明本发明所具有的独特优点。
如图3-1所示,输入模块20首先将输入的句子“they considered him a fool”暂时存放在输入缓存器21中,然后对句子的每个单词查找数据库10中的句法词典11,确定每个单词在句法词典11中所有可能的词性。其中,只有“fool”这个单词的词性有两种,即名词或者动词。
随后,图3-2中,输入模块20将整个句子所有的单词词性组合展开为一个个的子表,得到两个子表子表1和子表2;保证每个子表中的每个单词只有一个词性。
子表1为they(名词)considered(动词)him(名词)a(冠词)fool(名词);子表2为they(名词)considered(动词)him(名词)a(冠词)fool(动词);所有展开的子表通过子表控制模块30进行管理,它具体负责子表的保存、调用、排序、查找、索引、子表状态参数保存以及计算机系统资源调用和分配等等控制功能。从图3-2中可以看出,刚刚完成分表操作的时候,子表控制模块30中有两个子表子表1和子表2,它们的状态属性都为初始态。而当前子表处理单元42中为空。
从图3-3开始,就开始进入循环过程。每次将子表控制模块30中的第一个需要进行语法分析的子表取出来放进当前子表处理单元42中进行语法分析运算。
首先,将子表控制模块30中的子表1取出来,放进当前子表处理单元42中进行语法分析运算。这样子表控制模块30中就只剩下一个子表2,其状态为初始态。当前子表处理单元对子表1进行语法分析,最终得到了一个完整的语法分析树,即名词短语+动词短语。
图3-4表示的是当前子表处理单元42中的语法分析运算结束后,将分析后的子表1的状态标注为结束,再添加到子表控制模块30的尾部。这样当前子表处理单元42的状态又变为空,而子表控制模块中有两个子表,一个是子表2,其状态为初始态;另一个是子表1,其状态为结束态。
图3-5中,将子表控制模块30中的当前第一个表即子表2取出来,放进当前子表处理单元42中进行语法分析运算。这样子表控制模块30中就只剩下一个子表1,其状态为结束;当前子表处理单元42中的子表2处于初始状态。对其进行语法分析的过程中,发现可以应用一个句法排除规则即“冠词+动词”(DET+V),表明这种“冠词+动词”的现象是绝对不可能形成任何正确完整的语法分析树的,所以整个子表都没有必要再进行任何更进一步的语法分析。所以当前子表处理单元42就将子表2排除掉,不再加入到子表控制模块中。
图3-6表示,当前子表处理单元42变为空后,子表控制模块30中只有一个子表1,其状态为结束。已经没有需要进行语法分析得子表了,此时已经完成所有的语法分析运算,这样整个语法分析过程就结束了。如果前面的语法分析运算过程中已经消除了所有的错误歧义,那么结果中就只有唯一正确的完整的语法分析运算树。如果前面的语法过程中没有完全消除所有的错误的歧义,那么结果中就可能会有多个完整的语法分析运算树,但可以保证其中之一为正确的完整的语法分析运算树。
由于整个语法分析运算过程中,通过子表控制模块30对系统资源进行有效的处理,所以不用担心因为系统资源耗尽而终止语法分析运算过程。所以在应用语法规则的时候可以充分地进行穷尽搜索。这样就保证一定会生成正确的完整的语法分析运算树。
最后所应说明的是以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
权利要求
1.一种自然语言语法分析器,运行在计算机系统中,其特征在于,包括输入模块,用于存放输入的句子,并通过查找数据库词典,将输入的句子按照单词的各种可能的词性分解成一个个子表;数据库,用于存放词典资源,为运算处理提供词性比较,确定每个单词在词典中所有可能的词性;子表控制模块,用于子表的保存、调用、排序、查找、索引、子表状态保存以及计算机系统资源调用和分配等控制,将需要处理的子表送到运算处理模块;运算处理模块,包括一个规则库,对当前的某一个子表通过与规则库的规则进行比较运算,根据运算结果作出相应处理,如果发现了明显不可能的语言现象,就将该子表丢弃。
2.根据权利要求1所述的自然语言语法分析器,其特征在于,所述数据库包括句法词典(11),存放于硬盘中,在程序运行时可以将其中的一部分调入内存。
3.根据权利要求1或2所述的自然语言语法分析器,其特征在于,所述输入模块20位于内存中,包含输入缓存区(21)和子表展开程序(22);所述输入缓存区(21)用于暂时存放待处理的输入句子,所述子表展开程序(22)查询数据库(10)之中的句法词典(11)获取每个单词的所有可能的词性,并将输入句子分解成一个个子表,将每个子表送往子表控制模块(30)保存。
4.根据权利要求1或2所述的自然语言语法分析器,其特征在于,所述子表控制模块(30)包括位于内存中的子表控制程序(31)和位于存储器中的子表文件(32),所述子表控制程序(31)负责子表的调用,排序,查找,索引,子表状态保存以及计算机系统资源调用和分配等控制,将结果保存子表文件(32)中。
5.根据权利要求4所述的自然语言语法分析器,其特征在于,所述运算处理模块(40)位于内存中,包括分析控制程序(41)和当前子表分析单元(42);所述分析控制程序(41)将需要进行语法分析的子表从子表控制模块中取出来,放入当前子表分析单元(42)之中,并对当前子表的句子通过与规则库的规则的比较进行分析运算;如果发现了明显错误的语言现象,就将该子表丢弃;否则,就将分析后的带有状态标志的子表放回到子表控制模块(30)。
6.一种自然语言语法分析方法,首先建立词典库和规则库,所述规则库包括排除规则库和生成规则库,其特征在于,包括如下步骤第一步、输入句子,查找每个单词在词典的所有词性,生成子表列表,所述子表列表中每个子表包含输入句子的所有单词,且每个单词只有一个词性;第二步、子表控制模块判断子表列表中是否还有尚未进行运算处理的子表,如果没有,转第五步,如果有,继续;第三步、将该子表放入运算处理模块,调用规则库进行运算处理;第四步、判断处理过的子表是否可以排除,如果能排除,则返回到第二步;如果不能排除,则将该子表更新并做好标记后,放回到第一步中的子表列表的尾部;第五步、结束。
7.根据权利要求6所述的自然语言语法分析方法,其特征在于,所述生成子表列表的过程中,可以将子表内容与所述规则库中的排除规则相比较,丢弃明显错误的子表。
8.根据权利要求6或7所述的自然语言语法分析方法,其特征在于,所述第四步中,如果处理过的子表不能排除,则与所述规则库中的生成规则相比较,判断是否能进行节点的合并,如果能合并,则在合并后送到第一步中的子表列表中;或者送到第三步中的运算处理模块中继续进行比较运算。
9.根据权利要求8所述的自然语言语法分析方法,其特征在于,所述子表的节点合并后,还包括对合并后的子表的属性作出标记。
10.根据权利要求9所述的自然语言语法分析方法,其特征在于,针对子表合并时应用过的生成规则,对合并后的子表的属性,作出相应的标记。
11.根据权利要求8所述的自然语言语法分析方法,其特征在于,如果判断子表不能进行合并,则根据运算结果对该子表进行更新并作出“结束”标记,将更新的子表送到第一步中的子表列表的尾部。
12.根据权利要求6所述的自然语言语法分析方法,其特征在于,所述子表的生成展开后,首先存放在计算机的内存中,如果所占内存空间超过预先设定的阈值,则将已经生成的所有子表全部保存到硬盘文件中。
13.根据权利要求12所述的自然语言语法分析方法,其特征在于,内存与硬盘文件的交换方式包括单机环境的文本数据库、客户机-服务器结构的数据库、基于网络结构的分布式数据库等等。
14.根据权利要求6、7、9-12任一所述的自然语言语法分析方法,其特征在于,所述对子表的保存、调用、排序、查找、索引、子表状态的保存以及计算机系统资源调用和分配是通过子表控制模块的控制进行的。
全文摘要
本发明公开一种自然语言语法分析器及其方法,所述方法包括步骤输入句子,查找每个单词在词典的所有词性,生成子表列表,所述子表列表中每个子表包含输入句子的所有单词,且每个单词只有一个词性;子表控制模块判断子表列表中是否还有尚未进行运算处理的子表;将该子表放入运算处理模块,与规则库比较进行运算处理,判断处理过的子表是否可以排除,如果能排除,则返回到子表控制模块;如果不能排除,则将该子表更新并做好标记后,放回到子表列表的尾部;本发明可实现在现有计算机性能的前提下,使语法分析运算过程不受计算机有限资源的限制,保证能够正确生成语法分析树,同时能够有效消除复杂度指数级增长的难题,从而提高准确度和实用性。
文档编号G06F17/30GK1519752SQ03100779
公开日2004年8月11日 申请日期2003年1月20日 优先权日2003年1月20日
发明者黄致辉 申请人:黄致辉
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1