1

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

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

  • 蜘蛛侠

  • 蜘蛛侠

  • 蜘蛛侠 1

  • 蜘蛛侠

  • 蜘蛛侠

  • 电影:蜘蛛侠

  • 电影:蜘蛛侠

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

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

4

3 回答 3

2

我认为Smith-Waterman 算法可以给你一些分数。

于 2012-11-21T22:56:46.370 回答
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
于 2012-11-21T22:56:59.710 回答
0

Levenshtein distance可以计算将一个字符串转换为另一个字符串需要多少更改。

于 2012-11-21T23:04:02.747 回答