我已经看到很多检查两个给定字符串是否模糊匹配的方法,但是我想为一个给定的字符串创建一个潜在的模糊匹配列表,这样我就可以搜索一个巨大的列表。
我的代码的目的是查看给定位置是否在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
请帮忙!谢谢!
答案 0 :(得分:-1)
您可以通过过滤掉与第一个字母不匹配的所有内容,或者甚至规范化每个条目(通过删除所有非字母字符和标点符号)并在第一次运行时匹配该列表来缩小列表范围,然后在简化集上进行完全模糊匹配。