Нечеткое сопоставление на основе предыдущих совпадений в Access / Excel - PullRequest
0 голосов
/ 02 мая 2018

У меня есть список из 20-30 тысяч пунктов отгрузки компании, которые я использую для работы. Есть два поля, одно из которых содержит название корабля для местоположения и поле, которое я создал, чтобы сгруппировать их, так как нет уникального идентификатора. Например:

JACKS SPORT # 345 ДЖЕК СПОРТИВНЫЙ 763 ЛУЧИ ЛОДКИ ОРЛАНДО FL ЛУЧШАЯ ЛОДКА FLORIDA СКЛАД ДЖЕК СПОРТ

В своей области я создаю общее имя, такое как Jacks Sporting Goods и Rays Boats для вышеупомянутого.

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

В поисках нечеткого совпадения на основе всех предыдущих совпадений и уже сделанных вариаций. Таким образом, вместо того, чтобы пытаться сопоставить мои Rays Boats, он будет искать все варианты Rays Boats в первом столбце и находить новые совпадения, основанные на сотнях различных способов, которые появились ранее.

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

Есть предложения? Я попробовал бесплатный инструмент нечеткого соответствия от Microsoft, но нет способа использовать VBA для автоматизации процесса ...

Ответы [ 2 ]

0 голосов
/ 22 июня 2018

Если у вас есть пользователи, введите имя в форму MS Access и хотите запросить имя в режиме реального времени, наиболее эффективным способом будет использование запроса с подстановочными знаками:

SELECT field_to_query 
FROM table_name
WHERE field_to_query LIKE "*text to search for*";

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

Вы даже можете создать упрощенный метод TF-IDF для сравнения каждого местоположения с каждым новым введенным местоположением. Чтобы сделать это, вы должны разделить все слова во всех именах, отслеживая, какое имя содержит какие слова. Вычислите частоту термина (TF), посчитав, сколько раз данное слово появляется в локации, деленное на количество слов в локации. Рассчитайте частоту обратных документов (IDF), разделив количество мест, разделенное на количество мест, содержащих слова. Затем вы используете подсчитанные вами баллы TF-IDF для определения ближайшего совпадения. Это, безусловно, самый сложный и самый медленный.

0 голосов
/ 05 мая 2018

Все, что можно сделать, это запрос с подстановочными знаками (т. Е. * Символ)

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

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

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