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

Статус
В этой теме нельзя размещать новые ответы.

alex-bot

Nulled-Man
Регистрация
4 Май 2007
Сообщения
496
Реакции
161
Народ помогите плиз доделать скрипт очистки текста от мусора и лишних символов
За основу взял скрипт грабера:
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($in, 4096);
$text = CleanText($content);

while(!feof($in)){
   $content = fgets($in, 4096);
   $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
 
Функция 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);
	}
}
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху