За последние 24 часа нас посетили 34470 программистов и 1693 робота. Сейчас ищут 644 программиста ...

не могу найти функцию

Тема в разделе "PHP для новичков", создана пользователем drakonik999, 21 ноя 2017.

  1. drakonik999

    drakonik999 Активный пользователь

    С нами с:
    5 сен 2017
    Сообщения:
    156
    Симпатии:
    0
    $a="дерево вода коля моркова";
    $b="водоворот";
    первая переменная это текст где нужно искать
    Вторая сам запрос
    функция должна вернуть наибольшое число совпадений. Например:
    дерево, в этом слове ищем запрос водовород, самое большое нахождение "во" ( да, в каком месте искать неважно (начало слова,средина или конец слова ), важно то чтобы оно сходилось с началом строки поиска, то есть "водоворот" нашел свое начало в слове "дерево" в корне "во", значит он нашел 2 слова, идем дальше, "Вода" тут уже "водоворот" пришлет значение 3, так как найдено 3 совпадение "Вод" ну в остальных словах уже нету ( кроме морковка, как там присутсвует буква "В" которая находится в нашем запросе.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Её написать надо. Самому.
     
  3. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Ничего сложного нет.
    1. $a - преобразовать в массив слов
    2. Посчитать кол-во символом в слове $b для п.4
    3. foreach для массива $a
    4. Увеличивая в цикле for длину подстроки из искомого слова, проверяем позицию первого вхождения. (Начальное значение счетчика = 1)
    5. Как только === false, записываем в массив-результат: слово и (счетчик - 1) из for
    На выходе получаем массив слов и кол-во символов совпавших в каждом.
    Не забываем, что для кириллицы нужно использовать mb_* функции.
     
  4. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Вот эти функции могут упростить алгоритм до одного цикла:
    similar_text()
    levenshtein()
     
  5. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Не в данном случае
     
  6. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @Deonis, почему нет?
    Левенштейн - это до кучи...
     
  7. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Задача ТС найти точное совпадение группы символов из одного слова в других словах. В то время, как similar_text вычисляет схожесть строк в общем да еще и с учетом длины каждой. Поэтому, из примера "морковка" даст больший процент схожести, чем "вода".
    А по Левенштейну - так тут вообще не та история, т.к. функция вычисляет кол-во преобразований, чтобы одна строка была максимально схожа со второй.
     
    Maputo нравится это.