【问题标题】:Finding name variations from large list Ruby从大型列表 Ruby 中查找名称变体
【发布时间】:2024-01-21 12:06:01
【问题描述】:

我有一个很大的单词列表,可能有 300-600 个单词,我希望这样当我的用户开始输入单词时,应用程序会建议它从我的特定列表中找到的单词,这些单词与那个人的拼写很接近正在给予。有点像自动完成,但单词列表是动态的并且特定于该用户。关于我如何做到这一点的任何宝石或技术建议?

【问题讨论】:

  • 一个选项是使用jQuery Autocomplete control
  • 对于这么短的单词列表,在客户端执行它可能是有意义的,即在页面加载时将整个单词列表发送到浏览器(而不是在每次击键时执行 Ajax 请求)和然后使用typeahead.js(或提到的 jQuery 插件 Nic)之类的组件来处理用户交互。
  • @Jordan 即使它必须通过一个对象数组并从数组中的每个对象中提取“名称”特征来获取单词表?
  • 不知道你的实现细节很难说。您将不得不在某些时候完成这项工作,无论是在服务器上预先进行,在客户端预先进行,还是在每次按键时部分在服务器上进行。我建议现在做最简单的事情,如果遇到性能问题,以后再进行优化。 (就其本身而言,typeahead.js 应该以任何一种方式工作,许多其他此类组件也是如此。)
  • 好的,我想我会在加载页面之前在操作中创建列表,谢谢您的建议。

标签: ruby-on-rails ruby ajax coffeescript mongoid5


【解决方案1】:

如果您想在 ruby​​ 中执行此操作,您可以使用模糊匹配算法,例如此 gem 中使用的算法 https://github.com/seamusabshere/fuzzy_match 检查示例:

>> FuzzyMatch.new(['seamus', 'andy', 'ben']).find('Shamus')
=> "seamus"

【讨论】:

  • 谢谢,我试试看!