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

similar_text — 计算两个字符串的相似度
int similar_text ( string $first , string $second [, float &$percent ] )
$first 必需。规定要比较的第一个字符串。
$second 必需。规定要比较的第二个字符串。
$percent 可选。规定供存储百分比相似度的变量名。

两个字符串的相似程度计算依据 Oliver [1993] 的描述进行。注意该实现没有使用 Oliver 虚拟码中的堆栈,但是却进行了递归调用,这个做法可能会导致整个过程变慢或变快。也请注意,该算法的复杂度是 O(N**3),N 是最长字符串的长度。

比如我们想找字符串abcdefg和字符串aeg的相似度:

 代码如下 复制代码

$first = "abcdefg";
$second = "aeg";
 
echo similar_text($first, $second);结果输出3.如果想以百分比显示,则可使用它的第三个参数,如下:

$first = "abcdefg";
$second = "aeg";
 
similar_text($first, $second, $percent);
echo $percent;

similar_text函数的使用及实现过程。similar_text() 函数主要是用来计算两个字符串的匹配字符的数目,也可以计算两个字符串的相似度(以百分比计)。与 similar_text() 函数相比,我们今天要介绍的 levenshtein() 函数更快。不过,similar_text() 函数能通过更少的必需修改次数提供更精确的结果。在追求速度而少精确度,并且字符串长度有限时可以考虑使用 levenshtein() 函数。

使用说明
先看手册上 levenshtein() 函数的说明:

levenshtein() 函数返回两个字符串之间的 Levenshtein 距离。

Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

例如把 kitten 转换为 sitting:

sitten (k→s)
sittin (e→i)
sitting (→g)levenshtein() 函数给每个操作(替换、插入和删除)相同的权重。不过,您可以通过设置可选的 insert、replace、delete 参数,来定义每个操作的代价。

语法:

levenshtein(string1,string2,insert,replace,delete)

参数 描述

•string1 必需。要对比的第一个字符串。
•string2 必需。要对比的第二个字符串。
•insert 可选。插入一个字符的代价。默认是 1。
•replace 可选。替换一个字符的代价。默认是 1。
•delete 可选。删除一个字符的代价。默认是 1。
提示和注释

•如果其中一个字符串超过 255 个字符,levenshtein() 函数返回 -1。
•levenshtein() 函数对大小写不敏感。
•levenshtein() 函数比 similar_text() 函数更快。不过,similar_text() 函数提供需要更少修改的更精确的结果。
例子

 代码如下 复制代码

<?php
    echo levenshtein("Hello World","ello World");
    echo "<br />";
    echo levenshtein("Hello World","ello World",10,20,30);
?>

输出: 1 30

时间: 2025-01-01 17:24:22

PHP中计算字符串相似度的函数的相关文章

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

similar_text - 计算两个字符串的相似度 int similar_text ( string $first , string $second [, float &$percent ] ) $first 必需.规定要比较的第一个字符串. $second 必需.规定要比较的第二个字符串. $percent 可选.规定供存储百分比相似度的变量名. 两个字符串的相似程度计算依据 Oliver [1993] 的描述进行.注意该实现没有使用 Oliver 虚拟码中的堆栈,但是却进行了递归调用,这

PHP改进计算字符串相似度的函数similar_text()、levenshtein()_php技巧

similar_text()中文汉字版 复制代码 代码如下:      <?php       //拆分字符串       function split_str($str) {         preg_match_all("/./u", $str, $arr);         return $arr[0];       }              //相似度检测       function similar_text_cn($str1, $str2) {         $

计算字符串相似度的简易算法

算法设计背景: 最近设计知识管理系统的资源导入功能,为了尽量的做到组件化,方便扩展,方便其他模块使用.简 化组件提供的和需要的接口,设计并实现了基于 Mapping 机制的导入框架.其中有一功能用到了计算两 个字符串相似度的算法,简单设计如下以便参考: 设计思想: 把两个字符串变成相同的基本操作定义如下: 1.修改一个字符(如把 a 变成 b) 2.增加一个字符 (如 abed 变成 abedd) 3.删除一个字符(如 jackbllog 变成 jackblog) 针对于 jackbllog到j

c/c++中与字符串处理相关的函数

void *memccpy (void *dest, const void *src, int c, size_t n); 从src所指向的对象复制n个字符到dest所指向的对象中.如果复制过程中遇到了字符c则停止复制,返回指针指向dest中字符c的下一个位置:否则返回NULL. void *memcpy (void *dest, const void *src, size_t n); 从src所指向的对象复制n个字符到dest所指向的对象中.返回指针为dest的值. void *memchr

java中计算字符串长度的方法及u4E00与u9FBB的认识_java

字符串采用unicode编码的方式时,计算字符串长度的方法找出UNICODE编码中的汉字的代表的范围"\u4E00" 到"\u9FBB"之间,由于一个汉字代表两个字符所以可以采用如下方法进行计算字符串的长度 复制代码 代码如下: public static int getCharLength(String content) { int count = 0; for (int i = 0, len = content.length(); i < len; ++i

php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子_php实例

一.取部份字符串. 复制代码 代码如下: string substr(string string, int start, int [length]); 本函数将字符串 string 的第 start 位起的字符串取出 length 个字符.若 start 为负数, 则从字符串尾端算起.若可省略的参数 length 存在,但为负数,则表示取到倒数第 length 个字符. 复制代码 代码如下: echo  substr ( "abcdef" ,  1 ,  3 );   // 返回 &q

Shell脚本中计算字符串长度的5种方法_linux shell

有时在Linux操作系统中需要计算某个字符串的长度,通过查询资料整理了下目前Shell中获取字符串的长度的多种方法,在这里分享给大家,方法如下: 方法1: 使用wc -L命令 wc -L可以获取到当前行的长度,因此对于单独行的字符串可以用这个简单的方法获取,另外wc -l则是获取当前字符串内容的行数. 复制代码 代码如下: echo "abc" |wc -L 方法2: expr length string 使用expr length可以获取string的长度 方法3: awk获取域的个

javascript中计算字符串实际长度

知道了以上原理以后,我们就可以算出一个字符串的实际长度了,如果是GBK字符集遇到中文加2,如果是UTF8字符集遇到中文加3即可 实例(这个是我们常用的)  代码如下 复制代码 var jmz = {}; jmz.GetLength = function(str) {     ///<summary>获得字符串实际长度,中文2,英文1</summary>     ///<param name="str">要获得长度的字符串</param>

计算字符串相似度算法—Levenshtein

什么是Levenshtein Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符.levenshtein() 函数返回两个字符串之间的 Levenshtein 距离.编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance 实现过程 首先我们明确从一个字符串变化到另一个字符串需要进行添加.修改.删除来变化 如a变化到