编程语言
首页 > 编程语言> > php – 将单词拼写错误的位置放置点

php – 将单词拼写错误的位置放置点

作者:互联网

我正在用PHP创建一个Web应用程序,人们可以尝试翻译他们需要为学校学习的单词.

例如,有人需要用英语将荷兰语’weer’翻译成’weather’,但不幸的是他输入’是否’.因为他几乎输入了正确的单词,我想给他另一个尝试,点”.在他犯错误的地方:

Language A:   weer
Language B:   weather
Input:        whether
Output:       w..ther

或者,例如

Language A:   fout
Language B:   mistake
Input:        mitake
Output:       mi.take

要么:

Language A:   echt
Language B:   genuine
Input:        genuinely
Output:       genuinely (almost good, shorten the word a little bit)

但是,如果输入与所需的翻译有太大的不同,我不希望得到像……..的输出.

我听说Levenshtein距离,我想我需要一个与那个算法很相似的算法,但我不知道如何在正确的位置放置点,而不是回应要完成多少操作.

那么,如何在有人犯错误的地方以点的形式返回拼写错误的单词呢?

解决方法:

首先,看看Levenshtein algorithm on wikipedia.
然后继续查看文章页面上的示例和结果矩阵:

                *k*     *i*     *t*     *t*     *e*     *n*
        >0       1       2       3       4       5       6 
*s*      1      >1       2       3       4       5       6 
*i*      2       2      >1       2       3       4       5 
*t*      3       3       2      >1       2       3       4 
*t*      4       4       3       2      >1       2       3 
*i*      5       5       4       3       2      >2       3 
*n*      6       6       5       4       3       3      >2 
*g*      7       7       6       5       4       4      >3 

距离位于矩阵的右下角,d [m,n].但是从那里开始
现在可以跟踪回溯矩阵左上角的最小步骤d [1,1].您可以在每个步骤中向左,向左或向上,无论哪个路径最小化.
在上面的示例中,您将找到标记为“>”的路径体征:

  s i t t i n g      k i t t e n
0 1 1 1 1 2 2 3    0 1 1 1 1 2 2 3
  ^       ^   ^      ^       ^   ^
  changes in the distance, replace by dots

现在你可以找到距离变化的最小路径d [i,j](在上面的例子中用^标记),对于你在第一个(或第二个)单词中放置的那些字母,在位置i处有一个点(或j).

结果:

  s i t t i n g      k i t t e n
  ^       ^   ^      ^       ^   ^
  . i t t . n .      . i t t . n . 

标签:php,algorithm,levenshtein-distance
来源: https://codeday.me/bug/20190527/1159791.html