Задать вопрос

Сортировка строк по большей «схожести»?

Всем привет, есть одна т..

Есть массив:
[0] => 'Поиск строки 14',
[1] => 'рандомный текст 14',
[2] => 'строки 14'


И строка "Поиск строки 14"

Как отсортировать массив по "большей схожести" на входящую строку?

Тоесть чтобы 2 и 3 элемент пассива поменялись местами?

Подскажите пожалуйста, кроме как куча рекурсии с проверками, ничего в голову не лезет
  • Вопрос задан
  • 943 просмотра
Подписаться 7 Простой 3 комментария
Решения вопроса 1
@santaatnas
Java, Python, Php
Вот пример с алгоритмом Programming Classics: Implementing the World's Best Algorithms by Oliver (ISBN 0-131-00413-1). Есть еще другие реализованные алгоритмы в php, почитайте здесь levenshtein и здесь soundex. Либо можете написать свой алгоритм.

$searchPhrase = "Поиск строки 14";
        $words = ['Поиск строки 14', 'рандомный текст 14','строки 14'];

        $wordsWithSimilarity = [];
        foreach ($words as $word) {
            $similarity = similar_text($searchPhrase, $word);
            $wordsWithSimilarity[$similarity] =$word;
        }

        krsort($wordsWithSimilarity);
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Exploding
@Exploding
wtf?
Вот еще вдогонку мускульный вариант)
select *, MATCH (`myfield1`, `myfield2`) AGAINST ('Поиск строки 14' IN BOOLEAN MODE) as `score` from `table` WHERE MATCH (`myfield1`, `myfield2`) AGAINST ('Поиск строки 14' IN BOOLEAN MODE) order by `score` desc
Ответ написан
Комментировать
Jump
@Jump
Системный администратор со стажем.
Саму сортировку - любым алгоритмом сортировки уместным в данном случае, хоть тем же пузырьком.
А вот как определять схожесть - тут другой вопрос - Левенштейн, Танимото, Жаккар, и.т.д.
Надо смотреть что именно вас устроит и что будет эффективней в данном случае.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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