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