字符串相似性的算法(优于Levenshtein和similar_text)? Php,Js
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了字符串相似性的算法(优于Levenshtein和similar_text)? Php,Js,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1634字,纯文字阅读大概需要3分钟。
内容图文
![字符串相似性的算法(优于Levenshtein和similar_text)? Php,Js](/upload/InfoBanner/zyjiaocheng/713/cec70b04763a4abcb28a137234a16469.jpg)
我在哪里可以找到比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
> jonas / sjona:0.68
> jonas / sjonas:0.66
> jonas / asjon:0.52
> jonas / xxjon:0.36
我确信我并不完美,并且它可以被优化,但是它似乎产生了我追求的结果……
一个弱点是,当字符串具有不同的长度时,它会在交换值时产生不同的结果…
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;
}
内容总结
以上是互联网集市为您收集整理的字符串相似性的算法(优于Levenshtein和similar_text)? Php,Js全部内容,希望文章能够帮你解决字符串相似性的算法(优于Levenshtein和similar_text)? Php,Js所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。