宽松的字符串比较
Lenient string comparison
我想在JavaScript中执行允许/宽松字符串比较,如下所示:
Morocco = Moroco = Moroko = Morokko = Marocco = Maroco
Russia = Rusia
US = USA
Bucharest = Buharest
Afghanistan = Afganistan
Bangkok = Bankok
etc..
这些比较将在使用第三方API操作时使用。我不会在我的应用程序中基于它们做出任何选择,但我的目标是为用户提供最佳选项。用户将决定什么对他来说合适。
你能给我指对路吗?我想到的唯一想法是使用字符校验和并进行比较。也许还有更好的方法?
也可以得到一个"匹配整数",比如:
var n = compare("Morocco", "Marocco"); // n = 95
var m = compare("Morocco", "Marokko"); // n = 85
但是怎么做呢?
谢谢。
我怀疑你会得到一些校验和。
如果你不想要一个库,只想要一个简单的算法,你可以计算Levenstein距离。这可能是简单的无字典解决方案中最好的一个。
如果你想要更强大的东西,我建议你开始研究近似字符串匹配并搜索相关的库。
对于这样的事情,最好的选择是使用拼写检查库。此库(http://www.javascriptspellcheck.com/)是一个可行的例子。进一步查看特定的API,您可以通过AJAX阅读以下建议:
o = $Spelling.AjaxSpellCheckFields(Fields)
o.onValidate = function(result) { }
我相信还有其他优秀的库可以执行类似的操作。
在算法方面,基本思想是计算用户输入的内容与词典中单词列表之间的距离。我读到一些建议,"Bloom Filter"是一个不错的选择。有关更多信息,请参阅"拼写检查器中的哪些算法提供建议?"。
总体而言,您的算法需要能够处理以下输入:
- 用户输入的字符-明显但重要
- 过去的选择-基本上随着时间的推移,某些错误会很常见。记住任何错误的最常见建议,或者用户如何纠正自己的错误,可以随着时间的推移真正提高算法的质量。这些信息甚至可以以用户特定的方式保存
- 上下文-如果你知道用户应该输入国家代码,你的词典可能会大幅缩水,这意味着你应该能够提供更好的建议
我认为再多做一点研究,这应该会让你走上正轨。祝你好运!
您应该尝试使用类似Damerau–Levenstein距离的相似算法来比较这些值。以下是javascript中的一个实现:
按";Levenstein距离";在Javascript 中具有最佳性能
相关文章:
- 如何使用 JavaScript 比较字符串变量
- 替换函数后的Javascript比较字符串不起作用
- 如何比较字符串是javascript
- 比较字符串,如果存在小的拼写错误,则返回 true
- Javascript - 比较字符串环境
- 如何在忽略特殊字符的 javascript 中比较字符串
- 比较字符串中的单词
- 在 javascript 中比较字符串与日期时间的问题
- 比较字符串以查找缺少的子字符串
- 比较字符串是否以符号 @ jquery 或 javascript 开头
- 如何在 Javascript 中比较字符串数组
- 从提示返回的Javascript比较字符串
- 比较字符串的准确性(包括偏移)
- 在比较字符串的字符后创建新数组&大堆
- 在键入时比较字符串
- 如何在JavaScript中比较字符串
- javascript比较字符串(用于日期目的)
- JQuery比较字符串时出错
- Jquery比较字符串在POST中不起作用
- JS比较字符串和换行符