You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中是否有方法可比较两个非完全相等字符串的相似度?

PHP字符串相似度量化比对实现方案

PHP原生已内置相关函数可直接实现字符串相似度的量化计算,无需引入第三方依赖,常用实现方案如下:


核心原生函数说明

  • similar_text():直接计算两个字符串的匹配相似度,支持直接返回百分比数值,算法时间复杂度为O(n³),适合短字符串场景。
  • levenshtein():计算两个字符串的编辑距离(即需要多少次增/删/改操作才能将字符串1转为字符串2,数值越小相似度越高),算法时间复杂度为O(m*n),性能优于similar_text(),默认支持最长255字符的字符串比对。

需求实现示例

你需要的str_compare_similarities函数可以基于上述原生函数封装实现,示例代码如下:

<?php
/**
 * 比对两个字符串的相似度
 * @param  string $a 字符串1
 * @param  string $b 字符串2
 * @param  int $algo 比对算法:1=similar_text 2=levenshtein
 * @return float 0~1之间的相似度数值,1为完全匹配
 */
function str_compare_similarities(string $a, string $b, int $algo = 1): float {
    // 空字符串边界处理
    if ($a === $b) return 1.0;
    if (empty($a) || empty($b)) return 0.0;

    if ($algo === 1) {
        similar_text($a, $b, $percent);
        return round($percent / 100, 3);
    }

    $editDistance = levenshtein($a, $b);
    $maxLength = max(mb_strlen($a), mb_strlen($b));
    return round(1 - $editDistance / $maxLength, 3);
}

// 测试用例
$a = "Stack Overflow";
$b = "Stack-Overflow";
$result = str_compare_similarities($a, $b); 
// 输出结果为0.923,符合预期的近似量化结果
?>

注意事项

  • 原生函数默认按字节计算相似度,如果需要比对中文字符串,建议先将字符串转为UTF-32编码统一字符长度,或引入中文分词库基于分词结果做余弦相似度计算,结果会更准确。
  • 长文本相似度比对建议使用levenshtein算法,或基于分词的向量空间模型实现,避免similar_text的性能问题。

内容的提问来源于stack exchange,提问作者Gowire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:24:03