下面是 PHP 中计算字符串相似度的函数代码的完整攻略。
下面是 PHP 中计算字符串相似度的函数代码的完整攻略。
1. 了解字符串相似度计算方法
常用的字符串相似度计算方法有:莱文斯坦距离、Jaccard系数、余弦相似度等。
- 莱文斯坦距离:指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。允许的编辑操作包括插入、删除、替换。
- Jaccard系数:指两个集合的交集大小除以它们的并集大小。它衡量的是两个集合之间的相似性,取值范围在0到1之间。
- 余弦相似度:是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异程度的大小。
以上这几种方法在实际中均有广泛的应用,不同的场景建议选用不同的算法计算相似度。
2. 编写字符串相似度计算函数
下面以莱文斯坦距离为例,写出计算函数代码:
function levenshtein_distance(string $a, string $b): int {
$len_a = mb_strlen($a);
$len_b = mb_strlen($b);
$d = array();
for ($i = 0; $i <= $len_a; $i++) {
$d[$i][0] = $i;
}
for ($j = 0; $j <= $len_b; $j++) {
$d[0][$j] = $j;
}
for ($i = 1; $i <= $len_a; $i++) {
for ($j = 1; $j <= $len_b; $j++) {
$cost = (mb_substr($a, $i - 1, 1) !== mb_substr($b, $j - 1, 1));
$d[$i][$j] = min(
$d[$i - 1][$j] + 1,
$d[$i][$j - 1] + 1,
$d[$i - 1][$j - 1] + $cost
);
}
}
return $d[$len_a][$len_b];
}
莱文斯坦距离的计算原理不再赘述,这里直接解释一下上述代码的实现:
$a
和$b
分别表示需要比较的两个字符串。- 首先获取
$a
和$b
的长度,用于后面的循环操作。 - 声明一个二维数组
$d
,并初始化第一行和第一列为$i
和$j
的值。 - 接下来用两重循环遍历
$a
和$b
中的每个字符,计算莱文斯坦距离并存储在$d
中。 - 最后返回
$d
数组中的最后一个元素就是两个字符串的莱文斯坦距离。
3. 调用计算函数并获取结果
使用该函数计算出两个字符串的距离后,可以将距离值进行归一化,转换为相似度值,例如:
$similarity = 1 - levenshtein_distance('string1', 'sting2') / max(strlen('string1'), strlen('string2'));
echo $similarity;
上述代码中,我们使用 levenshtein_distance()
函数获取字符串 “string1” 和 “string2” 之间的距离,并将其归一化得到相似度值,最后将值存储在 $similarity
变量中,并输出结果。
4. 示例说明
下面举两个例子说明如何使用该函数计算字符串相似度。
示例 1
假设有两个字符串分别为 str1 = 'Hello, World!'
和 str2 = 'Halo,world!'
,需要计算这两个字符串的相似度,可以采用以下方式:
$similarity = 1 - levenshtein_distance($str1, $str2) / max(strlen($str1), strlen($str2));
echo $similarity; // 输出:"0.60975609756098"
上述代码中,我们调用 levenshtein_distance()
函数获取字符串 str1
和 str2
之间的距离,并将其归一化得到相似度值为 0.60975609756098
。
示例 2
假设有两个字符串分别为 str1 = 'I have a dream.'
和 str2 = 'You have a dream too.'
,需要计算这两个字符串的相似度,可以采用以下方式:
$similarity = 1 - levenshtein_distance($str1, $str2) / max(strlen($str1), strlen($str2));
echo $similarity; // 输出:"0.52941176470588"
上述代码中,我们调用 levenshtein_distance()
函数获取字符串 str1
和 str2
之间的距离,并将其归一化得到相似度值为 0.52941176470588
。
以上就是 PHP 中计算字符串相似度的函数代码的完整攻略。
本文标题为:PHP中计算字符串相似度的函数代码
基础教程推荐
- 通过PHP实现用户注册后邮箱验证激活 2023-05-02
- PHP获取当前时间不准确问题解决方案 2023-04-25
- php实现简易计算器 2023-04-25
- PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC 2023-04-01
- php实现记事本案例 2023-05-02
- Laravel5.1 框架关联模型之后操作实例分析 2023-03-19
- 浅析php如何实现爬取数据原理 2022-11-18
- 基于thinkphp6.0的success、error实现方法 2023-03-12
- PHP实现判断数组是一维、二维或几维的方法 2024-01-16
- PHP遍历数组的6种方式总结 2022-09-12