0

我希望匹配两个字符串并返回一个分数,我不关心顺序,只关心字符匹配的百分比。我正在查看“string_score”gem,但它关心顺序。从我的测试中可以看出。 ..对更好的方法有什么建议吗?

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
4

1 回答 1

1

好的,所以我环顾四周,特别是“string_score”、“scorer”和“text”宝石。那些并没有为这个特定的问题而削减它。我决定选择“匹配”宝石。

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

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

虽然它仍然不完美。例如,如果我做 goodmatch?("one","two") 它返回 0.0。我认为这太低了,应该在 10% 左右,因为两个词中都有“o”。我会给可以改进此解决方案的人提供答案并投赞成票。

于 2013-04-12T18:03:39.147 回答