Регулярка - очистка текста от мусора.

Тема в разделе "Регулярные выражения", создана пользователем alex-bot, 3 авг 2009.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. alex-bot

    alex-bot Nulled-Man

    Регистр.:
    4 май 2007
    Сообщения:
    497
    Симпатии:
    144
    Народ помогите плиз доделать скрипт очистки текста от мусора и лишних символов
    За основу взял скрипт грабера:
    PHP:
    <?php
    Header
    ("Content-Type: text/html; charset=windows-1251");

    set_time_limit(0);
    ob_implicit_flush();

    //------------------------------------------------
    $in fopen('in.txt''r');
    $out fopen('out.txt''w');
    $content fgets($in4096);
    $text CleanText($content);

    while(!
    feof($in)){
       
    $content fgets($in4096);
       
    $text perenos($content);
       
    $text CleanText($content);
       
    fputs($out$text);
    }
    fclose($out);
    fclose($in);
    echo 
    "Текст обработан $out"
    //------------------------------ удаление переносов
    function perenos($content)
    {
    $text $content;
    $text preg_replace('/-\s{2,}/s'''$text);
    //echo preg_replace('/-\s{2,}/s', '', $text);
    return $text;
    }
    //------------------------------
    function CleanText($content//ooieoc? iadrainec nndricou
    {
    $text $content;
    $text preg_replace('/-\s{2,}/s'''$text);
    $text preg_replace("/<title>\s*(.*?)\s*<\/title>/is"," ",$text);
    $text preg_replace("/<!--.*?-->/s"," ",$text);
    $text preg_replace("/<[Ss][Cc][Rr][Ii][Pp][Tt].*?<\/[Ss][Cc][Rr][Ii][Pp][Tt]>/s"," ",$text);
    $text preg_replace("/<[Ss][Tt][Yy][Ll][Ee].*?<\/[Ss][Tt][Yy][Ll][Ee]>/s"," ",$text);
    $text preg_replace("/<[^>]*>/s"," ",$text);
     
    $style='/\<style[\w\W]*?\<\/style\>/i';
    $script '/\<script[\w\W]*?\<\/script\>/i';
    $doc '/\<!doctype[\w\W]*?\>/i';
        
    $text preg_replace($doc' '$text);
    $text preg_replace($style' '$text);
    $text eregi_replace(' style="[^">]*"'' '$text);
    $text strip_tags($text);
    $text preg_replace($script' '$text);
    $text str_replace("&nbsp;"' '$text);
    $text preg_replace ("/[\s,]+/"' '$text);

    $text str_replace("...""."$text);
    $text str_replace("..""."$text);
    $text str_replace("!!!""!"$text);
    $text str_replace("!!""!"$text);
    $text str_replace("???""?"$text);
    $text str_replace("??""?"$text);
    $text str_replace('»''"'$text);
    $text str_replace('«''"'$text);

    $text str_replace("."".\r\n"$text);
    $text str_replace("!"".\r\n"$text);
    $text str_replace("?"".\r\n"$text);
    $text str_replace("|"".\r\n"$text);

    $text str_replace(".\r\n.\r\n"".\r\n"$text);
    $text str_replace(".\r\n.\r\n"".\r\n"$text);
    $text str_replace(". \r\n"".\r\n"$text);
    $text str_replace("\r\n\r\n""\r\n"$text);
    $text str_replace("\r\n\r\n""\r\n"$text);

    $text str_replace("\t\t"" "$text);
    $text str_replace("\t"" "$text);
    $text str_replace("   "" "$text);
    $text str_replace("  "" "$text);
    $text str_replace(" .""."$text);
    $text str_replace(" ,"","$text);
    $text str_replace("- - - ""- "$text);
    $text str_replace("- - ""- "$text);

    $text str_replace("---""-"$text);
    $text str_replace("--""-"$text);
    $text str_replace("--""-"$text);
    $text str_replace("_"" "$text);

    $text str_replace("   "" "$text);
    $text str_replace("  "" "$text);
    $text str_replace("--""-"$text);
    $text str_replace("--""-"$text);
    $text str_replace("***""*"$text);
    $text str_replace("**""*"$text);

    $text str_replace("\r\n?""\r\n"$text);
    $text str_replace("\r\n(""\r\n"$text);
    $text str_replace("\r\n)""\r\n"$text);
    $text str_replace("\r\n'""\r\n"$text);
    $text str_replace("\r\n-""\r\n"$text);
    $text str_replace("\r\n*""\r\n"$text);
    $text str_replace("\r\n?""\r\n"$text);
    $text str_replace("\r\n-""\r\n"$text);
    $text str_replace("\r\n ""\r\n"$text);
    $text str_replace("<"""$text);
    $text str_replace(">"""$text);

    return 
    $text;
    }  
    //------------------------------------------------

    ?>
    Сам скрипт я почти не трогал нужно добавить регулярку которая бы удаляла все слова, если в них встречаются буквы английского алфавита...
    В принципе тема такая уже была и там SolutionFix выложил такой скрипт, но у меня он не пошел вот его вариант:

    PHP:
    <?php
        $SourceFile 
    'source.txt';
        
    $DestinFile 'destin.txt';
        
        function 
    IsGoodWord($Word)
        {
            for(
    $i=0$i<strlen($Word); $i++) 
                if((
    $Word[$i] < 'а') or ($Word[$i] > 'я')) return false;
            return 
    true;
        }
        
        if(!
    $SourceText file_get_contents($SourceFile)) exit("Ошибка: нет файла $SourceFile с исходным текстом");
        
    $DestinText '';
        foreach((
    $Words explode(" "$SourceText)) as $Word)
            if(
    IsGoodWord($Word)) $DestinText .= "$Word ";
        if(!
    file_put_contents($DestinFile$DestinText)) exit("Ошибка: нет удалось записать файл $DestinFile с полученным текстом");
        
        echo 
    "Успешно очищено, результаты смотрите в файле $DestinFile";
    ?> 
    На его скрипте у меня вылетает я не спец, может сразу скажете в чем тут дело, единственное что руки не дошли потестить именно на хостинге. А на локалке не работает... Хотя вроде все просто...
    Fatal error: Call to undefined function: file_put_contents() in z:\home\localhost\www\textgrab\444.php on line 16
     
  2. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    Функция file_put_contents доступна в PHP 5+. На большинстве хостингов должно работать.
    Можно добавить вот это:
    PHP:
    <?php
    if(!function_exists('file_put_contents'))
    {
        function 
    file_put_contents($filename$content)
        {
            
    $f fopen($filename'w');
            
    fwrite($f$content);
            
    fclose($f);
        }
    }
     
    alex-bot нравится это.
Статус темы:
Закрыта.