我正在尝试构建一个拼写校正器,它不仅提供选项列表,而且根据发生的字符替换、删除等类型对它们进行概率排名。
基本上我有一个输入和输出字符串,我想要一个通过拼写错误映射到另一个的概率分数。
我的一个想法是使用 Damerau-Levenshtein 编辑距离,但不是使用每个错误的固定成本,而是从错误表中可变地选择成本。这些成本也是概率性的,因此不需要在 Damerau-Levenshtein 的案例陈述中求和,而是需要是一个乘积(错误的联合概率)。
我的另一个想法是将拼写错误视为传感器上的隐马尔可夫模型,即通过沿隐马尔可夫模型中的边缘定义错误类型,并为这些边缘分配概率权重。给定拼写错误的概率将是导致消耗两个字符串(正确字符串和错误字符串)的边权重的乘积。
其他地方已经这样做了吗?也许这两种技术是等效的,但我首先想把这个想法提出来,看看其他人的想法。
有人向我提到的一件事是:为什么不使用变压器?在我的用例中,良好的执行速度是必要的。
我已经研究一种计算距离、相似性和字符串对齐的创新方法一段时间了,如果它对你有用的话:
https://github.com/pedrohcdo/PedroThermoDistance
如果你也可以分享一下,我不久前就提供了这个方法,我给它起的名字是PedroThermoDistance&Similarity,它是一个主要受Levenshtain和Damerau-Levenshtain启发的方法,但它更进一步。