2013-10-03 4 views
0

Я занимаюсь поиском веб-искателя в Perl. Он извлекает содержимое со страницы, а затем сопоставляется соответствие шаблону для проверки языка содержимого. Значения Unicode используются для соответствия содержимому.Только для печати только для печати

Иногда извлеченный контент содержит текст на нескольких языках. Соответствие шаблону, которое я использовал здесь, печатает весь текст, но я хочу напечатать только текст, соответствующий значениям Unicode, указанным в шаблоне.

my $uu   = LWP::UserAgent->new('Mozilla 1.3'); 
my $extractorr = HTML::ContentExtractor->new(); 

# create response object to get the url 
my $responsee = $uu->get($url); 
my $contentss = $responsee->decoded_content(); 

$range = "([\x{0C00}-\x{0C7F}]+)"; # match particular language 

if ($contentss =~ m/$range/) { 
    $extractorr->extract($url, $contentss); 
    print "$url\n"; 
    binmode(STDOUT, ":utf8"); 
    print $extractorr->as_text; 
} 

ответ

3

Было бы лучше сопоставить символы с определенным свойством Юникода, а не пытаться сформулировать соответствующий класс символов.

Кодовые точки в диапазоне 0x0C00 ... 0x0C7F соответствуют символам в телугу (одном из индийских языков), которые можно совместить с помощью регулярного выражения /\p{Telugu}/.

Других свойств, которые, вероятно, нужны, /\p{Kannada}/, /\p{Malayalam}/, /\p{Devanagari}/ и /\p{Tamil}/

+0

пробовали и не нашли никакой разницы. – Nagaraju

+1

Вы все еще используете переменную '$ range'? Я ожидал, что вы напишете только 'if ($ contentss = ~/(\ p {Telugu} +) /) {...}'. Если вы хотите поместить регулярное выражение в переменную, вы должны удалить квадратные скобки (поскольку они содержат только список символов, и вы не можете поместить свойства Unicode внутри) и использовать одинарные кавычки вместо двойных (иначе обратная косая черта будут проглатываться). Итак, 'my $ range = '(\ p {Telugu} +)''. – Borodin

+0

Я не использую переменную $ range.Tried my $ range = '(\ p {Telugu} +)', но я получаю тот же результат. – Nagaraju

Смежные вопросы