我正在开发一个适用于 OCR 输出的非英语拼写校正系统。我使用非常大的字典来检查拼写错误并给出建议。
大多数拼写错误是因为字母形式相似。例如ـجـ
, ـچـ
, ـحـ
, ـخـ
or غ
, ع
and etc. 这些字母也存在于英语中,例如I
, l
and u
, v
, y
.
拼写检查系统为我们要检查的单词提供了一些建议。例如,如果我们输入voga
它会建议这些词:
volga
boga
yoga
toga
由于 的长度voga
是 4,那么我们将只保留 4 个字母的建议。现在因为 OCR 引擎可以检测v
为y
(因为它们的形式相似),我们将选择作为OCR 输出yoga
的最佳建议。voga
在我们的语言中,这种选择非常有效。例如,如果我们输入مدپر
,将建议这些词:
مدارا
مدار
مدیر
مراد
根据我们的集合(在本例中:ـبـ
, ـپـ
, ـیـ
and ز
, ر
, ژ
and ذ
, د
and مـ
, فـ
, قـ
)和单词的长度,مدیر
将是مدپر
.
我通常在 PHP 脚本语言中实现此功能的方式是保持建议的单词长度相同,然后通过替换所有集合(如مدپر
、فدپر
、قدپر
然后مذپر
、等)创建所有可能的拼写错误单词的组合فذپر
,قذپر
然后搜索对于建议列表中的相同单词。但是这种实现方法真的很慢(特别是在大型上下文中)并且几乎没有用。
在 PHP 中实现这种功能的最佳方法或算法是什么?
更新:
生成建议列表的引擎经过优化,通常在建议列表中包含正确的单词。问题是我的系统必须在没有任何人工智能的情况下选择其中一个建议作为正确的词。所以我认为这种方法在我的语言中很好,因为有很多字母具有相似的形式,这就是为什么 OCR 引擎通常会错误地检测单词。但如果有更好的方法,欢迎您提出建议。