可以将Earley解析器做成类似于DFA的Levenshtein自动机算法的模糊解析器吗?


10

有一种方法可以使用DFA和输入字词的运行时构造的Levenshtein自动机来执行模糊解析(即使输入错误也可以接受字符串)。可以用Earley解析器完成类似的事情吗?我发现很难理解算法,更不用说回答这个问题了。


1
恩,PDA禁止使用NFA进行许多操作,因此原则上应该可行。改编Earley似乎是死记硬背的做法,因为我们被允许在项目中使用计数器。我想念什么吗?
拉斐尔

@Raphael是的,这是一般想法。我的答案更长,因为很难评估用户知道或不知道的内容。
babou 2015年

plz引用了“ Levenshtein自动机”的参考/草图定义。知道可能符合条件的一种,但是您指的是哪一种呢?
vzn 2015年

Answers:


8

答案是肯定的。但是,我不会使用Earley解析器执行此操作,因为有一些具有相同功能的简单解析器。

基本上,Earley解析器属于一个通用的上下文无关解析器家族,当语法不明确时,该解析器为给定的字符串生成所有可能的解析。

有两种(至少)了解这些解析器的方式:

  • 作为与输入字符串语法相对应的下推自动机的动态编程解释;

  • 作为语法与有限状态自动机相交的构造。

解析单个字符串时,要考虑的有限状态自动机是线性自动机,它仅识别 要解析的字符串,一次识别一个符号(状态数为| w | + 1)。如果应用FA的跨产品建设一个和CF garmmar g ^(酒吧希勒尔,玻璃市,沙米尔1961年),你会得到一个新的CF文法这是一个新的语法˚F产生大号w|w|+1个一个GF。通常被忽略的有趣之处在于, F保留了 G使用的解析树。大号一个大号GFG,直到非终端重命名(由于交叉产品)。

因此,如果FA 仅生成您的输入字符串,则语法F 将仅生成该字符串(如果它位于LG )中,否则将生成空语言)。此外,它使用G可以用来生成它的所有解析树来生成它。一个F大号GG

该语法通常称为共享解析林,所有常规CF解析算法或多或少是跨产品构造的优化版本,无论是CYK,Earley,广义LR还是LL或其他。所以我所说的也适用于他们。F

但是,正如您所看到的,如果有人对此感兴趣,则可以推广到解析整个常规集。

那正是你的问题。你有一个字符串。要分析它由一个有限状态转换器定义了一些变化,而你的情况是,产生一些给定范围内的所有字符串的换能器的Levenshtein编辑距离 w ^(但换能器的起源是不重要的)。这些字符串的集合是可以由FA定义的常规集合,其加权转换可以计算每个字符串的编辑距离。ww

如果使用语法进行叉积,则会得到共享的解析森林语法F,该语法生成交点中的所有字符串。此外,您将获得某些规则的权重,以便可以计算每个接受的字符串的编辑距离。GF

如果需要,可以将其用于仅使弦保持最小距离。

但是,由于与有限状态机的组合是关联的,因此可以稍微改善一下。

GwΣ

容易修剪该构造以获得与以前相同的结果,但是最好的方法是控制交叉点的构造,例如包括Earley在内的文献中大多数解析器使用的动态编程组织,并使用它来避免生成通过计算距离并在超出期望阈值时中止任何计算路径来制定无用规则。动态编程还可以用于直接计算到输入的距离最短的字符串的解析森林(或解析树)。


认为这是有帮助的,但也可能对问题“读得太多”,因此说“这恰恰是您的问题”之类的话实际上并不太准确。您提出了一个不确定的问题,没有严格地形式化,而是(试图?)将其自己形式化。可能有不止一种方式来使最初有点模糊的想法正式化。认为首先仔细定义Levenshtein DFA构造会做什么(有一些已知/已调查,但我们正在谈论的是什么?),然后解释如何将此概念推广到CFL。
vzn 2015年

1
我实际上给出了相互补充的不同形式。我没有涉及到一些细微之处,例如过程中权重的确切使用,这取决于您想要获得的精确结果。我的目的不仅是给出对我自己的观点兴趣不大的答案,而且是对问题进行更广泛的理解。使用的编辑距离的选择是无关紧要的,它适用于可以用加权有限状态传感器表示的任何内容。
2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.