Смотрите есть входная строка и есть массив строк, надо сравнить входную строку со всеми элементами массива и выдать результат какие элементы и на сколько схожи с входной строкой (ну или просто показать какой элемент больше всего схож с входной строкой) В MySQL такое можно сделать следующим образом: при создании таблицы тот столбец по которому надо осуществлять поиск указать как FULLTEXT, так: Код (Text): CREATE TABLE pages ( id BIGINT(20) unsigned NOT NULL auto_increment primary key, content TEXT NOT NULL, FULLTEXT (content) ) потом такой запрос составить: Код (Text): "SELECT * FROM `pages` WHERE MATCH (content) AGAINST ('?')" // за место ? входная строка А есть встроенные функции реализующие подобное в РНР? и если нет, то как бы вы реализовали подобное?
Интересует НЕ точное сравнение (я почему завел речь об MySQL) Добавлено спустя 24 минуты 57 секунд: Я так понимаю это что то из разряда - Алгоритм шинглов Вопрос, есть ли встроенная функция осуществляющая такое, есть ли еще какие то алгоритмы кроме шинглов Добавлено спустя 49 минут 23 секунды: Выискал такие функции: similar_text и levenshtein, но levenshtein не очень, далеко не так как надо работает.
он же не работает с русским языком, возвращает всегда 0000. Я так понял тут одной функцией не обойтись. Вообще similar_text мне от части подходит, но тут проблема, она возвращает 2 значения, просто цифры и в процентном соотношении, так вот бывает такое что в одном случае эти цифры показывают то что надо, а вот проценты нет, и на оборот цифры врут, а вот проценты то что надо, зашел на доску объявлений, срисовал название некоторых разделов, ищу допустим - бизнес услуги, результат такой: а по процентам: автозапчасти: причем тут Животные и растения я вообще не понимаю. и еще какая то была фраза, сейчас не могу вспомнить, она совпадала с тем, что надо так: по цифрам она была где то в конце, а по процентам как раз 80%
А! блин. Задача не простая. Если тебе нужен сгодный инструмент, тут капец какая запара будет. Считать слова и сравнивать, если равно, смотрим по буквам, сначала по 1, потом по 2, потом по 3 и т. д. Потом смотрим сколько операции по словам было выполнено и по буквам (в возрастающем порядке) которые равны и если они не совпадают с количеством " которое можно сделать на приходящей строке ", то от суда можно вычислить уже цифру от 100% " имеющем на приходящей строке операций ", а потом вернуть, что нужно.
Вы наверное не поняли что возвращает функция similar_text. Значение которое возвращает функция количество совпавших символов, вне зависимости от количество совпадений, т.е.: Код (Text): $text1 = "oo"; $text2 = "ao"; $pres = 0; $res = similar_text ( $text1, $text2, $pres ); // $res = 1 // $pres = 50 т.е. получается что совпала буква "o", поэтому функция вернула 1, а в третий параметр было передано процентное сходство: 50% - из двух букв различается одна. как раз сходство "как есть" начинается минимум с 80%, ибо: Код (Text): $text1 = "торт"; $text2 = "трот"; $pres = 0; $res = similar_text ( $text1, $text2, $pres ); // $res = 4 // $pres = 75 да просто это скорее всего не органическая выдача, реклама короче.