在Python中返回给定字符串的模糊匹配列表?

时间:2014-07-14 19:30:13

标签: python string levenshtein-distance fuzzy-search

我已经看到很多检查两个给定字符串是否模糊匹配的方法,但是我想为一个给定的字符串创建一个潜在的模糊匹配列表,这样我就可以搜索一个巨大的列表。

我的代码的目的是查看给定位置是否在Geonames数据库中。我在Geonames中列出了2,358,121个位置名称。当我有一个较小的位置名称子集进行搜索时,我遍历名称列表,使用NLTK度量模块中的函数计算给定位置和每个名称之间的Levenshtein距离,并将名称附加到模糊列表中如果Levenshtein距离小于或等于1,则匹配。对于较大的列表,此实现太慢,因此我希望能够创建Levenshtein距离小于或等于的字符串列表。从给定位置等于1并检查其中是否有任何这些位于Geonames位置名称列表中。

以下是我目前正在使用的代码:

def fuzzysearch(givenloc, geonames):
    fuzzymatch = []
    for name in geonames:
        if metrics.edit_distance(name, givenloc) <= 1:
            fuzzymatch.append(name)   
    return fuzzymatch

请帮忙!谢谢!

1 个答案:

答案 0 :(得分:-1)

您可以通过过滤掉与第一个字母不匹配的所有内容,或者甚至规范化每个条目(通过删除所有非字母字符和标点符号)并在第一次运行时匹配该列表来缩小列表范围,然后在简化集上进行完全模糊匹配。