在Python中进行模糊键查找的最佳方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python中进行模糊键查找的最佳方法?相关的知识,希望对你有一定的参考价值。

我有一个问题,我需要在哈希映射中进行模糊查找,即返回对应于最接近查询的那个键的值,在我的情况下由Levenshtein距离测量。

我目前的方法是使用特殊的查找方法对dict进行子类化,该方法计算所有键的Levenshtein距离,然后返回具有最低分数的键的值。基本上这个:

import Levenshtein

class FuzzyLookupDict(dict):

    def fuzzy_lookup(self, query):
        levs = [(key, Levenshtein.ratio(query, key)) for key in self.keys()]
        key, score = max(levs, key=lambda lev: lev[1])
        return self.get(key)

这是一个好方法,还是有一个我没有想到的更好的解决方案?

答案

这个问题通常用Levenshtein automata解决。用于字符串w和数字n的Levenshtein自动机是有限状态自动机,其可以识别与W的Levenshtein距离最多为n的所有字符串的集合。

该算法比使用动态编程分别为每个字典单词计算Levenshtein距离要快得多。

Jule Jacob的博客文章Levenshtein automata can be simple and fast是一个很好的起点,尼克约翰逊的Damn Cool Algorithms: Levenshtein Automata是一个更深入的介绍。

您可以在Github上找到一些Python实现,例如https://github.com/antoinewdg/pyffs

以上是关于在Python中进行模糊键查找的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

在一些片段之间填充对象变量的最佳方法

常用python日期日志获取内容循环的代码片段

asp.net中下拉框实现模糊查找

如何进行模糊查找文件

在多个文件中进行查找/替换的最佳方法?

在 Pentaho 中对 200-3 亿条记录进行排序的最佳方法?