如何比较两个字符串并打印相似度百分比。很容易找到字符串之间的相似之处,但以百分比显示它很难。 如何在 Ruby 中实现它?
答案 0 :(得分:3)
解决这个问题的一种方法是从Levenshtein距离出去,这将告诉你将字符串转换成另一个字符串需要多少操作。
在Ruby中,有一个可用于此的gem,称为Levenshtein
。
要将所需的操作数转换为百分比,您可以从100%开始,必须从头开始编写字符串并且没有相似之处。这将是最长字符串的长度。另一种选择是使用字符串的平均长度,但在本例中,我将使用最长的。
这是一种使用levenshtein
gem并获得它们接近程度的百分比的方法:
require 'levenshtein'
def distance_percent(first,second)
max_distance = [first,second].max_by(&:length).length
distance = Levenshtein.distance(first,second)
(100.0 / max_distance * distance).round.to_s + "%"
end
以下是该方法为不同字符串返回的一些示例。
string_one = "1234567890"
string_two = "1234567890"
puts distance_percent(string_one, string_two)
# => 0%
由于它们之间的距离为0,因此返回0%
。
string_one = "1234512345"
string_two = "6789067890"
puts distance_percent(string_one, string_two)
# => 100%
这将返回100%
,因为没有相同的字符。
string_one = "This is a string"
string_two = "This is another string"
puts distance_percent(string_one, string_two)
# => 27%
这将返回27%
,因为27%的字符串彼此不同。