PDA

Visualizza la versione completa : codifica latin 1


splinux
13-11-2009, 11:04
salve,

Sono neofita di perl ma vagamente esperto di programmazione.
Ho il programma cleandict come segue.



#!/usr/local/bin/perl -w
#
# -- Script usato per pulire il dizionario preso da festival
# e renderlo un semplice lista di parole fonemi f OO n e1 m i
#
# TODO
# manca la maiuscola di ... strano accento.
#
use feature "switch";
use Encode;
#use PerlIO::encoding;

#$srcdic="lessico_italiano_500K.dic";
#$dstdic="it-500kNorm.dic";

$srcdic="vocali.txt";
$dstdic="vocaliout.txt";

#encoding ISO-8859-1 is latin-1
open(SRCDIC, "<:encoding(iso-8859-1)", $srcdic) or die;
open(DSTDIC, ">:encoding(iso-8859-1)", $dstdic) or die;

$newline = encode("iso-8859-1", "\n");


$nlinee=0;
while ($linea = <SRCDIC>){

$nlinee++;

@lista = split(//, $linea);
$got=0;
$deep=0;

for $i (@lista){
#print "[INFO processing=\"".$i."\"| got=".$got." deep=".$deep."]\n";
given ($i)
{
when (/["]/) {
if( $got == 0){
$got = 1
}else{
$got = 0;
$tmp = encode("iso-8859-1", " ");
print DSTDIC $tmp;
}
}

when ( /[(]/ ) {
if ($deep == 3){
$tmp = encode("iso-8859-1", " ");
print DSTDIC $tmp;
}
$deep++;
}

when ( /[)]/ ) { $deep-- }

when (/[ 1-9a-zA-Z]/){
if($got || $deep > 3){
$enc = encode("iso-8859-1", $i);
print DSTDIC $enc;
}
}
}
}

print DSTDIC $newline;

}

close(SRCDIC);
close(DSTDIC);

print "processed ".$nlinee." parole\n";


devo trasformare vocali.txt:
("" C (((e1) 1)))
("" V-S1_IP (((E1) 1)))
("" S-NS (((e1) 1)))
("" P-MS (((i1) 1)))
("" P-NP (((i1) 1)))
("" P-NS (((i1) 1)))
("" R-MP (((i1) 1)))
("" S-NN (((i1) 1)))
("" C (((i1) 1)))
("" B (((u1) 1)))
("" S-NN (((u1) 1)))
("" C (((u1) 1)))
("" C (((a1) 1)))
("" C (((a1) 1)))
("" C (((O1) 1)))
("" C (((o1) 1)))

in vocaliout.txt:
e1
E1
e1
i1
i1
i1
i1
i1
i1
u1
u1
u1
a1
a1
O1
o1

con il programma allegato non riesco comunque ad ottenere un file in output di tipo latin1 (iso-8859-1) e tralaltro nemmeno la prima colonna di vocali.

in piu' lanciando sui due file il comando da shell (ubuntu 9.04)


file -i voca*

ottengo


vocaliout.txt: text/plain charset=us-ascii
vocali.txt: text/plain charset=iso-8859-1


(NB il programma serve per dizionari piu grossi, ma questo e' l'esempio buggoso da risolvere).

Any ideas?
grazie

Loading