Conversão de codificação inteligente

0

Eu tenho um arquivo que contém uma mistura de linhas inglesas e russas (um idioma por linha). As linhas russas são codificadas à mão usando uma ou outra codificação Translit .

Eu preciso converter o texto translit russo para cirílico e manter o texto em inglês intacto.

Existe uma ferramenta de linha de comando do linux que me ajudaria a fazer isso?

    
por Alexander Gladysh 25.08.2014 / 19:33

1 resposta

1

Você poderia tentar implementar isso usando sed , awk e tal e tentar alcançá-lo pela linha de comando, mas eu acho que seria mais conveniente usar Perl e um script curto.

Você pode usar o módulo perl Lingua :: Translit para converter linhas e "adivinhar" se a linha estava em inglês ou não com Lingua :: Identifique .

Aqui está algum código. Eu não testei corretamente, mas deveria te dar algo para você escrever.

use Lingua::Translit;
use Lingua::Identify qw(langof set_active_languages);

set_active_languages(qw/ru en/);

my $tr = new Lingua::Translit("ISO 9");

open OUTFILE, ">output.txt" or die $!;
open INFILE, "input.txt" or die $!;
while (my $line = <INFILE>) { 
    my $a = langof($line);
    if ($a eq "ru") {
        my $trline = $tr->translit_reverse($line);
        print OUTFILE $trline;
    } else {
        print OUTFILE $line;
    }
}
close(INFILE);
close(OUTFILE);
    
por 25.08.2014 / 21:40