0

我正在开发一个适用于 OCR 输出的非英语拼写校正系统。我使用非常大的字典来检查拼写错误并给出建议。

大多数拼写错误是因为字母形式相似。例如ـجـ, ـچـ, ـحـ, ـخـor غ, عand etc. 这些字母也存在于英语中,例如I, land u, v, y.

拼写检查系统为我们要检查的单词提供了一些建议。例如,如果我们输入voga它会建议这些词:

  • volga
  • boga
  • yoga
  • toga

由于 的长度voga是 4,那么我们将只保留 4 个字母的建议。现在因为 OCR 引擎可以检测vy(因为它们的形式相似),我们将选择作为OCR 输出yoga的最佳建议。voga

在我们的语言中,这种选择非常有效。例如,如果我们输入مدپر,将建议这些词:

  • مدارا
  • مدار
  • مدیر
  • مراد

根据我们的集合(在本例中:ـبـ, ـپـ, ـیـand ز, ر, ژand ذ, دand مـ, فـ, قـ)和单词的长度,مدیر将是مدپر.

我通常在 PHP 脚本语言中实现此功能的方式是保持建议的单词长度相同,然后通过替换所有集合(如مدپرفدپرقدپر然后مذپر、等)创建所有可能的拼写错误单词的组合فذپرقذپر然后搜索对于建议列表中的相同单词。但是这种实现方法真的很慢(特别是在大型上下文中)并且几乎没有用。

在 PHP 中实现这种功能的最佳方法或算法是什么?

更新:

生成建议列表的引擎经过优化,通常在建议列表中包含正确的单词。问题是我的系统必须在没有任何人工智能的情况下选择其中一个建议作为正确的词。所以我认为这种方法在我的语言中很好,因为有很多字母具有相似的形式,这就是为什么 OCR 引擎通常会错误地检测单词。但如果有更好的方法,欢迎您提出建议。

4

1 回答 1

1

我仍然认为这个问题太宽泛了,不能在这里问。在我看来,你仍然不知道该怎么做,所以你不应该要求 PHP 解决方案。在我看来,这个问题首先是关于算法解决方案,而不是关于编程或实现。我确信存在许多不同的解决方案,并且由于我们几年前在该领域进行了一项科学研究,因此我将提出一种解决方案,让您了解如何做到这一点。

假设您有一个无效的“OCR 单词”,并且您想从有效单词词典中选择最佳有效单词来替换它。

  1. 从标准建议算法开始。所以你得到了一些候选词。

  2. 现在计算这些词到 OCR 词的“距离”。

  3. 使用计算距离最小的候选。

现在的问题是如何计算两个单词的距离。您可以从汉明距离开始- 但是这个经典算法对于您的情况来说不够好,并且它不会比您从第 1 步中获得的更多,因此您需要做出更适合您的东西。简单地说,您想为类似的符号/字母提供一些奖励。我们使用模糊自动机来解决 DNA 分析的相同情况。在这里写完整的算法会太长,所以如果你需要更多信息,请查看我们的论文。(链接转到 researchgate 存储库。)

您也可以完全跳过步骤 1,并为具有相似性的相似词创建一个全局搜索系统,这也在我们的论文中进行了描述。我会投票支持这种全球方法。

于 2016-08-15T02:27:26.960 回答