sofcom
@sofcom
DevOps & IT Produce & Digital marketing

Какой алгоритм сортировки слов по смыслу или библиотеку использовать?

Не разу не сталкивался с задачей сортировки слов (словосочетаний), определению сходств.
Количество слов/словосочетаний для сортировки - тысячи.

Есть набор слов:
проблема человека
проблемы человека
проблема человека решение
проблемы человека решения
проблемы человека решить
задачи человека
задачи человека решение
задачи человека решения
задачи человека решить
задачи человека вопросы
задачи человека вопрос
задачи человека ответ
задачи человека ответы
у человека есть проблемы
у человека есть проблема
у человека нет проблем
у человека нет проблемы

Необходимо найти сходства у этих строк по смыслу и рассортировать на 3-4 группы словосочетаний. Встречали где-либо решения на PHP или Python? Может есть готовые библиотеки? Заранее благодарю за поддержку.

Для чего решение?
тексты полученные парсером анализировать и по полочкам раскладывать составляя отчеты по параметрам.
  • Вопрос задан
  • 3019 просмотров
Пригласить эксперта
Ответы на вопрос 3
viktorvsk
@viktorvsk
Необходимо найти сходства у этих строк по смыслу


Это все равно, что сказать: "Не встречали готовых плагинов к фотошопу, что б тысячи фотографий из сотен жанров сделать красивыми?"

Если все словосочетания у вас подобного типа, то находите "расстояния" между ними и группируйте по диапазонам.
Расстояния можно рассчитывать, например, по количеству одинаковых букв в словосочетании или строгой их последовательности.

Например, расстояние между "у человека нет проблем" и "у человека нет проблемы" = 1, а между "у человека нет проблем" и "задачи человека решение" уже или 0 или около "длина строки (которая длиннее или короче) минус количество букв в слове "человека)

Ну или попробуйте построить свои грамматики и факты с блэк-джеком и Томитой

P.S. А вообще это попахивает сео, и если это так, то не маскируйте неприятные запахи, а устраняйте их (с)
Ответ написан
Необходимо найти сходства у этих строк по смыслу и рассортировать


Уважаемый автор вопроса, victorvsk Вам ответил правильно - Вы задали некорректный вопрос.

Как я понял, из тех данных, что Вы предоставили, сортировка будет осуществляться именно по смыслу. Тогда что такое смысл? На мой взгляд, в представленном случае, вариантов может быть несколько - смыслом будет сортировка по слову "проблема" или по слову "задача" или по слову "есть/нет решения". Что для Вас будет смыслом - непонятно из вопроса.

Так же victorvsk Вам ответил правильно - самым простым вариантом будет поиск по расстоянию. Я делал по связке двух подходов Левенштейна и Оливера.

Реализация расстояния по Левенштейну. Посмотрите, попробуйте, там все очень просто, а на словах более 3-х символов, дает очень неплохие результаты.

Либо, как уже советовали, пользуйте готовые решения, в Гугле их очень много.

Дополнение

Вот реализация алгоритмов на PHP и еще.

Где то была реализация на Питоне, но пока не могу найти. Посмотрите еще вот эту статью.

Удачи. :)
Ответ написан
@Rorg
сходства у этих строк по смыслу и рассортировать на 3-4 группы словосочетаний


Если именно помыслу, то смотрите наверное в сторону нейросетей. Как вариант возможно хорошо сработает цепь Маркова (но она скорее для больших текстов, чем для словосочетаний )
Ответ написан
Ваш ответ на вопрос

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

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