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() 函数获取字符串 str1str2 之间的距离,并将其归一化得到相似度值为 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() 函数获取字符串 str1str2 之间的距离,并将其归一化得到相似度值为 0.52941176470588

以上就是 PHP 中计算字符串相似度的函数代码的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP中计算字符串相似度的函数代码 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】

    PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】 在PHP开发中,设计模式是一种很常见的编程思想。设计模式是对软件开发中经常出现的问题得出的通用解决方案。下面我将详细讲解PHP中三种常用的设计模式:单例模式、工厂模式、观察者模式。 单例模式 单例模式是一种创建型模式,它的目的是保证一个类只有一个实例,而且提供了一个全局访问该实例的方法。下面是…

    PHP 2023年5月23日
    00
  • php+js实现百度地图多点标注的方法

    下面是“php+js实现百度地图多点标注的方法”的完整攻略。 准备工作 在开始前,我们需要准备以下工作:- 注册百度地图开发者账号,并获取ak(ak是使用百度地图API的必要参数)- 下载最新版的百度地图JavaScript API- 在项目中添加百度地图API的引用 实现方法 1. 单个标注点的实现 实现单个标注点很简单,只需要在html代码中添加一个带有…

    PHP 2023年5月26日
    00
  • 日常整理PHP中简单的图形处理(经典)

    日常整理PHP中简单的图形处理(经典) 在PHP中,图形处理是很常见的需求,为了使图形更加美观或者更加符合需求,我们通常需要对图形进行处理和调整。本文将介绍一些PHP中常用的图形处理方法和技巧,帮助读者更好地实现自己需要的图形。 一、生成缩略图 有时候我们需要对一张图片进行缩放处理,通常是生成一个缩略图,使得图片在浏览时不会影响用户的网络和用户体验。PHP中…

    PHP 2023年5月23日
    00
  • matlab实现表盘法随机选择的方法

    下面是关于如何用Matlab实现表盘法随机选择的方法的完整攻略。 1. 背景介绍 表盘法是一种随机选择的方法,主要用于在一定范围内取等概率的随机数。在Matlab中,可以通过以下步骤进行实现。 2. 实现步骤 2.1 计算表盘单位角度 首先,需要计算表盘单位角度,即每个数字所占的角度。可以通过以下公式计算: angle = 360 / n 其中,n为数字的个…

    PHP 2023年5月27日
    00
  • 小程序实现抽奖动画

    实现小程序抽奖动画,需要以下步骤: 步骤一:制作转盘样式 在 WXML 文件中,使用 canvas 标签绘制一个圆形,作为抽奖转盘的样式: <canvas canvas-id="canvas-turntable" style="width: 100%;height: 100%;"></canvas&g…

    PHP 2023年5月23日
    00
  • php解决安全问题的方法实例

    PHP解决安全问题的方法实例 背景介绍 PHP是一种广泛应用于WEB开发的编程语言。然而,在使用PHP时,安全问题往往会成为开发者最为关注的问题之一,如SQL注入、跨站脚本攻击、文件上传漏洞等。那么,如何解决这些安全隐患,保障自己的项目不被黑客攻击呢?接下来,将详细讲解PHP解决安全问题的方法实例。 实例演示 1. 防止SQL注入 在PHP中,如果直接拼接S…

    PHP 2023年5月24日
    00
  • php数据类型判断函数有哪些

    在PHP中,我们可以使用多种函数来检查变量的数据类型,这些函数可以帮助我们在使用变量前判断变量的类型,防止出现意想不到的错误。下面是PHP中用来检查数据类型的函数: 1. is_int() is_int()函数用来判断一个变量是否是整数,如果是整数则返回true,否则返回false。以下是is_int()函数的示例代码: $a = 123; if (is_i…

    PHP 2023年5月25日
    00
  • PHP数学运算函数大汇总(经典值得收藏)

    【PHP数学运算函数大汇总(经典值得收藏)】是一篇介绍PHP数学运算函数的文章,文章共介绍了14个PHP数学运算函数的用法。下面为您详细讲解该文章的完整攻略。 一、精选14个PHP数学运算函数 该文共介绍了14个PHP数学运算函数,分别是: ceil():向上取整,对一个数字进行上舍入; floor():向下取整,对一个数字进行下舍入; round():四舍…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部