при условии:
- , что целевые строки /
choice
все относительно длинные (например,> 20 символов) и не все они очень похожи (например, различаются только один или два символа) - расстояние редактирования между запросом и «лучшей» целью относительно невелико (например, изменено <10% символов) </li>
, тогда, вероятно, я бы использовал триграммы дляиндексировать строки, а затем игнорировать целевые строки, у которых недостаточно триграмм из запросов
Я играл с "20 набором данных группы новостей" , и он забирает мой ноутбук:
- 45 секунд для запуска
fuzzywuzzy.extractOne
с использованием этих строк в качестве выбора / цели - 0,3 секунды для поиска ближайшей строки с использованием триграмм
это былопосле:
- 6 секунд для загрузки 477948 строк текста из 18828 электронных писем
- 15 секунд для преобразования строк в словарь из 317324 триграмм
мой код довольно хакерский, но я могу привести его в порядок, вероятно, уменьшитобщее время выполнения до дня или около того для всех 67k строк вашего запроса, может быть, всего несколько часов, если вы сделали это параллельно с multiprocessing