0

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

例如。

“SG HOLDINGS”与“S2 HOLDINGS”

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

谢谢

4

1 回答 1

0

如果所有名称都具有 format 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].

于 2018-07-06T01:46:14.770 回答