Шинглы

Тема в разделе "PHP", создана пользователем LEXAlForpostl, 11 янв 2011.

Модераторы: latteo
  1. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Здравствуйте.
    Помогите, пожалуйста, разбить текст в переменной $text по 3 шингла на каждую тысячу символов.
     
  2. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    непонятна задача

    тебе разбить текст на куски по 1000 символов?
     
  3. BobMarley

    BobMarley

    Регистр.:
    12 фев 2010
    Сообщения:
    150
    Симпатии:
    57
    Если я правильно понял, то скорее-всего имелось ввиду, каждые 1000 симв. текста разбить на 3-х словные шинглы:)
     
  4. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    558
    получилось следующее
    PHP:
    /**
     * 
     * @param <type> $txt исходный текст
     * @param <type> $el строка, по которой будем разбивать текст
     * @param <type> $num сколько вхождений нужно взять
     * @param <type> $_pos с какого символа начинать
     * @return array массив с 2-мя элементами, 
     * [0] - текст обрезаняй по $num вхождений
     * [1] - текст оставшийся после $num вхождений
     */
    function searchElement($txt$el$num$_pos =0) {

        if (
    substr_count($txt$el) < $num) {
            return array(
    $txtnull);
        }
        
    $n 0;
        while (
    $n $num) {
            
    $_pos strpos($txt$el$_pos 1);

            
    $n++;
        }
        if (!
    $_pos) {
            return array(
    $txtnull);
        }
        
    //var_dump($n, $_pos);
        
    return array(substr($txt0$_pos), trim(substr($txt$_pos)));
    }

    $txt 'Текст';
    $n_txt $txt;
    $shingl_arr = array();
    while (
    $n_txt) {

        list(
    $strip_txt$n_txt) = searchElement($n_txt' '1000);
        
    $shingl_arr[] = ГЕНЕРАЦИЯ_ШИНГЛОВ($strip_txt);
        
    }
    текст разобьётся по 1000 пробелам, только замени функциюю ГЕНЕРАЦИЯ_ШИНГЛОВ из сайта http://utext.rikuz.com/, либо подобного, реализаций генерации шинглов сейчас достаточно.
    пс. писал на коленках, возможны ошибки) шинглы попадут в массив $shingl_arr, для каждого разбитого текста- новый элемент