相关疑难解决方法(0)

是否有返回索引(列表位置)而不是 str 列表的 `difflib.get_close_matches()` 的替代方法?

我想使用类似difflib.get_close_matches不是最相似的字符串,我想获取索引(即列表中的位置)。

列表的索引更加灵活,因为可以将索引与其他数据结构(与匹配的字符串相关)相关联。

例如,而不是:

>>> words = ['hello', 'Hallo', 'hi', 'house', 'key', 'screen', 'hallo', 'question', 'format']
>>> difflib.get_close_matches('Hello', words)
['hello', 'hallo', 'Hallo']
Run Code Online (Sandbox Code Playgroud)

我想:

>>> difflib.get_close_matches('Hello', words)
[0, 1, 6] 
Run Code Online (Sandbox Code Playgroud)

似乎不存在获取此结果的参数,是否有替代方法可以difflib.get_close_matches()返回索引?


我对替代方案的研究

我知道我可以使用difflib.SequenceMatcher, 然后将字符串与ratio(或quick_ratio)进行一对一比较。但是,我担心这会非常低效,因为:

  1. 我将不得不创建数千个 SequenceMatcher 对象并比较它们(我希望get_close_matches避免使用该类):

    编辑:错误。我检查了 的源代码get_close_matches,它实际上使用SequenceMatcher.

  2. 没有截止(我猜有一种优化可以避免计算所有字符串的比率)

    编辑:部分错误。该代码是get_close_matches没有任何重大的优化,除了它使用real_quick_ratioquick_ratioratio产品总数。无论如何,我可以轻松地将优化复制到我自己的函数中。我也没有考虑到 SequenceMatcher 有设置序列的方法:set_seq1, set_seq2,所以至少我不必每次都创建一个对象。

  3. 据我了解,所有 python 库都是 C 编译的,这会提高性能。 …

python string similarity difflib python-3.x

9
推荐指数
1
解决办法
4094
查看次数

标签 统计

difflib ×1

python ×1

python-3.x ×1

similarity ×1

string ×1