Генерация метаописания к тексту на лету

Discussion in 'PHP' started by serg-php, 18 Jun 2011.

  1. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Маюсь с функцией генерацией текста на лету.

    Пишу настраиваемую функцию выбора метаописания для статьи.
    Например, функция, которая будет брать 3-е и 5-е (в зависимости от настроек) предложение из текста, резать эти 2 предложения пополам, объединять их в одно, делая его длиной до 200 символов (настраиваемо), обрезая по словам. Получившееся предложение делать с заглавной буквы.

    PHP:
    /************************************************************************************************************************
    Функция Gen_TXT формирует из текста метаописание
    $first - номер предложения из котьорого берётся первая половина
    $second - номер предложения из которого берётся вторая половина
    $max_len - максимальная длинна полученного метаописания.
    ************************************************************************************************************************/
    $first=1;
    $second=3;
    $max_len =150;


    function 
    Gen_TXT ($text,$first,$second,$max_len) {
      
    $first--;
      
    $second--;
      
    // убираем лишнее
      
    $text strip_tags ($text);
      
    $text html_entity_decode ($text);
      
    $text str_replace(array(",",";",":","\\","/","\n","\r"), ""$text);
      
    // разбиваем текст на предложения
      
    $text str_replace(array("!","?","..."), "."$text);
      
    $text explode(".",$text);                            
      
    //вырезаем половинку первого предложения
      
    $text1 explode("!!!",wordwrap ($text[$first],strlen($text[$first])/2,"!!!"));
      
    $text1 $text1 [0];
      
    //вырезаем и пришиваем половинку второго предложения
      
    $text explode("!!!",wordwrap ($text[$second],strlen($text[$second])/2,"!!!"));
      
    $text1 $text1." ".$text[1];
      
    // обрезаем под максимальную длинну
      
    $text1 explode("!!!",wordwrap ($text1,$max_len,"!!!"));
      
    $text1 trim(trim($text1 [0]),"\xA0").".";
      
    //убираем возможную двойную точку вконце предложения
      
    $text1 str_replace("..""."$text1);
      return 
    $text1;
    }


    Функция работает с текстом, где 3-5 и более предложений, если в тексте одно предложение, то она работает некорректно!

    Просьба помочь с решением!
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    serg-php http://www.php.net/if http://www.php.net/count И проверяйте, чтобы количество предложений было не меньше чем max($first, $second)
     
    _________________________
  3. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Не стал я заморачиваться с єтим алгоритмом, а придумал новый!

    PHP:
       //  Generating Methadescription

        
    $str strip_tags($str);

        
    $str str_replace(array(".",",",";",":","\\","/","(",")","&ndash","\"","\n","\r"), " "$str);

        
    $result strlen($str);

        if(
    $result 250) { 

        
    $str wordwrap($str,50"|");

        
    $str explode("|"$str);

        
    $str$str[0]." ".$str[4]." ".$str[7].".";

     }
        else {

          
    $str wordwrap($str,50"|");

          
    $str explode("|"$str);

          
    $str $str[0]." ".$city." ".$str[2]." ".$country.".";

     }

    Просто и со вкусом! Думаю, такое решение претендует на то, чтобы его добавить в копилку форума.