我们假设我有这样的字符串(它的PHP和德语,但技术和语言都不重要):
$longString1 = 'Aber Max v. maex war nicht da.';
$longString2 = 'Von Mäx Maimilian war auch nicht da.';
$longString3 = 'Grüner Apfel';
$longString4 = 'Maximilian von Maex war da!';
$name = 'Maximilian von Mäx';
了解$ longstring1,例如
Max
是Maximilian
的缩写(表示它共享前3个字母)v.
是von
的缩写(表示它首先分享第一个字母并位于Mäx
之前)maex
等于Mäx
如果一个人不关心案例并且ä
提前替换所有ae
如何估算 $name
中是否存在$longString
?
我知道PHP中存在的所有实现,如Levenshtein,SimilarText等,以计算两个给定字符串的相似性 - 但我不知道如何识别Max v. saex
作为$ longString1与我的$name
比较有趣。
我正在寻找一个返回的函数:
function ($name, $longString) {
return $similarity;
// returns ~0.6 for $longString1
// returns ~0.7 (of 1) for $longString2
// returns 0 (of 1) for $longString3
// returns 1 (of 1) for $longString4
}
** 更新 **
我知道,例如Levenshtein计算两个字符串之间的相似度,但它会为这种简化情况带来巨大的差异:
$longString1 = 'Max da.'; // pretty similar
$longString2 = 'Max war heute nicht da.'; // not really similar
$name = 'Max';
所以这是一个两步的要求:
我对第1步感兴趣。