我需要解析一个句子。现在我有一个实现的 Earley 解析器和它的语法。当一个句子没有拼写错误时,一切都很好。但问题是我必须处理的很多句子都非常嘈杂。我想知道是否有一种将解析与纠错相结合的算法?可能的错误是:
- 拼写错误 'cheker' 而不是 'checker'
- 像“拼写检查器”而不是“拼写检查器”这样的拼写错误
- 像“Ear par”这样的收缩而不是“Earley parser”
如果你知道一篇可以回答我的问题的文章,我会申请一个链接。
我需要解析一个句子。现在我有一个实现的 Earley 解析器和它的语法。当一个句子没有拼写错误时,一切都很好。但问题是我必须处理的很多句子都非常嘈杂。我想知道是否有一种将解析与纠错相结合的算法?可能的错误是:
如果你知道一篇可以回答我的问题的文章,我会申请一个链接。
我假设您正在使用在 Earley 解析器之前应用的标记器(或词法分析器)阶段,即将输入字符串拆分为标记并在字典中查找每个标记以确定其词性 (POS) 标记的算法(s):
John --> PN
loves --> V
a --> DT
woman --> NN
named --> JJ,VPP
Mary --> PN
应该可以在该阶段构建某种近似字符串查找(又名模糊字符串查找),因此当它出现拼写错误的标记时,例如“lobes”而不是“loves”,它不仅会识别标签通过精确的字符串匹配找到('lobes' 作为 'lobe' 的名词复数),但也有形状相似的标记('loves' 作为动词 'love' 的第三人称单数)。
这意味着您通常会为每个令牌获得更多的候选标签,因此在解析过程中可能会获得更多的解析结果。这是否会产生所需的结果取决于语法的综合程度,以及解析器在呈现许多可能的解析树时识别正确分析的能力。概率解析器可能对此更好,因为它为每个候选解析树分配一个概率(或置信度分数),可用于选择最可能(或最佳)的分析。
如果这是您想尝试的解决方案,有几种可能的实施策略。首先,如果标记化和标记是作为简单的字典查找执行的(即以词法分析器的方式),您可以简单地为字典使用能够实现近似字符串匹配的数据结构。近似字符串比较的一般方法在近似字符串匹配算法中进行了描述,而在较大字典中查找近似字符串的方法在快速比较字符串与 Java 中的集合中进行了讨论。
但是,如果您使用实际的标注器,而不是词法分析器,即除了字典查找之外还执行POS 消歧的东西,您将不得不在该标注器中构建近似的字典查找。必须有一个字典查找功能,用于在应用消歧之前生成候选标签,在标注器的某处。该字典查找必须替换为启用近似字符串查找的字典。