【问题标题】:How to compare two strings and find the percent of similarity? [closed]如何比较两个字符串并找到相似度的百分比? [关闭]
【发布时间】:2017-07-21 16:58:45
【问题描述】:

如何比较两个字符串并打印相似度百分比。很容易找到字符串之间的相似之处,但以百分比显示它很难。 如何在 Ruby 中实现它?

【问题讨论】:

  • 这是一个非常省力的问题。 你尝试过什么?举个例子。显示一些代码。
  • 听起来你想要一个 Levenshtein 距离,然后将该结果作为源字符串中字符的百分比进行比较。
  • 不清楚你在问什么。您是否正在寻找一种算法或方法来比较以百分比衡量的字符串?或者您是否正在寻求使用 Ruby 编写特定算法(您尚未提及)的帮助? 很容易找到字符串之间的相似之处...好吧,“相似度”是如何具体定义这种情况的?
  • 没关系,这就是你试验和尝试的原因。迷路不是你应该感到羞耻的事情,但这类问题在 Stack Overflow 上是题外话。如果您需要指导或辅导,请尝试CodementorSavvyHackhands 等服务。

标签: ruby string percentage string-comparison


【解决方案1】:

解决这个问题的一种方法是从 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% 的字符串彼此不同。

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多