Нечеткий текстовый поиск в excel

Одна из самых неприятных ситуаций, с которой может столкнуться пользователь при работе в Microsoft Excel — это поиск и подстановка данных с неточным совпадением. Когда вам надо подставить данные из одной таблицы в другую, но вы при этом уверены, что в обеих таблицах совпадающие элементы называются одинаково, то проблем нет — к вашим услугам множество способов: функции ВПР и её аналоги, надстройка Power Query и т.д.

А вот если в одной таблице «Пупкин Василий», а в другой просто «Пупкин», или «Пупкин В.», или даже «Пупкен», то все эти красивые способы не работают. Причем на практике такое встречается постоянно, особенно с почтовыми адресами или названиями компаний:

Неточный поиск адресов

Обратите внимание на различные типы несоответствий, которые могут встречаться:

  • переставлены местами улица, город, дом
  • отсутствует какая-то часть адреса или, наоборот, есть что-то лишнее (индекс, номер квартиры)
  • по-разному записан город (с буквой «г.» или без) или улица
  • опечатки и ошибки (Козань вместо Казань)

Про точное соответствие или даже поиск по маске тут говорить не приходится. Помочь в таком случае могут только специальные макросы или надстройки для Excel. Про одну из таких макро-функций на VBA я уже писал, а здесь хочется рассказать про еще один вариант решения подобной задачи — надстройку Fuzzy Lookup от компании Microsoft.

Эта надстройка существует с 2011 года и совершенно бесплатно скачивается с сайта Microsoft. Системные требования: Windows 7 или новее, Office 2007 или новее, соответственно. После установки у вас в Excel появляется одноименная вкладка с единственной кнопкой на ней:

Кнопка надстройки Fuzzy Lookup

Нажатие на эту кнопку включает специальную панель в правой части окна Excel, где и задаются все настройки поиска:

Неточный поиск в Fuzzy Lookup

Сразу хочу отметить, что эта надстройка умеет работать только с умными таблицами, поэтому все исходные таблицы нужно конвертировать в умные с помощью сочетания Ctrl+T или кнопки Форматировать как таблицу на вкладке Главная (Home — Format as Table):

Алгоритм действий при работе с надстройкой Fuzzy Lookup следующий:

  1. Выберите какие таблицы нужно связать в выпадающих списках Left и Right Table.
  2. Выберите ключевые столбцы в левой и правой таблицах, по которым нужно проверить соответствие и нажмите кнопку для добавления созданной пары в список Match Columns
  3. В списке Output Columns отметьте галочками столбцы, которые вы хотите получить на выходе в качестве результата.
  4. Установите активную ячейку в пустое место на листе, куда вы хотите вывести данные
  5. Нажмите кнопку Go

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

Результат

Лепота!

Нюансы и подводные камни

  • Точность подбора можно регулировать с помощью ползунка Similarity Threshold в нижней части панели Fuzzy Lookup. Чем правее его положение, тем строже будет поиск, и — как следствие — тем меньше результатов надстройка будет находить. Если сдвинуть его влево, то результатов станет больше, но возрастет риск ошибочного совпадения. Тут все зависит от вашей конкретной ситуации — экспериментируйте.
  • На больших таблицах поиск может занимать приличное количество времени (до нескольких десятков секунд), хотя многое, конечно, зависит от мощности вашего компьютера. Как вариант, для ускорения в настройках (кнопка Configure в нижней части панели) можно попробовать включить параметр UseApproximateIndexing в разделе Global Settings.
  • Перед нажатием на кнопку Go не забудьте выделить пустую ячейку, начиная с которой вы хотите вывести результаты. Если случайно вы оставите активную ячейку где-нибудь в исходных данных, то надстройка выведет итоговую таблицу прямо поверх них, и вы их потеряете. Причем отмена последнего действия будет невозможна, а кнопка Undo в нижней части панели не всегда срабатывает почему-то.
  • Для вывода столбца с коэффициентом подобия FuzzyLookup.Similarity необходимо, чтобы у вашего Excel была точка в качестве десятичного разделителя (целой и дробной части). Если это не так, то эту настройку временно можно поменять через Файл — Параметры — Дополнительно (File — Options — Advanced).
  • Fuzzy Lookup — это не обычная надстройка, написанная на VBA (как мой PLEX, например), а COM-надстройка. Разница в том, что она устанавливается как отдельная программа, т.е. вам нужны соответствующие права на установку ПО на вашем компьютере. Дома, ясное дело, проблем не будет, а вот многим корпоративным пользователям, скорее всего, придется обращаться к вашим айтишникам. После установки отключать и подключать ее в дальнейшем можно на вкладке Разработчик — Надстройки COM (Developer — COM Add-ins).

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

Ссылки по теме

  • Неточный поиск ближайшего похожего текста с помощью макрофункции
  • Анализ текста регулярными выражениями (RegExp) в Excel
  • Ссылка на скачивание надстройки Fuzzy Lookup с сайта Microsoft

Иногда нам нужно не только выполнить точный поиск, но и выполнить нечеткий поиск, как показано на скриншоте ниже. Собственно, в Excel функция «Найти и заменить» несколько помогает при нечетком поиске.

Нечеткий поиск с помощью функции «Найти и заменить»

Нечеткий поиск одного или нескольких значений с помощью удобного инструмента

Образец файла


Нечеткий поиск с помощью функции «Найти и заменить»

Предположим, у вас есть диапазон A1: B6, как показано на скриншоте ниже, вы хотите нечеткую строку поиска «яблоко» без учета регистра или «приложение» в этом диапазоне. Вы можете применить функцию «Найти и заменить» для обработки задания.
документ нечеткий поиск 1

Искать без учета регистра

1. Выберите диапазон, который хотите найти, нажмите Ctrl + F ключи для включения Найти и заменить функции, введите строку, которую вы хотите найти, в текстовое поле Найти.
документ нечеткий поиск 02

2. Нажмите Опции чтобы развернуть диалоговое окно, снимите флажок Учитывать регистр вариант, но проверьте Соответствие всему содержимому ячейки опцию.
документ нечеткий поиск 03

3. Нажмите Найти все, строки перечислены без учета регистра.
документ нечеткий поиск 04

Найдите часть строки

1. Выберите диапазон и нажмите Ctrl + F ключи для включения Найти и заменить функции и введите строку детали, которую вы хотите найти, в Найти то, что текстовое поле, снимите флажок Соответствие всему содержимому ячейки вариант, при необходимости также можно снять отметку Учитывать регистр.
документ нечеткий поиск 05

2. Нажмите Найти все, перечислены ячейки, содержащие строку.
документ нечеткий поиск 06


Нечеткий поиск одного или нескольких значений с помощью удобного инструмента

Если вам нужно найти приблизительно одно значение или узнать все приблизительные значения одновременно, вы можете использовать Нечеткий поиск особенность Kutools for Excel.

После бесплатная установка Kutools for Excel, пожалуйста, сделайте следующее:

Найдите примерно одно значение

Предположим, вы хотите найти значение «приложение» в диапазоне A1: A7, но количество различных символов не может быть больше 2, а количество символов должно быть больше 1.
документ нечеткий поиск 07

1. Нажмите Кутулс > Найти > Нечеткий поиск для Нечеткий поиск панель.
документ нечеткий поиск 08

2. На всплывающей панели выполните следующие действия:

1) Выберите диапазон, который вы использовали для поиска, вы можете проверить Указанный чтобы зафиксировать диапазон поиска.

2) Проверить Найти по указанному тексту флажок.

3) Введите значение, по которому вы хотите выполнить нечеткий поиск, в поле Текст текстовое окно.

4) Задайте нужные критерии поиска.
документ нечеткий поиск 09

3. Нажмите Найти кнопку, затем щелкните стрелку вниз, чтобы развернуть список и просмотреть результаты поиска.
документ нечеткий поиск 10

Нечеткий поиск нескольких значений

Предположим, вы хотите найти все приблизительные значения в диапазоне A1: B7, вы можете сделать следующее:
документ нечеткий поиск 11

1. Нажмите Кутулс > Найти > Нечеткий поиск для Нечеткий поиск панель.

2. в Нечеткий поиск панели, выберите диапазон поиска, а затем укажите необходимые критерии поиска.
документ нечеткий поиск 12

3. Нажмите Найти кнопку, чтобы перейти к просмотру результатов поиска, затем щелкните стрелку вниз, чтобы развернуть список.
документ нечеткий поиск 13



Образец файла

Нажмите, чтобы загрузить образец файла


Прочие операции (статьи)

Найдите наибольшее отрицательное значение (меньше 0) в Excel
Найти наибольшее значение из диапазона очень легко для большинства пользователей Excel, но как насчет поиска наибольшего отрицательного значения (меньше 0) из диапазона данных, смешанного с отрицательными и положительными значениями?

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

Применение функции обратного поиска или поиска в Excel
Как правило, мы можем применить функцию поиска или поиска для поиска определенного текста слева направо в текстовой строке по определенному разделителю. Если вам нужно отменить функцию поиска, чтобы найти слово, начинающееся в конце строки, как показано на следующем снимке экрана, как вы могли бы это сделать?


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы и хранение данных; Разделить содержимое ячеек; Объедините повторяющиеся строки и сумму / среднее значение… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Избранные и быстро вставляйте формулы, Диапазоны, диаграммы и изображения; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Группировка сводной таблицы по номер недели, день недели и другое … Показать разблокированные, заблокированные ячейки разными цветами; Выделите ячейки, у которых есть формула / имя

вкладка kte 201905


Вкладка Office — предоставляет интерфейс с вкладками в Office и значительно упрощает вашу работу

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно


Often you may want to join together two datasets in Excel based on imperfectly matching strings. This is sometimes called fuzzy matching.

The easiest way to do so is by using the Fuzzy Lookup Add-In for Excel.

The following step-by-step example shows how to use this Add-in to perform fuzzy matching.

Step 1: Download Fuzzy Lookup Add-In

First, we need to download the Fuzzy Lookup Add-In from Excel.

It’s completely free and downloads in only a few seconds.

To download this Add-In, go to this page from Microsoft and click Download:

Then click the .exe file and follow the instructions to complete the download.

Step 2: Enter the Two Datasets

Next, let’s open Excel and enter the following information for two datasets:

We will perform fuzzy matching to match the team names from the first dataset with the team names in the second dataset.

Step 3: Create Tables from Datasets

Before we can perform fuzzy matching, we must first convert each dataset into a table.

To do so, highlight the cell range A1:B6 and then press Ctrl+L.

In the new window that appears, click OK:

The dataset will be converted into a table with the name Table1:

Repeat the same steps to convert the second dataset into a table with the name Table2:

To perform Fuzzy matching, click the Fuzzy Lookup tab along the top ribbon:

Then click the Fuzzy Lookup icon within this tab to bring up the Fuzzy Lookup panel.

Choose Table1 for the Left Table and Table2 for the Right Table.

Then highlight Team for Left Columns and Team for Right Columns and click the join icon between the boxes, then click Go:

The results of the fuzzy matching will be shown in the cell you currently have active in Excel:

From the results we can see that Excel was able to match each team name between the two datasets except for the Kings.

Excel also shows a Similarity score, which represents the similarity between 0 and 1 of the two names that it matched.

Feel free to adjust the minimum Similarity score within the Fuzzy Lookup panel to allow for matching between text values that have lower similarity scores.

Additional Resources

The following tutorials explain how to perform other common tasks in Excel:

How to Count Frequency of Text in Excel
How to Check if Cell Contains Text from List in Excel
How to Calculate Average If Cell Contains Text in Excel

Проблема нечёткого поиска

Когда мы имеем дело с текстом, вводимым человеком, то в нём неизбежны ненамеренные ошибки. Вместо «пер. Гоголя» человек может набрать «пер. Ноголя» просто потому, что промахнётся по нужной клавише и нажмёт соседнюю. В виду этого, возникает задача поставить в соответствие введеному слову слово словарное, которое в наибольшей степени похоже на то, что ввёл пользователь. Классическая задача — верификация названий улиц, населенных пунктов и т.п. Обычный поиск тут бессилен, так как введенное слово в словаре отсутствует. Обычный поиск в состоянии только установить этот факт, но не в состоянии предложить пользователю на выбор наиболее близкие варианты. Нужна реализация нечёткого поиска.

Что я предлагаю

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

Формат вызова: =FS_GetClosestWord( What ; Where ; [NumItem] ; [MinLen] ; [Compare] ; [Dbg] ) , где:

  • What — ссылка на ячейку, которая содержит искомую строку. Обратите внимание, что текстовая константа в формуле не будет воспринята, только ссылка на ячейку;

  • Where — ссылка на диапазон, содержащий словарь, в котором необходимо подобрать наиболее близкое к What слово. Словарь может быть в виде столбца, строки или состоять из произвольного размера диапазона. Имейте только в виду, что, задав словарь из большого количества слов (скажем больше 10000), или, если словарь содержит много очень длинных слов, то вы рискуете надолго подвесить систему;

  • [NumItem] — в процессе поиска строится коллекция наиболее подходящих слов, которые ранжируются по определенному алгоритму. NumItem определяет
    номер возвращаемого слова из этой коллеции. NumItem=1 возвращает наиболее близкое по мнению используемого алгоритма слово. Если указанный номер слишком велик и результирующая коллекция не содержит такого числа элементов, то возвращается ошибка #Н/Д;

  • [MinLen] — минимальная длинна буквенных комбинаций, на которые разбиваются слова из словаря и, которые потом ищутся в слове из What. Не может быть меньше 3. Если укажете меньше 3 или не укажете вовсе, то будет использовано значение 3;

  • [Compare] — тип сравнения строк: с учётом регистра или без учёта. 0 — с учётом регистра, 1 — без учёта регистра;

  • [Dbg] — если указать тут число большее 1, то включится режим отладки и в зависимости от того, что вы тут укажаете, сможете получить:

    • 1 — стандартное поведение, возвращающее близкое слово из Where;

    • 2 — найденная подстрока;

    • 3 — слепок найденного словарного слова;

    • 4 — разница по модулю между слепком найденного и искомого слова, которая используется для ранжирования найденных слов по уровню схожести с оригинальным словом (чем меньше разница, тем считаются более похожими слова).

Большинство пользователей обойдутся первыми двумя параметрами.

Скачать файл с функцией

Скачать

Если будете переносить руками в свой Excel VBA проект, то не забудьте помимо модуля Fuzzy, также перенести класс Search.

Теория нечёткого поиска

Изучая вопрос, в начале заглянул к Николаю Павлову в этот его рецепт. Даже нашёл у него ошибки. Однако с самого начало было понятно, что предложенный алгоритм для общего случая будет неприемлем из-за медленной скорости, поэтому изыскания были продолжены. Отличный обзор алгоритмов нечёткого поиска дан в этой статье. Для своей реализации я выбрал метод N-грамм с привлечением хэширования по сигнатуре для оценки найденных вариантов.

Предположим, что у нас в словаре есть слово ПОМИДОР. Мой алгоритм разбивает это слово на подстроки длиной от 7 до 3 символов. 7 — длина слова в данном случае, а комбинации символов короче трёх символов использовать особого смысла нет.

  • 7 символов — 1 вариант (ПОМИДОР)

  • 6 символов — 2 варианта (ПОМИДО, ОМИДОР)

  • 5 символов — 3 варианта (ПОМИД, ОМИДО, МИДОР)

  • 4 символа — 4 варианта (ПОМИ, ОМИД, МИДО, ИДОР)

  • 3 символа — 5 вариантов (ПОМ, ОМИ, МИД, ИДО, ДОР)

  • Итого мы получили из слова ПОМИДОР 15 разных буквенных комбинаций.

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

Проблемы реализации нечёткого поиска

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

Поскольку всё реализовано в виде формулы рабочего листа, то основной способ улучшить производительность — это, чтобы каждая формула не расчитывала свою коллекцию буквенных комбинаций словаря, а использовала результаты однажды проделанной работы. Это было сделано через глобальные структуры. Однако это всё означает, что формула не отслеживает изменения в массиве Where. То есть считается, что диапазон Where статический и меняется редко.

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

Читайте также:

  • Извлекаем список уникальных значений из необработанных данных

  • Формирование случайных списков на основе справочника

  • Расширенное сравнение двух колонок (списков)

Skip to content

Ищем похожие записи и приблизительные совпадения

Быстрый способ выполнить приблизительный поиск в Excel

Используйте Fuzzy Duplicate Finder для поиска и исправления опечаток в таблицах Excel. Надстройка выполняет поиск частичных дубликатов, которые отличаются на от 1 до 10 символов, и распознает пропущенные, лишние или ошибочные символы. Вы просто выбираете, что исправить, делаете пару щелчков мышью и получаете в свое распоряжение исправленный набор данных.

  • 60-дневная безусловная гарантия возврата денег

  • Бесплатные обновления на 2 года
  • Бесплатная и бессрочная техническая поддержка

С помощью инструмента поиска Fuzzy Duplicate Finder вы сможете:

Искать в нескольких строках и столбцах

Найдите все похожие значения, которые отличаются от 1 до 10 символов.

Управляйте правильными вариантами написания

Замените найденные опечатки одним из слов из списка встречающихся вариантов или введите собственное наиболее правильное значение.

Быстро переходить между результатами поиска

Все найденные совпадения организованы по группам в зависимости от степени и характера совпадения.

Экспорт найденных опечаток

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

Приложение Ultimate Suite уже используют
companies logo

Что такое инструмент поиска похожих записей и для чего он мне нужен?

Fuzzy Duplicate Finder для Excel может помочь вам найти и исправить всевозможные частичные дубликаты, опечатки и слова с ошибками на ваших листах. Инструмент выполняет поиск нечетких дубликатов, которые отличаются на 1 — 10 символов, и распознает пропущенные, лишние или ошибочные символы. Это позволяет автоматически или вручную исправлять ошибки ввода и опечатки прямо в результатах поиска.

Почему бы не использовать программу проверки орфографии Excel для исправления опечаток?

Встроенная в Excel программа проверки орфографии и грамматики ищет только очевидные ошибки. Он не найдет все варианты с одним и тем же именем и не покажет вам список всех этих нечетких совпадений. Ведь опечатка или ошибка могут быть вполне орфографически правильны, но по смыслу — совершенно неверны. Более того, в стандартном словаре Excel может просто не хватать нужного вам значения.

А как насчет надстройки Microsoft Fuzzy Lookup для Excel?

Надстройка Fuzzy Lookup от Microsoft работает только в Excel 2007–2013 и может сравнивать данные только в двух похожих наборах данных, отформатированных в виде таблиц.

Эта же надстройка работает с любой версией Excel 2019, 2016–2010, а также Office 365, поддерживает все версии Windows и может обрабатывать любой диапазон ячеек независимо от его формата.

Как работает Fuzzy Duplicate Finder?

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

  1. Выберите диапазон ячеек для поиска.
  2. Установите максимальное количество различающихся символов.
  3. Установите максимальное количество символов в слове / ячейке.
  4. Нажмите кнопку «Поиск опечаток (Search for typos)» , чтобы увидеть все неверные значения.
  5. Выберите из списка или введите вручную правильное значение и нажмите Применить .

Могу ли я снова запустить поиск без перезапуска инструмента?

Да, просто нажмите кнопку «Новый поиск» в верхней части панели результатов, и все готово.

Что делать, если мне нужно использовать значение, отличное от предложенного, в качестве правильного?

Без проблем. Вы сможете выбрать правильное из списка значений или ввести совершенно другое слово, чтобы заменить им все найденные варианты.

Что произойдет, если мои слова в предложениях разделены какими-то необычными символами: &, _, — и т.д.? Надстройка будет работать?

Конечно, есть специальное поле, в котором можно указать разделители, используемые между словами.

Я не хочу сразу исправлять ошибки, я просто хочу посмотреть, есть ли они. Что мне делать?

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

Скачать  Ultimate Suite

Посмотреть все комментарии

Like this post? Please share to your friends:
  • Нецелые числа в excel
  • Неудаляемый элемент в microsoft excel
  • Неудаляемая ячейка в excel
  • Неточный текстовый поиск в excel
  • Неточный поиск в excel power query