Всем доброго времени суток.
Есть 2+ массива (в каждом около 2к элементов) в них лежат схожие данные , например:
1. Россия. Крупный бизнес. Московская область, г. Подольск, ул. Макеева, д.14, кв. 2.
2. Russia - Бизнес > 100 сотрудников. М.O, Подольск, ул Макеева 14, 2.
3. РФ. Частный Бизнес (крупный) . Москва (область), Подольск, улица Макеева, дом 14, квартира 2.
Нужно на выходе получить процент похожести этих строк и выбрать максимально похожие. Алгоритмов и их реализаций много, посоветуйте, пожалуйста, метод, при котором, будет максимальное быстродействие и терпимая схожесть.
Т.е. нужно перебрать все элементы с первого, второго и последующих массивов и найти похожие + записать их в новый массив.
Заранее всем откликнувшимся спасибо и плюс в карму :)
П.С. Если есть готовые библиотеки решающие данную задачу, буду рад ссылкам.
П.С.С. Подходят решения как с MachineLearning, нейросетей, семантического анализа, либо алгоритмов на подобии Левенштейна (только более эффективных, либо в совокупности с ним).
Нашел на тостере решение, которое, возможно, подойдет идеально для моей задачи. Спасибо всем, кто откликнулся) Т.к. у меня строки имеют определенную структуру (последовательность), то думаю, что идеально подойдет такой вариант.
"Если же хотите именно сами все сделать, то надо составить базу всех городов, их синонимов, сокращений (Санкт-Петербург, Питер, СПб и т.д.) и перебирать. Потом добавить неточный поиск и исправление ошибок."
Получается, можно отделить описание от адреса. Поэтому проще будет получить гео координаты (например через https://tech.yandex.ru/maps/geocoder/) по адресу и если они одинаковые, считать строки похожими.
Более сложный вариант: написать простенький парсер адресов. Решать конфликты через однозначное совпадение по адресу.
Какую именно строку использовать из похожих, видимо неважно. Можно случайную, или самую длинную... Тут вам виднее.
Разве вариант 2 пройдёт через гео-поиск? К тому же в результате могут быть несколько значений (видимо, поэтому он пока открыт для работы).
Upd: с 1 сентября 2019 без токена не работает.
Для начала четко сформулируйте критерий похожести, без понимания задачи подобрать решение проще всего подбрасыванием монетки. Если это адреса, то как уже советовали прогнать через геокодер. И, например, считать похожими адреса в радиусе Х (чтобы вычесть квартиры, строения и прочее).
"Для начала четко сформулируйте критерий похожести, без понимания задачи подобрать решение проще всего подбрасыванием монетки." К этому в последствии и пришел, спасибо )