python中基于优先级序列的序列匹配器

时间:2018-07-06 01:35:10

标签: python weighting sequencematcher

我正在尝试从股票名称列表中找到最匹配的单词,尽管在后面的单词可能具有更多的字符,但我希望将优先级放在前面的单词而不是后面的单词。

例如。

“ SG HOLDINGS”和“ S2 HOLDINGS”

与“ SG HOLDING”和“ SG Corp”相比,序列匹配器将显示这两个词具有更高的相似率,但是后者实际上是我正在寻找的公司。如何在股票名称前面的单词加上更多的分量?我还可以使用其他库吗?

谢谢

1 个答案:

答案 0 :(得分:0)

如果所有名称的格式均为PREFIX SUFFIX,则可以拆分名称,然后将序列匹配器首先应用于前缀,然后应用于后缀,然后将距离(假设为Levenshtein distance)打包成元组,您得到:

1. ('SG', 'HOLDINGS') vs ('S2', 'HOLDINGS') → (1, 0)
2. ('SG', 'HOLDINGS') vs ('SG', 'Corp')     → (0, 8)
3. ('SG', 'HOLDINGS') vs ('SG', 'HOLD')     → (0, 4)
4. ('SG', 'HOLDINGS') vs ('S2', 'HOLDING')  → (1, 1)

当您按距离升序对距离的元组进行排序时,顺序将为[3, 2, 1, 4]

如果股票名称包含不同数量的单词,则可以用最长的名称(例如,最长的名称是“ Samsung Electronics Ord Shares”;它包含4个单词)对单词进行计数,然后扩展所有其他名称-在计算距离之前,用空字符串将元组分开以匹配此长度。也就是说,您将使用('SG', 'HOLDINGS', '', '')

新距离:

1. ('SG', 'HOLDINGS', '', '') vs ('S2', 'HOLDINGS', '', '') → (1, 0, 0, 0)
2. ('SG', 'HOLDINGS', '', '') vs ('SG', 'Corp', '', '')     → (0, 8, 0, 0)
3. ('SG', 'HOLDINGS', '', '') vs ('Samsung', 'E', 'O', 'S') → (6, 8, 1, 1)

现在排序为[2, 1, 3]