所以我有一个随机的JavaScript数组名称… [@ larry,@ nicholas,@ notch]等 他们都以@符号开头。 我想用Levenshtein距离对它们进行sorting,以便列表顶部的那些距离search项最近。 目前,我有一些JavaScript使用jQuery的.grep()使用JavaScript .match()方法围绕input的search词在按键: (自首次发布后编辑的代码) limitArr = $.grep(imTheCallback, function(n){ return n.match(searchy.toLowerCase()) }); modArr = limitArr.sort(levenshtein(searchy.toLowerCase(), 50)) if (modArr[0].substr(0, 1) == '@') { if (atRes.childred('div').length < 6) { modArr.forEach(function(i){ atRes.append('<div class="oneResult">' + i + '</div>'); }); } } else if (modArr[0].substr(0, 1) == '#') { if (tagRes.children('div').length < 6) { modArr.forEach(function(i){ […]
我想做模糊的string比较,但与哪个库混淆使用。 选项1: import Levenshtein Levenshtein.ratio('hello world', 'hello') Result: 0.625 选项2: import difflib difflib.SequenceMatcher(None, 'hello world', 'hello').ratio() Result: 0.625 在这个例子中,两者给出了相同的答案。 但我更喜欢使用difflib 。 任何专家的build议。 谢谢。 Updated: 我正在做临床消息正常化(拼写检查),在这个过程中,我检查每个给定的单词与900,000字医学词典。 我更关心时间复杂度/性能。 你认为在这种情况下两者performance相似吗?
$word = strtolower($_GET['term']); $lev = 0; $q = mysql_query("SELECT `term` FROM `words`"); while($r = mysql_fetch_assoc($q)) { $r['term'] = strtolower($r['term']); $lev = levenshtein($word, $r['term']); if($lev >= 0 && $lev < 5) { $word = $r['term']; } } 我怎样才能将所有这一切只移动到一个查询? 不希望通过所有术语进行查询,并在PHP中进行过滤。
我对计算Levenshtein距离的T-SQLalgorithm感兴趣。