首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >宽松的字符串比较

宽松的字符串比较
EN

Stack Overflow用户
提问于 2013-12-17 00:47:56
回答 3查看 257关注 0票数 0

我想在JavaScript中执行允许/宽松字符串比较,如下所示:

代码语言:javascript
运行
复制
Morocco = Moroco = Moroko = Morokko = Marocco = Maroco
Russia = Rusia
US = USA
Bucharest = Buharest
Afghanistan = Afganistan
Bangkok = Bankok
etc..

在与第三方API一起操作时,将使用这些比较。我不会在我的应用程序中基于它们做出任何选择,但我的目标是为用户提供最佳选项。用户将决定什么对他来说是好的。

你能给我指出正确的路吗?我想到的唯一办法就是使用字符校验和并对它们进行比较。也许还有更好的方法?

如果能得到一个像这样的“匹配整数”也会很好:

代码语言:javascript
运行
复制
var n = compare("Morocco", "Marocco"); // n = 95
var m = compare("Morocco", "Marokko"); // n = 85

但如何做到这一点呢?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2013-12-17 00:50:46

我怀疑你会从校验和中得到一些东西。

如果你不想要一个库,而只需要一个简单的算法,你可以计算Levenshtein distance。在简单的无字典解决方案中,它可能是最好的。

如果你想要更强大的功能,我建议你开始学习approximate string matching并搜索relevant libraries

票数 2
EN

Stack Overflow用户

发布于 2013-12-17 00:51:05

对于这种情况,最好的办法就是使用拼写检查库。这个库(http://www.javascriptspellcheck.com/)就是一个可能工作的例子。进一步了解这个特定的API,您可以通过AJAX阅读以下建议:

代码语言:javascript
运行
复制
o = $Spelling.AjaxSpellCheckFields(Fields)
o.onValidate = function(result) { }

我确信有其他优秀的库可以执行类似的操作。

在算法方面,基本思想是计算用户输入的内容与字典中的单词列表之间的距离。我读到有人建议说"Bloom Filter“是个不错的选择。有关更多信息,请参阅"What algorithm gives suggestions in a spell checker?“。

总体而言,您的算法需要能够处理以下输入:

  • User输入字符选择-显而易见,但important
  • Past -基本上随着时间的推移,某些错误将是常见的。记住最常见的错误建议,或者用户如何纠正自己的错误,可以随着时间的推移真正提高算法的质量。这些信息甚至可以保存在用户特定的manner
  • Context中-如果您知道用户应该输入国家/地区代码,那么您的字典可以显著缩小,这意味着您应该能够为提供更好的建议

我认为通过更多的研究,这应该会让你走上正确的道路。祝你好运!

票数 2
EN

Stack Overflow用户

发布于 2013-12-17 00:52:41

您应该尝试使用像Damerau-Levenshtein距离这样的相似性算法来比较这些值。下面是javascript的一个实现:

Sort an array by the "Levenshtein Distance" with best performance in Javascript

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20616169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档