[Moscow.pm] Передача данных скрипту

Павел Тимонин gg.error на gmail.com
Чт Ноя 27 11:32:03 PST 2008


только вот производительность подобных решений оставляет желать сильно
лучшего. я даже использовал модуль типа Lingvo::RU::Detect, реализованный
подобным образом. после отключения скорость работы выросла в 4 раза, и я
думаю что подобные вещи не слишком приемлемы.

27 ноября 2008 г. 9:09 пользователь Oleg Alexeenkov <proler на gmail.com>написал:

> Здравствуйте, Vladimir.
>
> Вы писали 27 ноября 2008 г., 3:17:13:
>
> > 2008/11/27 Oleg Alexeenkov <proler на gmail.com>:
> >> Здравствуйте, Vladimir.
> >>
> >> Вы писали 27 ноября 2008 г., 2:11:00:
> >>
> >>> 2008/11/27 Ruslan Zakirov <ruz на bestpractical.com>:
> >>>> Может проще остаться с csv и предварительно его iconv'ертить в UTF-8
> >>
> >>> Лучше все-таки Encode'вертить :)
> >>
> >>
> >> Ктонить делал бенчмарки енкоде-иконвы-ручного(tr///)?
>
> > Во первых бенчмарк делать бессмысленно, т.к. ни tr ни iconv не дадут
> > строк с флагом
> > Во вторых tr - только для 1байтных кодировок, а ucs2 и utf8 относятся
> > к многобайтовым.
> Можно чуть усложнить и..
> > Хоте конечно можно рассмотреть iconv+utf8::upgrade vs decode
> Не всегда нужен флаг.
> А если очень захотеть...
>
> [да, я знаю что так делать нехорошо ;)]
>
>
>
>      $config{'trans'}{'cp1251'} ||=
>
> "\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xA8\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF\xB8\xB2\xB3\xAF\xBF\xAA\xBA";
>      $config{'trans'}{'koi8-r'} ||=
>
> "\xE1\xE2\xF7\xE7\xE4\xE5\xF6\xFA\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF2\xF3\xF4\xF5\xE6\xE8\xE3\xFE\xFB\xFD\xFF\xF9\xF8\xFC\xE0\xF1\xB3\xC1\xC2\xD7\xC7\xC4\xC5\xD6\xDA\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD2\xD3\xD4\xD5\xC6\xC8\xC3\xDE\xDB\xDD\xDF\xD9\xD8\xDC\xC0\xD1\xA3\xB6\xA6\xB7\xA7\xB4\xA4";
>      $config{'trans'}{'iso8859-5'} ||=
>
> "\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xA1\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF1\xA6\xF6\xA7\xF7\xA4\xF4";
>      $config{'trans'}{'cp866'} ||=
>
> "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xF0\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF1\xF6\xF7\xF8\xF9\xF4\xF5";
>
>
> sub cp_trans_count {    #v1
>  my ( $cfrom, $cto, $string ) = @_;
>  return $string if $cto eq $cfrom or !length($string) or !$cfrom or !$cto;
>  return utf_trans( $cto, $string ) if $cfrom eq 'utf-8' and
> $config{'trans'}{$cto};
>  return to_utf_trans( $cfrom, $string ) if $cto eq 'utf-8' and
> $config{'trans'}{$cfrom};
>  my $cnt;
>  if ( $config{'trans'}{$cfrom} and $config{'trans'}{$cto} ) {
>    ( $cfrom, $cto ) = \( $config{'trans'}{$cfrom}, $config{'trans'}{$cto}
> );
>    eval "\$cnt = \$string =~ tr/$$cfrom/$$cto/";
>  }
>  return wantarray ? ( $string, $cnt ) : $string;
> }
>
>
> sub utf_trans {
>  my ( $cto, $string ) = @_;
>  return if $cto eq 'utf-8';
>  my ( $cnt, $cnt2 );
>  $cnt += $string =~ s/\xD0\x81/\xF0/g;     # e
>  $cnt += $string =~ s/\xD1\x91/\xF1/g;     # E
>  $cnt += $string =~ s/\xD0\x84/\xF4/g;     # ukr beg
>  $cnt += $string =~ s/\xD1\x94/\xF5/g;
>  $cnt += $string =~ s/\xD0\x86/\xF6/g;
>  $cnt += $string =~ s/\xD1\x96/\xF7/g;
>  $cnt += $string =~ s/\xD0\x87/\xF8/g;
>  $cnt += $string =~ s/\xD1\x97/\xF9/g;     # ukr end
>  $cnt += $string =~ s/\xE2\x80\x94/-/g;    # -
>  $cnt += $string =~ s/\xC2\xAB/"/g;        # <
>  $cnt += $string =~ s/\xC2\xBB/"/g;        # >
>  $cnt += $string =~ s/\xD1\x98/j/g;        #
>  $cnt += $string =~ s/\xD0\xB9/\xA9/g;     # й
>  $cnt += $string =~ s/\xD0([\x90-\xBF])/chr(ord($1)-16)/eg;
>  $cnt += $string =~ s/\xD1([\x80-\x8F])/chr(ord($1)+96)/eg;
>  ( $string, $cnt2 ) = cp_trans_count( 'cp866', $cto, $string );
>  $cnt += $cnt2;
>  $cnt += $string =~ s/\x21\x16/\xB9/g;
>  return wantarray ? ( $string, $cnt ) : $string;
> }
>
> sub to_utf_trans {
>  my ( $cfrom, $string ) = @_;
>  return if $cfrom eq 'utf-8';
>  my $cnt;
>  #  $cnt += $string =~ s/\xE9/\xD0\xB9/g;                           # й
>  $cnt += $string =~ s/\xAB/"/g;            # <
>  $cnt += $string =~ s/\xBB/"/g;            # <
>  ( $string, $cnt ) = cp_trans_count( $cfrom, 'cp866', $string );
>  $cnt += $string =~
> s/([\x80-\x88\x8A-\xA8\xAA-\xAF])/"\xD0".chr(ord($1)+16)/eg;
>  $cnt += $string =~ s/([\xE0-\xE8\xEA-\xEF])/"\xD1".chr(ord($1)-96)/eg;
>  $cnt += $string =~ s/\xF0/\xD0\x81/g;     # e
>  $cnt += $string =~ s/\xF1/\xD1\x91/g;     # E
>  $cnt += $string =~ s/\xF4/\xD0\x84/g;     # ukr beg
>  $cnt += $string =~ s/\xF5/\xD1\x94/g;
>  $cnt += $string =~ s/\xF6/\xD0\x86/g;
>  $cnt += $string =~ s/\xF7/\xD1\x96/g;
>  $cnt += $string =~ s/\xF8/\xD0\x87/g;
>  $cnt += $string =~ s/\xF9/\xD1\x97/g;     # ukr end
>  $cnt += $string =~ s/(?<!\xD0)\xB9/\x21\x16/g;    # №
>  $cnt += $string =~ s/(?<!\xD0)\xA9/\xD0\xB9/g;    # й
>  $cnt += $string =~ s/(?<!\xD0)\x89/\xD0\x99/g;    # Й
>  $cnt += $string =~ s/(?<!\xD0)\xE9/\xD1\x89/g;    # щ
>  $cnt += $string =~ s/(?<!\xD0)\x99/\xD0\xA9/g;    # Щ
>  return wantarray ? ( $string, $cnt ) : $string;
> }
>
>
>
>
> --
> С уважением,
>  Oleg                          mailto:proler на gmail.com
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено&hellip;
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20081127/0976dd41/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm