Методы сравения линков....

Тема в разделе "Как сделать...", создана пользователем qwerty, 7 июн 2008.

Статус темы:
Закрыта.
  1. qwerty

    qwerty Постоялец

    Регистр.:
    10 апр 2006
    Сообщения:
    75
    Симпатии:
    0
    имеется таблица с записями
    id|url|discription

    в url
    могут быть ссылки с например с файлообменника
    вида
    http://url.ru/xxx/a1.rar
    http://url.ru/xxx/a2.rar
    http://url.ru/xxx/a3.rar
    http://url.ru/xxx/a4.rar

    или
    http://url.ru/xxx/a-a.rar
    http://url.ru/xxx/a-b.rar
    http://url.ru/xxx/a-c.rar

    или еще как но относящиеся к одной группе, а точнее файлу, а также есть ссылки на один архив
    тоесть не состоящие из группы линков.
    тоесть
    http://url.ru/xxx/фыва.rar
    http://url.ru/xxx/вапы.rar
    http://url.ru/xxx/лшдр.rar
    http://url.ru/xxx/щззш.rar
    http://url.ru/xxx/4356ра.rar

    требуется создать новую таблицу или записать в файл не важно как ну вообщем получить массив вида

    id|url|discription|id_parents
    для самой первой ссылки в наборе в id_parents должен стоять 0
    в примере для http://url.ru/xxx/a1.rar
    а для остальных ссылок в id_parents должен стоять id самой первой ссылки.

    для просто не групповых линков соответсвтенно в id_parents будет 0 так как они и заглавные и конечные.

    помогите реализовать преобразователь из той таблици в эту.

    Очень буду рад Вашей помощи.Сам уже мучаюсь ни как не могу этог сделать.
     
  2. qwerty

    qwerty Постоялец

    Регистр.:
    10 апр 2006
    Сообщения:
    75
    Симпатии:
    0
    Нашел я ответ на свой вопрос. Может кому пригодится кто не знает.

    int similar_text ( string $first , string $second [, float $percent ] )
    Вычисляет степень похожести двух строк по алгоритму, описанному Oliver [1993]. Эта реализация алгоритма не использует стэка, использованного в оригинале, вместо этого применяются рекурсивные вызовы, что в некоторых случаях может ускорить процесс. Сложность алгоритма составляет O(N**3), где N - длина более длинной из двух строк.
    При передаче по ссылке третьего аргумента, ему присваивается степень похожести двух строк в процентах. Возвращается количество совпадающих символов в двух строках.


    int levenshtein ( string $str1 , string $str2 )
    int levenshtein ( string $str1 , string $str2 , int $cost_ins , int $cost_rep , int $cost_del )
    int levenshtein ( string $str1 , string $str2 , function $cost )
    Функция возвращает расстояние Левенштейна между двумя строками, или -1, если хотя бы одна из строк длиннее 255 символов (этого более чем достаточно для сравнения имен или поиска по словарю, а проводить генетический анализ на PHP просто несерьезно).
    Расстояние Левенштейна - это минимальное количество вставок, замен и удалений символов, необходимое для преобразования str1 в str2 . Сложность алгоритма равна O(m*n), где n и m - длины строк str1 и str2 имеющей сложность O(max(n,m)**3), но все же довольно много).
    В простейшей форме функция принимает в качестве аргументов две строки и возвращает минимальное количество вставок, замен и удалений символов, необходимое для преобразования str1 в str2 .
    Второй вариант принимает три дополнительных аргумента, задающих стоимость операций вставки, замены и удаления. Этот вариант универсальнее первого, но не так эффективен.
    Третий вариант (который еще не реализован) будет наиболее универсальным, но и самым медленным. Он будет принимать в качестве третьего аргумента пользовательскую функцию, которая будет вычислять стоимость каждой возможной операции.

    Пользовательская функция будет иметь следующие аргументы:
    • <LI class=listitem>тип операции: 'I', 'R' or 'D' <LI class=listitem>текущий символ в строке 1 <LI class=listitem>текущий символ в строке 2 <LI class=listitem>текущая позиция символа в строке 1 <LI class=listitem>текущая позиция символа в строке 2 <LI class=listitem>количество символов, оставшихся в строке 1
    • количество символов, оставшихся в строке 2
    Пользовательская функция должна возвращать положительное целое, определяющее стоимость конкретной операции.

    Использование пользовательской функции позволяет учитывать различия между символами и даже контекст символов при вычислении стоимости операций вставки, замены и удаления, но ценой потери скорости по сравнению с двумя первыми вариантами.

    Добавлено через 2 минуты
    так же требуется добавить что эти функции есть только
    в (PHP 4 >= 4.0.1, PHP 5)
     
Статус темы:
Закрыта.