Нечеткое совпадение записей с несколькими столбцами информации - PullRequest
5 голосов
/ 08 марта 2011

У меня вопрос довольно высокого уровня, поэтому я постараюсь быть максимально конкретным.

Я провожу много исследований, которые включают в себя объединение разнородных наборов данных с информацией заголовка, относящейся к одной и той же сущности, обычно компании или финансовой безопасности. Это связывание записей обычно включает в себя информацию заголовка, в которой имя является единственным общим первичным идентификатором, но где часто доступна некоторая вторичная информация (например, город и штат, даты работы, относительный размер и т. Д.). Эти совпадения обычно бывают один-ко-многим, но могут быть один-к-одному или даже многие-ко-многим. Я обычно делал это сопоставление вручную или с очень простым сравнением текста очищенных подстрок. Иногда я использовал простой алгоритм сопоставления, такой как мера расстояния Левенштейна, но я никогда не получал от него многого, отчасти потому, что у меня не было хорошего формального способа его применения.

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

У меня следующий вопрос:

  • Кто-нибудь знает хороший источник для реализации многомерного нечеткого сопоставления записей, например, книгу или веб-сайт, опубликованную статью или рабочий документ?

  • Я бы предпочел что-то с практическими примерами и четко определенным подходом.

  • Подход может быть итеративным, с человеческими проверками на улучшение на промежуточных этапах.

  • ( edit ) Связанные данные используются для статистического анализа. Таким образом, немного шума в порядке, но существует сильное предпочтение меньшего количества «неправильных совпадений» по сравнению с меньшим количеством «неправильных несоответствий».

  • Если бы они были на Python, это было бы замечательно, но не обязательно.

И последнее, если это имеет значение, это то, что меня не очень заботит эффективность вычислений. Я не реализую это динамически, и я обычно имею дело с несколькими тысячами записей.

Ответы [ 2 ]

2 голосов
/ 08 марта 2011

Одним из распространенных методов, который не должен быть ужасно дорогим для «нескольких тысяч записей», будет косинусное сходство . Хотя это чаще всего используется для сравнения текстовых документов, вы можете легко изменить его для работы с любыми данными.

Связанная статья в Википедии довольно скудна по деталям, но если перейти по ссылкам и сделать несколько поисков, вы получите некоторую полезную информацию. Потенциально реализация, которую вы можете изменить в соответствии со своими целями. Фактически, взгляните на Простую реализацию сходства N-Gram, tf-idf и Cosine в Python

Более простым расчетом, который может быть "достаточно хорошим" для ваших целей, будет индекс Джакарда . Основное отличие состоит в том, что обычно косинусное сходство учитывает количество раз, когда слово используется в документе и во всем наборе документов, в то время как индекс Жакара заботится только о том, чтобы в документе было определенное слово. Есть и другие отличия, но это кажется мне самым важным.

0 голосов
/ 24 сентября 2016

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...