Ruby可以识别同一个单词的不同拼写吗?

问题描述 投票:1回答:2

当获得用户输入时,除了在我的代码中编写"gr*y"*之类的每个拼写之外,有没有办法识别"grey""gray"字符无关紧要)?

ruby
2个回答
1
投票

这可以使用正则表达式来实现。虽然,你可能不想匹配任何角色 - 它可能在这个特定的实例中起作用,但可以完全改变其他单词的含义。

例如,/gr(a|e)y/将匹配“灰色”和“灰色”。

如果您确实想要匹配任何单个字符,则可以使用范围,例如/gr[a-zA-Z]y/

这是Rubular的一个工作示例。

还有一个宝石可以包含所有这些常见的拼写。我建议在rubygems.org和ruby-toolbox.com上搜索。


1
投票

你正在寻找的术语叫做fuzzy matchfuzzy search

我找到了3个库,它们提供了这样的功能:

您可以查看每个文档并确定,哪个更适合您的情况。我只是展示amatch的例子:

require 'amatch'
include Amatch

m = Levenshtein.new("grey")
m.match('gray') # 1
m.match('pray') # 2

它计算两个单词之间的Levenshtein距离:将一个单词更改为另一个单词所需的单个字符编辑(插入,删除或替换)的最小数量。因此,为了将graygrey单词统计为相同,您需要将允许距离设置为1

© www.soinside.com 2019 - 2024. All rights reserved.