gmo*_*lau 3 python hashtable hashmap data-structures python-collections
我有一个问题,我需要在哈希映射中进行模糊查找,即返回与最接近查询的键对应的值,在我的例子中是由 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)
这是一个很好的方法还是有我没有想到的更好的解决方案?
小智 5
这个问题通常用Levenshtein 自动机解决。字符串w和数字n的 Levenshtein 自动机是一个有限状态自动机,它可以识别与w的 Levenshtein 距离至多为n的所有字符串的集合。
该算法比使用动态规划为每个字典单词单独计算 Levenshtein 距离要快得多。
Jule Jacob 的博客文章Levenshtein Automata can be simple and fast是一个很好的起点,Nick Johnsonz 的该死的酷算法:Levenshtein Automata是一个更深入的介绍。
你可以在 Github 上找到一些 Python 实现,例如https://github.com/antoinewdg/pyffs。
| 归档时间: | 
 | 
| 查看次数: | 969 次 | 
| 最近记录: |