字符串相似性的算法(优于Levenshtein和similar_text)? Php,Js
发布时间:2020-12-14 05:06:26 所属栏目:大数据 来源:网络整理
导读:我在哪里可以找到比levenshtein()和php similar_text()方法更准确地评估错位字符拼写的算法? 例: similar_text('jonas','xxjon',$similar); echo $similar; // returns 60similar_text('jonas','asjon',$similar); echo $similar; // returns 60 - althoug
我在哪里可以找到比levenshtein()和php similar_text()方法更准确地评估错位字符拼写的算法?
例: similar_text('jonas','xxjon',$similar); echo $similar; // returns 60 similar_text('jonas','asjon',$similar); echo $similar; // returns 60 <- although more similar! echo levenshtein('jonas','xxjon'); // returns 4 echo levenshtein('jonas','asjon'); // returns 4 <- although more similar! /乔纳斯 解决方法
这是我提出的解决方案.这是基于蒂姆关于比较后续字符顺序的建议.一些结果:
> jonas / jonax:0.8 我确信我并不完美,并且它可以被优化,但是它似乎产生了我追求的结果…… static public function string_compare($str_a,$str_b) { $length = strlen($str_a); $length_b = strlen($str_b); $i = 0; $segmentcount = 0; $segmentsinfo = array(); $segment = ''; while ($i < $length) { $char = substr($str_a,$i,1); if (strpos($str_b,$char) !== FALSE) { $segment = $segment.$char; if (strpos($str_b,$segment) !== FALSE) { $segmentpos_a = $i - strlen($segment) + 1; $segmentpos_b = strpos($str_b,$segment); $positiondiff = abs($segmentpos_a - $segmentpos_b); $posfactor = ($length - $positiondiff) / $length_b; // <-- ? $lengthfactor = strlen($segment)/$length; $segmentsinfo[$segmentcount] = array( 'segment' => $segment,'score' => ($posfactor * $lengthfactor)); } else { $segment = ''; $i--; $segmentcount++; } } else { $segment = ''; $segmentcount++; } $i++; } // PHP 5.3 lambda in array_map $totalscore = array_sum(array_map(function($v) { return $v['score']; },$segmentsinfo)); return $totalscore; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- PERL Net :: Amazon :: S3 BucketAlreadyExists:请求的桶名
- Perl split函数用法
- [VB.NET]怎么把dataset1的table(0)同时复制到dataset2的tab
- 如何使用Perl正则表达式在Screen中搜索模式?
- Ready? Go! 上篇:大道至简(转)
- [LeetCode] Ambiguous Coordinates 模糊的坐标
- [VB.NET]如何用VB.NET访问UNIX里的SQL数据库?
- delphi – 在TOleContainer中嵌入多个MS Word实例
- 将Delphi字符串作为参数发送到DLL
- Children’s Queue(递推)