我正在尝试使用NLTK中的Earley解析器来解析句子,例如:
如果日期在12/21/2010之前,则序列= 10
为此,我正在尝试编写CFG,但问题是我需要将日期和整数的一般格式作为终端,而不是特定值.有没有办法将生产规则的右侧指定为正则表达式,这将允许这种处理?
就像是:
S -> '[0-9]+'
Run Code Online (Sandbox Code Playgroud)
这将处理所有整数.
我知道Perl的"Marpa" Earley解析器有很好的错误报告.
但我无法在其文档中或通过谷歌搜索找到它是否有错误恢复.
例如,大多数C/C++编译器都有错误恢复,用于报告多个语法错误,而其他编译器通常会在第一个错误时停止.
我实际上正在解析自然语言,并想知道在输入的一部分失败之后是否有重新同步和恢复解析的方法.
例如,对于那些可以理解它的人:
我正用老挝语解析音节.在老挝,一些元音是变音符号,它们被编码为单独的字符并在前一个辅音上方呈现.在解析来自老挝维基百科的随机文章时,我遇到了一些文本,其中这样的元音加倍.这在老挝正字法中是不允许的,所以必须是拼写错误.但我知道,在几个字符内,文字再次好.
无论如何,这是一个真实的例子,它引起了我对错误恢复或与令牌流重新同步的普遍兴趣.
我设法创建了Earley识别器,一切正常.我有各种适当的情况.但我只能用它来决定语法是否接受单词.如何解析?我需要一些文章或解释,似乎我需要创建与形成新情况的情境的关联.任何帮助,将不胜感激.
我的实现完全基于:http://www.cs.uvic.ca/~nigelh/Publications/PracticalEarleyParsing.pdf