Задать вопрос
OlegOleg1980
@OlegOleg1980
программист

Как сравнить строки на похожесть?

Добрый день!
Подскажите, пожалуйста, алгоритм сравнения строк (текста) на похожесть.
Оговорюсь сразу, прочитал достаточно статей с того же Хабра на эту тему, много там математики и очень уж сложно все. Да и ресурсозатратно тоже.
И напротив - такие методы как similar_text() или levenshtein() тоже не очень подходят, ибо показывают плохой результат в случае простой перестановки слов в строке.
Хотелось бы найти готовый алгоритм, а еще лучше уже написанный метод на php, js или каком другом языке, который будет и не очень сложен и затратен, но и в то же время достаточно точен в оценке.

P.S. В этой сфере не специализируюсь, поэтому навскидку сразу не могу найти нужный материал.

Спасибо!
  • Вопрос задан
  • 6840 просмотров
Подписаться 6 Средний 18 комментариев
Решения вопроса 2
Для начала критерии «похожести» огласите.
А то «Казнить нельзя, помиловать» оч похожа на прямо противоположную.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Вариант для ограниченного словаря слов.
-Составляем массив всех слов из текстов, поиск по которым будем вести. Каждое слово обрабатываем стеммером. Выкидываем короткие основы. Оставляем в массиве только уникальные основы.
-Каждую строку по которой будем искать превращаем в массив, состоящий из индексов основ слов в словаре. Сортируем массив.
-Аналогично делаем со строкой которую будем искать. Так как в ней могут быть новые слова, чтобы найти индекс основы слова в словаре, ищем основу с наименьшим левенштейном по отношению к данной основе слова. Сортируем массив.
-Теперь похожесть текстов можем сравнивать, как длинну разности массивов индексов.
Ответ написан
@asd111
Попробуй python.
from difflib import SequenceMatcher

def similar(a, b):
    return SequenceMatcher(None, a, b).ratio()
Ответ написан
@duck_nukem
делай распознавание нейросетью
Ответ написан
@DivineMgn
Как на счёт расстояния Левенштейна и прочие модификации данного алгоритма? Потом накидывать уже свой алгоритм под нужды: порядок/отсутствие слов и т.д.
Ответ написан
Ваш ответ на вопрос

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

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