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

2024-06-01 04:24:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从股票名称列表中找到最接近的匹配词,我想把更多的优先权放在前面的词而不是后面的词,尽管后面的词可能有更多的字符

例如

“SG HOLDINGS”与“S2 HOLDINGS”

序列匹配将显示这两个词有更高的相似性比相比,“SG控股”和“SG公司”,但后者实际上是我要找的公司。我怎样才能给股票名称前面的词加上更多的权重呢?我还能用别的库吗

谢谢


Tags: 列表公司序列sg字符相似性权重s2
1条回答
网友
1楼 · 发布于 2024-06-01 04:24:15

如果所有名称都采用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]排序

相关问题 更多 >