Как вычислить похожесть строк?

Всем доброго времени суток.
Есть 2+ массива (в каждом около 2к элементов) в них лежат схожие данные , например:
1. Россия. Крупный бизнес. Московская область, г. Подольск, ул. Макеева, д.14, кв. 2.
2. Russia - Бизнес > 100 сотрудников. М.O, Подольск, ул Макеева 14, 2.
3. РФ. Частный Бизнес (крупный) . Москва (область), Подольск, улица Макеева, дом 14, квартира 2.

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

Заранее всем откликнувшимся спасибо и плюс в карму :)

П.С. Если есть готовые библиотеки решающие данную задачу, буду рад ссылкам.
П.С.С. Подходят решения как с MachineLearning, нейросетей, семантического анализа, либо алгоритмов на подобии Левенштейна (только более эффективных, либо в совокупности с ним).
  • Вопрос задан
  • 525 просмотров
Решения вопроса 1
@qxcoder Автор вопроса
---
Нашел на тостере решение, которое, возможно, подойдет идеально для моей задачи. Спасибо всем, кто откликнулся) Т.к. у меня строки имеют определенную структуру (последовательность), то думаю, что идеально подойдет такой вариант.
"Если же хотите именно сами все сделать, то надо составить базу всех городов, их синонимов, сокращений (Санкт-Петербург, Питер, СПб и т.д.) и перебирать. Потом добавить неточный поиск и исправление ошибок."

Порекомендовал его Boris Korobkov в посте (https://toster.ru/q/593468). И ему спасибо )
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
similar_text — Вычисляет степень похожести двух строк
Ответ написан
nekipelov
@nekipelov
Получается, можно отделить описание от адреса. Поэтому проще будет получить гео координаты (например через https://tech.yandex.ru/maps/geocoder/) по адресу и если они одинаковые, считать строки похожими.

Более сложный вариант: написать простенький парсер адресов. Решать конфликты через однозначное совпадение по адресу.

Какую именно строку использовать из похожих, видимо неважно. Можно случайную, или самую длинную... Тут вам виднее.
Ответ написан
@4tlen
Для начала четко сформулируйте критерий похожести, без понимания задачи подобрать решение проще всего подбрасыванием монетки. Если это адреса, то как уже советовали прогнать через геокодер. И, например, считать похожими адреса в радиусе Х (чтобы вычесть квартиры, строения и прочее).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы