【问题标题】:Sequence matcher in python based on priority sequencepython中基于优先级序列的序列匹配器
【发布时间】:2018-07-06 01:35:09
【问题描述】:

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

例如。

“SG HOLDINGS”与“S2 HOLDINGS”

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

谢谢

【问题讨论】:

  • 欢迎来到 StackOverflow!请帮助我们通过展示您目前拥有的东西来帮助您。

标签: python weighting sequencematcher


【解决方案1】:

如果所有名称的格式都为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]

【讨论】:

  • 您好,股票名称可能包含多个单词。例如“Samsung Electronics Ord Shares”,有没有一种方法可以根据动态字长确定?谢谢
  • 感谢 K3-mc,我可能没有正确提出这个问题。我想说的是,有诸如“Samsung Electronics Ord Shares”与“Samsung Electronics Pref Shares”之类的例子。如何计算距离并以编程方式对其进行排序?有我可以使用的包吗?谢谢
  • 按照上述方法,两个字符串(“Samsung Electronics Ord Shares”与“Samsung Electronics Pref Shares”)的距离将为(0, 0, 4, 0),并进行相应的排序。但是你必须自己编码。整个内容不到 20 行。
猜你喜欢
  • 1970-01-01
  • 2021-07-28
  • 2021-01-09
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
相关资源
最近更新 更多