热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php求相似比,PHP改进计算字符串相似度的函数similar_text()、levenshtein()

PHP原生的similar_text()函数、levenshtein()函数对中文汉字支持不好,我自己写了一个,测试使用正常,推荐给大家&

PHP 原生的similar_text()函数、levenshtein()函数对中文汉字支持不好,我自己写了一个,测试使用正常,推荐给大家,如果有什么问题,请留言

similar_text()中文汉字版

代码如下:

//拆分字符串

function split_str($str) {

preg_match_all("/./u", $str, $arr);

return $arr[0];

}

//相似度检测

function similar_text_cn($str1, $str2) {

$arr_1 = array_unique(split_str($str1));

$arr_2 = array_unique(split_str($str2));

$similarity = count($arr_2) - count(array_diff($arr_2, $arr_1));

return $similarity;

}

levenshtein()中文汉字版

代码如下:

//拆分字符串

function mbStringToArray($string, $encoding = 'UTF-8') {

$arrayResult = array();

while ($iLen = mb_strlen($string, $encoding)) {

array_push($arrayResult, mb_substr($string, 0, 1, $encoding));

$string = mb_substr($string, 1, $iLen, $encoding);

}

return $arrayResult;

}

//编辑距离

function levenshtein_cn($str1, $str2, $costReplace = 1, $encoding = 'UTF-8') {

$count_same_letter = 0;

$d = array();

$mb_len1 = mb_strlen($str1, $encoding);

$mb_len2 = mb_strlen($str2, $encoding);

$mb_str1 = mbStringToArray($str1, $encoding);

$mb_str2 = mbStringToArray($str2, $encoding);

for ($i1 &#61; 0; $i1 <&#61; $mb_len1; $i1&#43;&#43;) {

$d[$i1] &#61; array();

$d[$i1][0] &#61; $i1;

}

for ($i2 &#61; 0; $i2 <&#61; $mb_len2; $i2&#43;&#43;) {

$d[0][$i2] &#61; $i2;

}

for ($i1 &#61; 1; $i1 <&#61; $mb_len1; $i1&#43;&#43;) {

for ($i2 &#61; 1; $i2 <&#61; $mb_len2; $i2&#43;&#43;) {

// $cost &#61; ($str1[$i1 - 1] &#61;&#61; $str2[$i2 - 1]) ? 0 : 1;

if ($mb_str1[$i1 - 1] &#61;&#61;&#61; $mb_str2[$i2 - 1]) {

$cost &#61; 0;

$count_same_letter&#43;&#43;;

} else {

$cost &#61; $costReplace; //替换

}

$d[$i1][$i2] &#61; min($d[$i1 - 1][$i2] &#43; 1, //插入

$d[$i1][$i2 - 1] &#43; 1, //删除

$d[$i1 - 1][$i2 - 1] &#43; $cost);

}

}

return $d[$mb_len1][$mb_len2];

//return array(&#39;distance&#39; &#61;> $d[$mb_len1][$mb_len2], &#39;count_same_letter&#39; &#61;> $count_same_letter);

}

最长公共子序列LCS()

代码如下:

本文原创发布php中文网&#xff0c;转载请注明出处&#xff0c;感谢您的尊重&#xff01;



推荐阅读
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
author-avatar
欢乐天天快乐一生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有