2015-07-03 55 views
4

我正在学习php的levenshtein function在小redis实例中创建搜索以获得匹配,即使在提交的搜索词中存在拼写错误。虽然其中大部分是相当自我解释,但我很努力想要如何最好地使用三种不同的cost参数。PHP的levenshtein函数比较字符串的代价是什么?

int levenshtein (string $str1 , string $str2 , int $cost_ins , int $cost_rep , int $cost_del) 

有文档

另一个变量将定义插件的成本三个附加参数,替换和删除操作在一个简短的说明。这比变种更具普遍性和适应性,但效率不高。

但是,这并没有解决我的不理解。有人可以解释我如何使用成本参数来改善结果/表现吗?

回答

1

在机器学习,一个成本函数是,你要尽量减少,以达到最佳效果的功能。例如,当机器执行步骤A,B和C时,成本函数将计算执行这些步骤的成本。术语成本连接到一个数学函数,将评估您结果性能

例如,当计算机执行步骤B,C和A时,成本函数会告诉您是否得到比上一步更好或最差的结果。

阅读该文档,你可以看到,

的Levenshtein距离被定义为必须更换,插入或删除转化成STR1 STR2字符的最小数量。

那是你的成本函数:尽量减少在方面的距离替代删除插入

每次算法必须执行其中一项任务时,它会累加一项成本该操作。最后3个参数可让您决定每个操作的值。在比较结束时,您将获得最终值,即功能的成本。如果该值是小于而不是定义的阈值,则与假定该函数返回true相同。如果结果大于您的阈值,则意味着它的成本高于您允许一个字符串等于另一个字符串的成本。

0

我不知道它是如何帮助您寻找什么,但我可以解释这些成本如何工作。

默认情况下,插入的成本,替换和删除操作有1

值这意味着

字符串答:您好 字符串B:helloo

莱文斯坦($ stringA,$ stringB)= 1,因为它需要1个“插入”操作才能使字符串A ==字符串B.另外,因为插入的开销是1.那么为什么levenshtein返回1.如果将“insert costs”设置为2,则得到2 。

同样的想法适用ŧ o更换和删除操作。

请记住,较低的莱文斯坦号,才能使字符串A ==字符串B.

0

Levennshtein函数计算两个字符串之间的编辑距离的操作较少。编辑距离是将一个字符串转换为另一个字符串所需的插入/替换/删除操作的最小成本。默认情况下,PHP对所有3个操作应用相同的成本。如果您想更改默认成本,则可以使用这3个参数。

看到更多的细节在这里:https://en.wikipedia.org/wiki/Edit_distance

相关问题