我有两个csv文件,F1文件中有约22K条记录,F2文件中有约50K条记录,两个文件都包含公司名称和地址信息。我需要对名称、地址和电话进行模糊匹配。F1中的每条记录都需要与F2中的每条记录进行模糊匹配。我已经创建了第三个文件R3,它是一个包含模糊匹配规则的csv文件,其中指定了从F1的哪一列到F2的哪一列进行模糊匹配,并设置了一个模糊容差级别。我正在尝试使用for循环来实现这个功能,代码如下 -
(for [j f1-rows
h f2-rows
r r3-rows
:while (match-row j h r)]
(merge j h))
(defn match-row [j h rules]
(every?
identity
(map (fn [rule]
(<= (fuzzy/jaccard
((keyword (first rule)) j)
((keyword (second rule)) h))
((nth rule 2))))
rules)))
f1-rows和f2-rows是map的集合。Rules是包含来自f1、f2的列名和公差级别的序列集合。代码正在按预期运行和工作。但我的问题是,执行时间大约需要2小时。我了解到transducers如何通过消除中间块来提高性能,但我无法想象如何在我的情况下应用它。有什么建议可以让这个过程变得更好/更快吗?
:while
如何工作。哈哈,真尴尬。对此感到抱歉。我认为我可以看到改进您的算法的方法,但您必须先发布一些样本数据。 - madstap