比较两个字符串的相似性的最佳方法是什么?

时间:2012-11-21 22:52:27

标签: ruby

所有这些字符串都指的是同一部电影。如何比较它们以检查相似性?

我从外部来源获取所有这些字符串:

  • 蜘蛛侠
  • 蜘蛛侠
  • 蜘蛛侠1
  • 蜘蛛侠
  • 蜘蛛侠
  • 电影:蜘蛛侠
  • 胶片:蜘蛛侠

    对我来说,"Spider man 1""Spider man 2"是两个完全不同于"spider-man""spider man"的字符串。

我想要一个函数,如果它比较所有这些字符串,它将返回“true”

3 个答案:

答案 0 :(得分:2)

我认为Smith-Waterman algorithm可以给你一些积分。

答案 1 :(得分:1)

使用Smith-Waterman算法或其他字符串相似度算法。一种可能性是使用FuzzBall

require 'fuzz_ball'
THRESHOLD_SCORE = 0.75
MATCHER = FuzzBall::Searcher.new [ 'Spider man' ]

def complies?( str )
  matchdata = MATCHER.search str
  return false if matchdata.nil? or matchdata.empty?
  score = matchdata[0][:score]
  puts "score is #{score}"
  score > THRESHOLD_SCORE
end

complies? 'man spider'
#=> score is 0.8
#=> true

答案 2 :(得分:0)

Levenshtein distance可以计算将一个字符串转换为另一个字符串所需的更改次数。