gpt4 book ai didi

ruby - 使用模糊字符串匹配在两个数组之间进行最佳匹配

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:59:35 24 4
gpt4 key购买 nike

我需要一种方法来找到两个数组之间的最佳匹配。

数组 a 包含产品名称数组 b 指的是所有相同的产品,但名称可能略有不同。

a = [
"F542521376-34-REG",
"AF7U",
"AF106U",
"F521521376-30R"
]

b = [
"F54252137634R",
"AF7U",
"AF106U",
"F52152137630R"
]

最佳匹配:

"F542521376-34-REG" - "F54252137634R"
"AF7U" - "AF7U"
"AF106U" - "AF106U"
"F521521376-30R" - "F52152137630R"

或:

a[0] - b[0]
a[1] - b[1]
a[2] - b[2]
a[3] - b[3]

(第一个和最后一个元素因列表而异。)

我可以使用模糊字符串匹配算法来获得字符串相似度的数值 (0.0-1.0)。但仅此一项并不能使我获得列表元素的最佳匹配。我还没有为此找到算法,我不想强​​行使用它。

实际应用是,我有一些中间人 ruby​​ 代码,可以在两个第三方系统之间转换信息,并且数据质量无处不在。我需要匹配元素来创建一个查找表。不知道产品“名称”的格式和变化可能是什么。

最佳答案

我有一个类似的问题,我使用了 gem fuzzy_match解决。该提案假设 a 和 b 之间的关系不一定是一对一的。

require 'fuzzy_match'

fz=FuzzyMatch.new(a)

map = {}
map[nil] = [] # elements in b with no match in a
a.each{|r| map[r] = []} # In case more than one element in b match a

b.each do |name|
map[fz.find(name)] << name
end

这给出了“ map ”:

{"F542521376-34-REG"=>["F54252137634R"],
"AF7U"=>["AF7U"],
"AF106U"=>["AF106U"],
"F521521376-30R"=>["F52152137630R"]}

如果匹配不够好,可以使用 fuzzy_match 的几个参数来改进匹配结果。

关于ruby - 使用模糊字符串匹配在两个数组之间进行最佳匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29180428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com