Есть ли способ запустить цикл быстрее? - PullRequest
0 голосов
/ 11 ноября 2019

Я работаю над некоторыми проблемами соответствия строк и использую модуль fuzzywuzzy для получения оценки.

Мои целевые данные составляют около 67 КБ, а справочные данные - почти 4 МБ, я создал цикл, и одна итерация занимает около + - 19 минут,Можно ли как-нибудь ускорить мой цикл?

%%timeit
df11['NEW'] = ""
for i in range(0, 4):
    df11['NEW'] = process.extractOne(df11['Desc 1'][i], df['Description 2'])

df11.head()

1 Ответ

0 голосов
/ 11 ноября 2019

при условии:

  1. , что целевые строки / choice все относительно длинные (например,> 20 символов) и не все они очень похожи (например, различаются только один или два символа)
  2. расстояние редактирования между запросом и «лучшей» целью относительно невелико (например, изменено <10% символов) </li>

, тогда, вероятно, я бы использовал триграммы дляиндексировать строки, а затем игнорировать целевые строки, у которых недостаточно триграмм из запросов

Я играл с "20 набором данных группы новостей" , и он забирает мой ноутбук:

  • 45 секунд для запуска fuzzywuzzy.extractOne с использованием этих строк в качестве выбора / цели
  • 0,3 секунды для поиска ближайшей строки с использованием триграмм

это былопосле:

  1. 6 секунд для загрузки 477948 строк текста из 18828 электронных писем
  2. 15 секунд для преобразования строк в словарь из 317324 триграмм

мой код довольно хакерский, но я могу привести его в порядок, вероятно, уменьшитобщее время выполнения до дня или около того для всех 67k строк вашего запроса, может быть, всего несколько часов, если вы сделали это параллельно с multiprocessing

...