Я пытаюсь сократить список имен, и для этого я использую библиотеку fuzzywuzzy
.
Я выполняю два цикла for, оба по всем именам. Если два имени имеют нечеткое совпадение между 90 и 100, то я переписываю второе имя с первым именем.
Вот пример моего набора данных data
.
nombre
0 VICTOR MORENO MORENO
1 SERGIO HERNANDEZ GUTIERREZ
2 FRANCISCO JAVIER MUÑOZ LOPEZ
3 JUAN RAYMUNDO MORALES MARTINEZ
4 IVAN ERNESTO SANCHEZ URROZ
И вот моя функция:
def fuzz_analisis0(top_names):
for name2 in top_names["nombre"]:
for name in top_names["nombre"]:
if fuzz.ratio(name, name2)>90 and fuzz.ratio(name, name2)<100:
top_names[top_names["nombre"]==name] = name2
Когда я запускаю это с:
fuzz_analisis0(data)
Все работает нормально. Вот вывод, который показывает, как это работает.
print(len(data))
# 1400
data = data.drop_duplicates()
print(len(data))
# 1256
Но теперь, если я попробую его с параллельной обработкой, он больше не будет работать, как ожидалось. Вот распараллеленный код:
cores = mp.cpu_count()
df_split = np.array_split(data, cores, axis=0)
pool = Pool(cores)
df_out = np.vstack(pool.map(fuzz_analisis0, df_split))
pool.close()
pool.join()
pool.clear()
Функция заканчивается быстрее, чем ожидалось, и не находит дубликатов.
print(len(data))
# 1400
data = data.drop_duplicates()
print(len(data))
# 1400
Если таковые могут помочь мне выяснить, что здесь происходит, и как это решить я буду так благодарен. Заранее спасибо.
edit:
теперь у меня есть еще одна функция, которая работает с результатом последней
def fuzz_analisis(dataframe, top_names):
for index in top_names['nombre'].index:
name2 = top_names.loc[index,'nombre']
for index2 in dataframe["nombre"].index:
name = dataframe.loc[index2,'nombre']
if fuzz.ratio(name, name2)>90 and fuzz.ratio(name, name2)<100:
dataframe.loc[index,'nombre'] = name
датафрейм выглядит так:
nombre foto1 foto2 sexo fecha_hora_registro
folio
131 JUAN DOMINGO GONZALEZ DELGADO 131.jpg 131.jpg MASCULINO 2008-08-07 15:42:25
132 FRANCISCO JAVIER VELA RAMIREZ 132.jpg 132.jpg MASCULINO 2008-08-07 15:50:42
133 JUAN CARLOS PEREZ MEDINA 133.jpg 133.jpg MASCULINO 2008-08-07 16:37:24
134 ARMANDO SALINAS SALINAS 134.jpg 134.jpg MASCULINO 2008-08-07 17:18:12
135 JOSE FELIX ZAMBRANO AMEZQUITA 135.jpg 135.jpg MASCULINO 2008-08-07 17:55:05