PHP中计算字符串相似度的函数代码

yizhihongxing

下面是 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读取PDF内容配合Xpdf的使用

    下面我就来详细讲解“PHP读取PDF内容配合Xpdf的使用”的完整攻略。 什么是Xpdf Xpdf是一款开源的PDF阅读器,它提供了一系列的命令行工具,可以用于进行PDF解析、提取等操作。其中最常用的两个工具是pdfinfo和pdftotext,前者用于获取PDF文件的基本信息,后者用于将PDF文件转换为文本文件。 PHP读取PDF内容的基本步骤 通过PHP…

    PHP 2023年5月26日
    00
  • php cli模式学习(PHP命令行模式)

    以下是关于“PHP CLI模式学习(PHP命令行模式)”的完整攻略。 什么是PHP CLI模式? CLI(Command Line Interface)模式是指在命令行(Windows下的cmd.exe或Linux、macOS下的终端)中运行PHP脚本,而非通过Web服务器(如Apache)来解析脚本。这意味着我们可以在不依赖Web服务器的情况下运行和测试P…

    PHP 2023年5月23日
    00
  • php随机抽奖实例分析

    下面是关于“PHP随机抽奖实例分析”的完整攻略,包括步骤、代码示例和注意事项等: 1. 确定随机抽奖奖项及概率 在进行随机抽奖之前,需要确定参与抽奖的奖项及其对应的概率。通常,我们会给不同的奖项赋予不同的概率,以保证公平性和悬念。 比如,我们设置了三个奖项:一等奖、二等奖和三等奖,并分别设置其中奖概率为10%、30%和60%。 2. 开始抽奖 在确定奖项及概…

    PHP 2023年5月23日
    00
  • 浅谈PHP设计模式的备忘录模式

    简介: 备忘录模式,属于行为型的设计模式。在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。备忘录模式顾名思义,就是存档功能,类似Git工具,每次提交都相当于一次备份。主要有一下角色构成Memento —— 负责存储 Originator 的 唯一内部状态 ,它可以包含: string,n…

    PHP 2023年4月18日
    00
  • 微信小程序canvas写字板效果及实例

    微信小程序canvas写字板效果及实例 概述 在微信小程序中,使用canvas可以实现很多有趣的效果,如播放动画、绘制图形等等。其中,canvas写字板效果可以让用户在小程序中手写文字,增加用户体验和交互性。在本教程中,我们将详细讲解如何使用canvas实现写字板效果,并提供两个示例说明。 步骤 第一步:创建画布 在小程序页面中添加canvas标签,并设置宽…

    PHP 2023年5月23日
    00
  • 详解PHP多个进程配合redis的有序集合实现大文件去重

    我来详细讲解一下 “详解PHP多个进程配合redis的有序集合实现大文件去重”的攻略。 背景 在处理大规模文件去重时需要考虑处理速度和去重效果,同时需要考虑内存消耗问题,因此我们可以使用多个进程进行处理,并使用 Redis 的有序集合功能进行去重。这样可以保证较高的处理效率,同时也能保证内存使用较小。 需求 大规模的文件去重,需要使用多个进程进行处理。 文件…

    PHP 2023年5月27日
    00
  • PHP中的表达式简述

    下面是关于PHP中的表达式简述的攻略: 什么是表达式 在编程中,表达式是由变量、常量、操作符和函数组合而成的可求值的代码片段。表达式的运行结果称为“值”。 PHP中的表达式分类 算术表达式:由一个操作符和一个的或多个操作数组成的表达式,可以进行加、减、乘、除、模等运算。 示例: $a = 10; $b = 5; $c = $a + $b; // $c 的值为…

    PHP 2023年5月23日
    00
  • php函数array_merge用法一例(合并同类数组)

    当我们需要合并同类数组时,array_merge()函数是一个很有用的工具。在本文中,我们将详细讲解array_merge()函数的用法,并提供两个示例说明。 一、array_merge()函数说明 array_merge()函数可以将一个或多个数组合并成一个数组。合并后的数组包含所有的输入数组的值,键名是自动分配的。如果输入的两个或更多个数组中具有相同键名…

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