使用php代码找到两个字符串之间的百分比似乎很容易,我只是使用
int similar_text ( string $first , string $second [, float &$percent ]
但假设我有两个字符串,例如:
1-在药物测试失败后,赞助商退回莎拉波娃
2-玛丽亚莎拉波娃在澳大利亚网球公开赛上未通过毒品测试使用similar_text
工具,我得到了53.7%,但它没有任何意义,因为两个字符串正在谈论“Sharapova”的“药物测试失败”,百分比应该超过53.7%。
我的问题是:有没有办法找到两个字符串之间真正的相似百分比?
答案 0 :(得分:1)
我已经实现了几种搜索重复项的算法,它们非常相似。
我通常使用的方法如下:
在我看来,在实施步骤1)时,您将能够大大改善您的结果。
标准化算法的例子(我使用"赞助商在药物测试失败后退回莎拉波娃"详情):
1)小写字符串
- > "赞助商在药物测试失败后退回莎拉波娃"
2)在单词中爆炸字符串
- > [赞助商,回来,离开,离开,莎拉波娃,之后,失败,吸毒,测试]
3)删除嘈杂的单词(如命题,例如in,for,that,this等)。此步骤可根据您的需求进行定制
- > [赞助商,莎拉波娃,失败,药物,测试]
4)按字母顺序对数组进行排序(可选,但这可以帮助实现算法...)
- > [药物,失败,莎拉波娃,赞助商,测试]
将相同的算法应用于其他字符串,您将获得:
[澳大利亚,毒品,失败,玛丽亚,开放,莎拉波娃,测试]
这将帮助您详细说明一个聪明的算法。例如:
$words1 = ['drug', 'failed', 'sharapova', 'sponsors', 'test'];
$words2 = ['australian', 'drugs', 'failed', 'maria', 'open', 'sharapova', 'test'];
$nbWords1 = count($words1);
$stringSimilarity = 0;
foreach($words1 as $word1){
$max = null;
$similarity = null;
foreach($words2 as $word2){
similar_text($word1, $word2, $similarity);
if($similarity > $max){ //1)
$max = $similarity;
}
}
$stringSimilarity += $max; //2)
}
var_dump(($stringSimilarity/$nbWords1)); //3)
运行此代码将为您提供84.83660130719。不错,我想^^。我相信这个算法可以进一步完善,但这是一个好的开始......在这里,我们基本上计算每个单词的平均相似百分比,你可能想要一个不同的最终方法......根据你的需要调整; - )