Нечеткое сопоставление имен между двумя файлами Excel для заполнения сумм в Python

Вопрос или проблема

В рамках моей стажировки я работаю над проектом, где мне нужно обработать два файла Excel:

Файл 1 содержит имена и числа. Файл 2 содержит имена и пустую колонку для сумм.

Цель — сопоставить имена из Файла 1 с именами в Файле 2 и правильно заполнить соответствующие суммы. Однако имена могут иметь небольшие различия в написании или форматировании между двумя файлами (например, опечатки, разное разбиение или сокращения).

Для решения этой задачи я в данный момент использую TheFuzz (FuzzyWuzzy) в Python для приблизительного сопоставления строк. Я заметил, что выбор правильного порога сходства является ключевым моментом — если установить его слишком низко, возникают неверные совпадения, а если слишком высоко, могут быть упущены верные совпадения.

Я также рассматриваю возможность использования API LLM для повышения точности сопоставления.

Существуют ли другие библиотеки или подходы в Python, которые могли бы улучшить нечеткое сопоставление для этой задачи?

Кто-нибудь использовал LLM для этой проблемы, и если да, то насколько это было эффективно?

Спасибо за вашу помощь

Я использовал TheFuzz (FuzzyWuzzy) в Python для нечеткого сопоставления между именами в двух файлах Excel. Я экспериментировал с различными порогами сходства, чтобы сбалансировать точность и полноту.

Ответ или решение

Теория

Фаззи-матчинг (fuzzy matching) представляет собой метод, используемый для сопоставления нечетких данных. Это особенно полезно при работе с текстом, где могут быть разногласия из-за опечаток, вариаций в форматировании, аббревиатур и других факторов, делающих прямое сравнение неэффективным. В Python популярной библиотекой для таких задач является TheFuzz (ранее известная как FuzzyWuzzy), которая позволяет сравнивать строки на основе сходства Левенштейна.

Основная идея фаззи-матчинга заключается в оценке степени сходства между двумя строками и последующем выборе наилучшего совпадения по определенному порогу (threshold). Однако выбор правильного порога может быть непростой задачей: слишком низкий порог приведет к ошибочным совпадениям, в то время как слишком высокий — к пропущенным совпадениям.

Пример

Рассмотрим два файла Excel:

  1. Файл 1: Содержит столбцы с именами и соответствующими значениями.
  2. Файл 2: Содержит столбец с именами и пустой столбец для значений, которые необходимо заполнить.

Как правило, имена в этих файлах могут иметь разную запись: опечатки, лишние пробелы или различные сокращения (например, "Иванов И.И." и "Иванов Игорь Иванович").

Применяя TheFuzz, можно собрать коэффициенты сходства между каждой парой имен и выбрать наиболее близкие соответствия на основе указанного порога. Тем не менее, выбор порога требует тщательной настройки. Например, использование коэффициента сходства более 80 может считаться безопасным для имен с небольшими различиями, однако в этом случае можно пропустить пары, где различия более значительные.

Применение

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

  1. RapidFuzz: Это более быстрая альтернатива TheFuzz, которая также предоставляет дополнительные функции для тонкой настройки совпадений.

  2. TextDistance: Эта библиотека поддерживает различные алгоритмы для сравнения строк и может быть полезна в задачах, требующих специфических метрик сходства.

  3. Deep Learning / LLM (Large Language Models): Применение больших языковых моделей, таких как GPT-3, может значительно улучшить качество сопоставления благодаря их способности понимать контекст и структуру языка. API-интерфейсы для работы с такими моделями, например OpenAI, могут помочь в сложных случаях, где традиционные алгоритмы не справляются.

  4. Machine Learning модели: Технологии обучения позволяют создавать кастомизированные модели на основе существующих данных. Модели, обученные на похожих данных, могут эффективно справляться с сложными случаями сопоставления.

Для вашего проекта я рекомендую следующий подход:

  1. Начните с настройки TheFuzz, экспериментируйте с различными значениями порога и рассмотрите использование функции process.extractOne для извлечения наилучшего совпадения.

  2. Изучите возможности использования RapidFuzz, если производительность становится критичной.

  3. Если задачи становятся слишком сложными, рассмотрите интеграцию с LLM API для улучшения качества совпадений. Большие языковые модели могут обрабатывать контекст более глубоко и предлагает сложные сопоставления.

  4. Подумайте об автоматизации процесса при помощи pandas, чтобы обрабатывать сами Excel-файлы, используя функции обработки данных этой библиотеки для быстрой постановки и извлечения совпадений.

Применяя указанные методы и подходы, вы сможете эффективно выполнить задачу по автоматическому заполнению данных, снизив вероятность ошибок и существенно увеличив точность и воспроизводимость процесса.

Оцените материал
Добавить комментарий

Капча загружается...