与Ruby匹配的模式

时间:2013-04-12 17:25:00

标签: ruby string rubygems pattern-matching

我希望匹配两个字符串并返回一个分数,我不关心顺序,只是字符匹配的百分比..我正在看'string_score'宝石,但它关心的顺序..可以看到我的测试......有关更好方法的任何建议吗?

require 'string_score/ext/string'

"JAMES DOWNY".downcase.score("Downy, James".downcase)

#=> 0

"JAMES DOWNY".downcase.score("James Downy".downcase)
#=> 1


"JAMES DOWNY".downcase.score("James, Downy".downcase)

# w the comma
#=> 0

1 个答案:

答案 0 :(得分:1)

好的,所以我环顾四周,特别是“string_score”,“得分手”和“文字”宝石。对于这个特定的问题,那些并没有削减它。我决定选择“amatch”宝石。

这是我编写的代码,用于检查两个字符串之间的一致性。

require 'rubygems'
require 'scorer'
require 'amatch'

include Amatch

class String
    def order_downcase
        self.chars.sort_by(&:downcase).join.downcase
    end
end

def goodmatch?(check_string,base_string)
    x = JaroWinkler.new(basestring.order_downcase)
    x.match(check_string.order_downcase)
end

但它仍然不完美。例如,如果我做好匹配?(“一个”,“两个”)它返回0.0。我相信这太低了,因为两个单词都是“o”所以它应该是10%左右。 我会给能够改善此解决方案的人提供答案和投票。