[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Антимат- мнение, улучшения...
AlexanderC
Вот решил написать для своей ЦМС-ки цензор.
Написал... Ну прошу поделится идеями и возражениями(для улучшения процесса)


class cenzor
{
var $dict;
var $cenz;
// class constructor
// @param dictionary path, b.w. replacement

function __construct($dic, $cenz = "***")
{
require($dict);
$this->cenz = $cenz;
// merge arrays lat and cyr(+translit)
foreach ( $GLOBALS["bw_dict_rus"] as $val )
{
array_push( $GLOBALS["bw_dict"], $val );
array_push( $GLOBALS["bw_dict"], $this->r2t($val) );
}
$this->dict = $GLOBALS["bw_dict"];
}

// filter bad words
public function AC_bwf( $str )
{
preg_match_all("/(*UTF8)\b([[:alnum:]\-_!$\*@#%~\?]*)\b/u", $str, $words, PREG_PATTERN_ORDER);
$temp_arr = array();
foreach ( $words[0] as $el )
{
if ( !in_array( $el,$temp_arr) )
array_push($temp_arr, $el);
}
foreach ( $temp_arr as $word )
foreach ( $this->dict as $bw )
{
$lv = levenshtein( strtolower($bw), strtolower($word) );
$wlen = strlen($word);
if ( ($wlen <= 3 && $lv == 0) || ($wlen > 3 && $lv <= $wlen*0.25) )
{
$str = preg_replace("/(*UTF8)\b".$word."\b/u", $this->cenz, $str );
break;
}
}

return $str;
}
// russian to translit
private function r2t($str)
{
$table=array(
"а" => "a", "б" => "b", "в" => "v", "г" => "g", "д" => "d", "е" => "e", "ё" => "yo",
"ж" => "zh", "з" => "z", "и" => "i", "й" => "y", "к" => "k", "л" => "l", "м" => "m",
"н" => "n", "о" => "o", "п" => "p", "р" => "r", "с" => "s", "т" => "t", "у" => "u",
"ф" => "f", "х" => "h", "ц" => "c", "ч" => "ch", "ш" => "sch", "щ" => "sh", "ъ" => "",
"ы" => "y", "ь" => "", "э" => "e", "ю" => "yu", "я" => "ya",
"А" => "A", "Б" => "B", "В" => "V", "Г" => "G", "Д" => "D", "Е" => "E", "Ё" => "YO",
"Ж" => "ZH", "З" => "Z", "И" => "I", "Й" => "Y", "К" => "K", "Л" => "L", "М" => "M",
"Н" => "N", "О" => "O", "П" => "P", "Р" => "R", "С" => "S", "Т" => "T", "У" => "U",
"Ф" => "F", "Х" => "H", "Ц" => "C", "Ч" => "CH", "Ш" => "SCH", "Щ" => "SH", "Ъ" => "",
"Ы" => "Y", "Ь" => "", "Э" => "E", "Ю" => "YU", "Я" => "YA"
);
return strtr($str, $table);
}
}



ну и вобшем-то слова хранятся в 2-х массивах

$GLOBALS["bw_dict"] - латинские слова
$GLOBALS["bw_dict_rus"] - кириллические


Думал для большей эфективности сравнивание делать между строками прошедшими через metaphon, но имплиментация энного стоило бы много нервов и времени....



Спустя 9 минут, 54 секунды (14.05.2011 - 21:05) Nikitian написал(а):
Ставил заказчику такой вариант. Заказчик доволен.

Спустя 12 часов, 55 минут, 12 секунд (15.05.2011 - 10:00) AlexanderC написал(а):
Да, смотрел исходники задолго, проблема только в том что нужен(как-бы быть точнее) не только для русского языка, а и для остальных, из латинского семейства. А устонавливать 2-3-4 цензора это слишком муторно получится )))
Самая большая проблемка это- в о т т а к о е с л о в о...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.