所有这些字符串都指的是同一部电影。如何比较它们以检查相似性?
我从外部来源获得所有这些字符串:
蜘蛛侠
蜘蛛侠
蜘蛛侠 1
蜘蛛侠
蜘蛛侠
电影:蜘蛛侠
电影:蜘蛛侠
对我来说,
"Spider man 1"
and是两个与and"Spider man 2"
完全不同的字符串。"spider-man"
"spider man"
我想要一个函数,如果它比较所有这些字符串,它将返回“true”
所有这些字符串都指的是同一部电影。如何比较它们以检查相似性?
我从外部来源获得所有这些字符串:
蜘蛛侠
蜘蛛侠
蜘蛛侠 1
蜘蛛侠
蜘蛛侠
电影:蜘蛛侠
电影:蜘蛛侠
对我来说,"Spider man 1"
and是两个与and"Spider man 2"
完全不同的字符串。"spider-man"
"spider man"
我想要一个函数,如果它比较所有这些字符串,它将返回“true”
我认为Smith-Waterman 算法可以给你一些分数。
使用 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
Levenshtein distance可以计算将一个字符串转换为另一个字符串需要多少更改。