Нечеткое сопоставление адресов с использованием Rapid Fuzz

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

Я использую RapidFuzz для сопоставления адресов в США из двух отдельных наборов данных.

Я смог получить результаты, которые искал, используя следующий код:

for address in EB_RATING_LIST:
    matches1.append(process.extractOne(address,CLAIMS_LIST, scorer = fuzz.ratio))
DAVE_EB_NO_DUPLICATES_ADDRESS['MATCHED_ADDRESS'] = matches1

Но у меня нет полной уверенности в полученных результатах. Например:

10 Washington Street имеет 86% совпадения с: 102 Washington Street

Мой вопрос: как я могу продолжить нечеткое сопоставление на более детальном уровне?
Стоит ли включать почтовый индекс и штат для сопоставления?

ИЗМЕНЕНИЕ 09/14/21: Я объединяю адрес с городом и штатом и затем пытаюсь сопоставить. Поделюсь результатами, как только их получу.

ИЗМЕНЕНИЕ 09/15/21: Я объединил адрес, включив в него название штата и города вместе с адресом и затем попробовал нечеткое сопоставление.

ПРИМЕР: ***5805thAveStes323&416NewYorkNY   
(3505thAveNewYorkNY, 72.34042553191489, 9315)***
[Адрес, который наиболее совпадает, процент совпадения, индекс адреса (из таблицы, используемой для сопоставления)]

Возможно, я опоздал с ответом, так как только сегодня присоединился к сообществу. Чтобы углубиться, просто измените алгоритм оценки на другие, такие как token sort ratio, partial ratio или token set ratio, в зависимости от вашего случая использования. Сначала протестируйте два набора строк со всеми этими коэффициентами и найдите, какой подходит вам. Надеюсь, это поможет.
Чтобы узнать больше, нажмите здесь (просматривать в режиме инкогнито, если требуется подписка) –> https://medium.com/mlearning-ai/all-about-rapidfuzz-string-similarity-and-matching-cd26fdc963d8

.

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

Фаззийное сопоставление адресов с использованием RapidFuzz является важной задачей, особенно когда требуется сопоставить данные из различных источников, чтобы избежать дубликатов и улучшить точность результатов. Основная проблема, с которой часто сталкиваются при сопоставлении адресов, заключается в вариабельности формата и орфографии, которая может привести к неточным или ошибочным результатам.

Теория: Фаззийное сравнение строк, и в частности библиотека RapidFuzz, предлагает набор инструментов, которые позволяют измерять схожесть строк на основе различных алгоритмов, таких как fuzz.ratio, fuzz.partial_ratio, fuzz.token_sort_ratio и fuzz.token_set_ratio. Однако, учитывая природу адресов, которые часто содержат как числовые, так и текстовые компоненты, важно выбрать метод, который будет наиболее эффективно учитывать эту специфику. Simple совпадение может приводить к высоким процентам даже в случае небольших отличий, например, "10 Washington Street" и "102 Washington Street". Использование более сложных алгоритмов, таких как token_sort_ratio или token_set_ratio, может помочь улучшить точность путем учета перестановок и наборов токенов.

Пример: Посмотрим на ваш текущий код:

for address in EB_RATING_LIST:
    matches1.append(process.extractOne(address, CLAIMS_LIST, scorer=fuzz.ratio))
DAVE_EB_NO_DUPLICATES_ADDRESS['MATCHED_ADDRESS'] = matches1

Этот код использует метод extractOne с симпл-скором fuzz.ratio, который может быть чувствителен к изменению порядка символов и не учитывать особенности адресов. Решением может стать использование других скореров, например, fuzz.token_sort_ratio, который будет учитывать порядок слов.

Применение: В контексте адресов, добавление дополнительных компонентов — таких как ZIP код, город и штат — в строку для сопоставления может значительно улучшить качество сопоставления. Например, вы уже попробовали конкатенировать адрес с городом и штатом:

EXAMPLE: ***5805thAveStes323&416NewYorkNY   
(3505thAveNewYorkNY, 72.34042553191489, 9315)***

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

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

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

В итоге, несмотря на то, что RapidFuzz предоставляет обширный инструментарий для фаззийного сопоставления строк, наиболее оптимальные результаты можно получить, комбинируя и тестируя различные методы и подходы. Если ваша цель — достичь наибольшей точности, рекомендуется использовать методологию тестирования и итерации, чтобы адаптировать решения под конкретные требования и особенности данных вашего проекта.

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

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