У меня есть большая база данных (возможно, в миллионах записей) с относительно короткими строками текста (по порядку адреса, имен и т.д.).
Я ищу стратегию удаления неточных копий, и выбор нечеткого соответствия - это метод выбора. Моя проблема: многие статьи и вопросы SO касаются сопоставления одной строки со всеми записями в базе данных. Я ищу, чтобы дедуплицировать всю базу данных сразу.
Первая была бы линейной проблемой времени (сравнивая значение с миллионом других значений, каждый раз вычисляя некоторое сходство). Последнее представляет собой проблему экспоненциального времени (сравнивайте все значения записи со всеми другими значениями записи, для миллиона записей - это около 5 x 10 ^ 11 вычислений и 1000 000 вычислений для первого варианта).
Мне интересно, есть ли другой подход, чем упомянутый мною метод "грубой силы". Я думал о возможности создания строки для сравнения каждого значения записи против, а затем группировать строки, которые имели примерно равные меры сходства, а затем запускать метод грубой силы через эти группы. Я бы не добился линейного времени, но это могло бы помочь. Кроме того, если я правильно это рассмотрю, это может пропустить потенциальное нечеткое совпадение между строками A и B, потому что их сходство с строкой C (сгенерированная контрольная строка) очень отличается, несмотря на то, что они очень похожи друг на друга.
Любые идеи?
P.S. Я понимаю, что, возможно, использовал неправильные термины для временной сложности - это концепция, в которой я имею базовое понимание, но недостаточно хорошо, поэтому я мог отбросить алгоритм в соответствующую категорию на месте. Если я неправильно использовал термины, я приветствую исправления, но, надеюсь, у меня есть точка зрения по крайней мере.
Edit
Некоторые комментаторы задавали вопрос с учетом нечетких совпадений между записями, что моя стратегия заключалась в том, чтобы выбрать, какие из них нужно удалить (т.е. данные "foo", "boo" и "coo", которые будут отмечены дублированием и удалены). Я должен отметить, что я не ищу автоматического удаления здесь. Идея состоит в том, чтобы пометить потенциальные дубликаты в 60-миллионной базе данных записей для целей оценки и оценки человека. Это нормально, если есть ложные срабатывания, если это примерно предсказуемое/согласованное количество. Мне просто нужно понять, насколько распространены дубликаты. Но если пропуски с нечетким сопоставлением проходят месяц, это даже не вариант.