Хороший базовый уровень , вероятно, непрактичный с точки зрения его относительно высокой вычислительной стоимости и, что более важно, его производства множества ложноположительных результатов, будет общим алгоритмом расстояния строки, таким как
В зависимости от требуемого уровня точности (который, кстати, следует указывать как с точки зрения его отзыва и точности , т. Е. Обычно выражая, является ли он более важно пропустить корреляцию, чем ошибочно идентифицировать ее), самодельный процесс, основанный на [некоторых] следующих эвристиках и идеях, мог бы добиться цели :
- токенизирует ввод, т.е. видит ввод как массив слов, а не как строку
- токенизация также должна содержать информацию о номере строки
- нормализует ввод с использованием краткого словаря общих замен (таких как «dr» в конце строки = «drive», «Jack» = «John», «Bill» = «William» .. ., "W" в начале строки - "Запад" и т. Д.
- Определение (немного похоже на тегирование, как в тегах POS) природы некоторых объектов (например, почтового индекса и расширенного почтового индекса, а также города
- Идентифицируйте (ищите) некоторые из этих объектов (например, сравнительная короткая таблица базы данных может включать все города / города в целевой области
- Идентифицируйте (ищите) некоторые связанные с доменом объекты (если все / многие адреса касаются, скажем, юристов в юридической профессии, может помочь поиск названий юридических фирм или федеральных зданий.
- Как правило, добавьте больше веса к токенам, которые идут из последней строки адреса
- Надеть больший (или меньший) вес на токены с определенным типом сущности (например, «Драйв», «Улица», «Суд» следует с гораздо меньшим количеством токенов, которые предшествуют им.
- Рассмотрим модифицированный SOUNDEX алгоритм, помогающий нормализовать
Учитывая вышесказанное, реализуйте оценщик на основе правил . Ориентировочно, правила могут быть реализованы как посетители древовидной / массивной структуры, где входные данные анализируются изначально ( Шаблон проектирования посетителя ).
Преимущество основанной на правилах структуры состоит в том, что каждая эвристика выполняет свои собственные функции, и правила могут быть приоритетными, т.е. помещать некоторые правила в начале цепочки, позволяя преждевременно прервать оценку, с некоторой сильной эвристикой (например, другой город = > Корреляция = 0, уровень доверия = 95% и т. Д.).
Важным соображением при поиске корреляций является необходимость a priori сравнить каждый отдельный элемент (здесь адрес) с каждым другим элементом , следовательно, требуется до 1/2 n^2
элемента Уровневые сравнения. Из-за этого может быть полезно хранить ссылочные элементы таким образом, чтобы они были предварительно обработаны (проанализированы, нормализованы ...), а также, возможно, иметь дайджест / ключ сортировки , который может быть используется как [очень грубый] индикатор возможной корреляции (например, ключ из 5-значного ZIP-кода, за которым следует значение SOUNDEX «основного» имени).