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