如何在python中进行双向模糊匹配?

时间:2019-06-25 14:01:05

标签: python fuzzy-search fuzzy-comparison fuzzywuzzy

我正在尝试使用Fuzzywuzzy对两个字符串列表进行一些模糊匹配。有没有一种方法可以做到两种方式,并获得两者的最大值,而不仅仅是循环遍历并将每个字符串匹配到相反的集合?

我遇到了问题,如下所示:

2019-06-13 15:02:39: INFO - List 1 - ['AHU05', 'AHU06', 'AHU07', 'RTU03', 'RTU04']
2019-06-13 15:02:39: INFO - List 2 - ['RTU3', 'RTU4', 'AH5', 'AHUG6', 'AHU07']

2019-06-13 15:02:39: INFO - RTU3 compared to List 1 is here - [('RTU03', 89), ('RTU04', 67), ('AHU05', 22), ...]
2019-06-13 15:02:39: INFO - RTU4 compared to List 1 is here - [('RTU04', 89), ('RTU03', 67), ('AHU05', 22), ...]
***2019-06-13 15:02:39: INFO - AH5 compared to List 1 is here - [('AHU05', 75), ('AHU06', 60), ('AHU07', 60), ...]
2019-06-13 15:02:39: INFO - AHUG6 compared to List 1 is here - [('AHU06', 80), ('AHU05', 60), ('AHU07', 60), ...]
2019-06-13 15:02:39: INFO - AHU07 compared to List 1 is here - [('AHU07', 100), ('AHU05', 80), ('AHU06', 80), ...]

***2019-06-13 15:02:39: INFO - AHU05 compared to List 2 is here - [('AHU07', 80), ('AH5', 75), ('AHUG6', 60), ...]
2019-06-13 15:02:39: INFO - AHU06 compared to List 2 is here - [('AHUG6', 80), ('AHU07', 80), ('AH5', 60), ...]
2019-06-13 15:02:39: INFO - AHU07 compared to List 2 is here - [('AHU07', 100), ('AH5', 60), ('AHUG6', 60), ...]
2019-06-13 15:02:39: INFO - RTU03 compared to List 2 is here - [('RTU3', 89), ('RTU4', 67), ('AHU07', 40), ...]
2019-06-13 15:02:39: INFO - RTU04 compared to List 2 is here - [('RTU4', 89), ('RTU3', 67), ('AHU07', 40), ...]

如您所见,AHU05和AH5是正确配对的一种方式,但不是另一种(以“ ***”突出显示)。这只是一个小例子,但在我的数据中,有几个实例的比较方向似乎有所不同。每个方向在某些比较中都起作用,而在其他比较中却没有。 (我知道为什么会这样,并且(理论上)匹配是如何工作的,我只是想解决这个问题。)

我的问题是:有没有办法比较两个列表,并采取两个方向中的最佳方法?也许将两个方向得分相乘或相加以获得“综合”得分,然后可以用来找到最佳匹配?这有道理吗?

作为推论-是否有一种有效的方法可以比较两个列表,并生成最佳的总体列表,而无需手动循环?

编辑: 我尝试使用内置的“ difflib”并遇到类似的问题。

0 个答案:

没有答案