Вопрос или проблема
В рамках моей стажировки я работаю над проектом, где мне нужно обработать два файла Excel:
Файл 1 содержит имена и числа. Файл 2 содержит имена и пустую колонку для сумм.
Цель — сопоставить имена из Файла 1 с именами в Файле 2 и правильно заполнить соответствующие суммы. Однако имена могут иметь небольшие различия в написании или форматировании между двумя файлами (например, опечатки, разное разбиение или сокращения).
Для решения этой задачи я в данный момент использую TheFuzz (FuzzyWuzzy) в Python для приблизительного сопоставления строк. Я заметил, что выбор правильного порога сходства является ключевым моментом — если установить его слишком низко, возникают неверные совпадения, а если слишком высоко, могут быть упущены верные совпадения.
Я также рассматриваю возможность использования API LLM для повышения точности сопоставления.
Существуют ли другие библиотеки или подходы в Python, которые могли бы улучшить нечеткое сопоставление для этой задачи?
Кто-нибудь использовал LLM для этой проблемы, и если да, то насколько это было эффективно?
Спасибо за вашу помощь
Я использовал TheFuzz (FuzzyWuzzy) в Python для нечеткого сопоставления между именами в двух файлах Excel. Я экспериментировал с различными порогами сходства, чтобы сбалансировать точность и полноту.
Ответ или решение
Теория
Фаззи-матчинг (fuzzy matching) представляет собой метод, используемый для сопоставления нечетких данных. Это особенно полезно при работе с текстом, где могут быть разногласия из-за опечаток, вариаций в форматировании, аббревиатур и других факторов, делающих прямое сравнение неэффективным. В Python популярной библиотекой для таких задач является TheFuzz (ранее известная как FuzzyWuzzy), которая позволяет сравнивать строки на основе сходства Левенштейна.
Основная идея фаззи-матчинга заключается в оценке степени сходства между двумя строками и последующем выборе наилучшего совпадения по определенному порогу (threshold). Однако выбор правильного порога может быть непростой задачей: слишком низкий порог приведет к ошибочным совпадениям, в то время как слишком высокий — к пропущенным совпадениям.
Пример
Рассмотрим два файла Excel:
- Файл 1: Содержит столбцы с именами и соответствующими значениями.
- Файл 2: Содержит столбец с именами и пустой столбец для значений, которые необходимо заполнить.
Как правило, имена в этих файлах могут иметь разную запись: опечатки, лишние пробелы или различные сокращения (например, "Иванов И.И." и "Иванов Игорь Иванович").
Применяя TheFuzz, можно собрать коэффициенты сходства между каждой парой имен и выбрать наиболее близкие соответствия на основе указанного порога. Тем не менее, выбор порога требует тщательной настройки. Например, использование коэффициента сходства более 80 может считаться безопасным для имен с небольшими различиями, однако в этом случае можно пропустить пары, где различия более значительные.
Применение
Помимо использования TheFuzz, существуют и другие подходы и библиотеки, которые могут повысить точность сопоставления:
-
RapidFuzz: Это более быстрая альтернатива TheFuzz, которая также предоставляет дополнительные функции для тонкой настройки совпадений.
-
TextDistance: Эта библиотека поддерживает различные алгоритмы для сравнения строк и может быть полезна в задачах, требующих специфических метрик сходства.
-
Deep Learning / LLM (Large Language Models): Применение больших языковых моделей, таких как GPT-3, может значительно улучшить качество сопоставления благодаря их способности понимать контекст и структуру языка. API-интерфейсы для работы с такими моделями, например OpenAI, могут помочь в сложных случаях, где традиционные алгоритмы не справляются.
-
Machine Learning модели: Технологии обучения позволяют создавать кастомизированные модели на основе существующих данных. Модели, обученные на похожих данных, могут эффективно справляться с сложными случаями сопоставления.
Для вашего проекта я рекомендую следующий подход:
-
Начните с настройки TheFuzz, экспериментируйте с различными значениями порога и рассмотрите использование функции
process.extractOne
для извлечения наилучшего совпадения. -
Изучите возможности использования RapidFuzz, если производительность становится критичной.
-
Если задачи становятся слишком сложными, рассмотрите интеграцию с LLM API для улучшения качества совпадений. Большие языковые модели могут обрабатывать контекст более глубоко и предлагает сложные сопоставления.
-
Подумайте об автоматизации процесса при помощи pandas, чтобы обрабатывать сами Excel-файлы, используя функции обработки данных этой библиотеки для быстрой постановки и извлечения совпадений.
Применяя указанные методы и подходы, вы сможете эффективно выполнить задачу по автоматическому заполнению данных, снизив вероятность ошибок и существенно увеличив точность и воспроизводимость процесса.