python dict上的模糊搜索操作

时间:2018-03-27 13:21:40

标签: python-3.x fuzzy-search

我在python中有一个大字典,我需要使用模糊搜索比较所有字符串。我正在使用fuzzywuzzy包。

然而,脚本太慢了,并且想知道是否有人可以帮助我加快速度。

代码如下所示:

outfile = open('out.csv', 'w')
grouped = []
### a chunk of the dict, in reality it is around 100000 unique ID
d = {'1':'{'Name':'Jason Bourne', 'Code':'1234'}', '2':'{'Name':'Jasen Bourne', 'Code':'1234'}','3':'{'Name':'Jason Boune', 'Code':'12345'}'}

for id1, id2 in itertools.combinations(d.keys(),2):
     score = fuzz.partial_ratio(d[id1]['Name'],d[id2]['Name'])
     if id1 in grouped and id2 in grouped:
          continue
     if score > 80 and d[id1]['Code']==d[id2]['Code']:
         grouped.append(id2)
         outfile.write(id1, id2, d[id1]['Name'])

1 个答案:

答案 0 :(得分:0)

在给定的示例中,首先按'Code'对项目进行分组可能会大大加快速度。

无论如何,您应该避免将每个字符串与其他字符串进行比较,因为对于100k字符串(10 ^ 5),这大约是100亿(10 ^ 10)个比较。

一个相对简单的过程可能会更快:

  1. 为所有字符串创建n-gram索引(对大小写,空格等进行规范化之后)
  2. 使用该索引搜索每个字符串的接近匹配项,然后与它们进行完全比较。