Program generujacy konfiguracje pyta sie o wybor slownika.
Dolozylem obsluge plikow tymczasowych w compiledict. Zamienilem system na ` w perlu. git-svn-id: svn://atos.wmid.amu.edu.pl/utt@14 e293616e-ec6a-49c2-aa92-f4a8b91c5d16
This commit is contained in:
parent
20b4e44e75
commit
389de9abcb
6
app/TODO
6
app/TODO
@ -7,15 +7,15 @@
|
|||||||
|
|
||||||
* mar nie obsluguje plikow konfiguracyjnych [JW]
|
* mar nie obsluguje plikow konfiguracyjnych [JW]
|
||||||
|
|
||||||
* compiledic - plik tymczasowe [PK]
|
* DONE compiledic - plik tymczasowe [PK]
|
||||||
|
|
||||||
* ser i grp - parametr tags (zeby bral wskazany program tag2re) [TO]
|
* ser i grp - parametr tags (zeby bral wskazany program tag2re) [TO]
|
||||||
|
|
||||||
* lista zaleznosci dla komend system w perlu [PK]
|
* DONE lista zaleznosci dla komend system w perlu [PK]
|
||||||
|
|
||||||
* polaczyc sen'y [TO]
|
* polaczyc sen'y [TO]
|
||||||
|
|
||||||
* poprawic utt_make_conf (wykrywanie slownikow) [PK]
|
* DONE poprawic utt_make_conf (wykrywanie slownikow) [PK]
|
||||||
|
|
||||||
* generowanie i sprawdzanie zaleznosci dla tarballa [PK]
|
* generowanie i sprawdzanie zaleznosci dla tarballa [PK]
|
||||||
|
|
||||||
|
40
app/dist/common/utt_make_config.pl
vendored
40
app/dist/common/utt_make_config.pl
vendored
@ -11,12 +11,13 @@ my $sys_home = catdir(dirname(abs_path($0)), "..");
|
|||||||
my $usr_home = catdir(home(), '.utt');
|
my $usr_home = catdir(home(), '.utt');
|
||||||
|
|
||||||
prepareUttUsrHome($usr_home);
|
prepareUttUsrHome($usr_home);
|
||||||
|
conf_utt(catfile($usr_home, 'utt.conf'), $sys_home);
|
||||||
|
|
||||||
conf_cor(catfile($usr_home, 'cor.conf'), $sys_home);
|
conf_cor(catfile($usr_home, 'cor.conf'), $sys_home);
|
||||||
conf_grp(catfile($usr_home, 'grp.conf'), $sys_home);
|
conf_grp(catfile($usr_home, 'grp.conf'), $sys_home);
|
||||||
conf_gue(catfile($usr_home, 'gue.conf'), $sys_home);
|
conf_gue(catfile($usr_home, 'gue.conf'), $sys_home);
|
||||||
conf_lem(catfile($usr_home, 'lem.conf'), $sys_home);
|
conf_lem(catfile($usr_home, 'lem.conf'), $sys_home);
|
||||||
conf_ser(catfile($usr_home, 'ser.conf'), $sys_home);
|
conf_ser(catfile($usr_home, 'ser.conf'), $sys_home);
|
||||||
conf_utt(catfile($usr_home, 'utt.conf'), $sys_home);
|
|
||||||
|
|
||||||
print "UTT user configuration created in $usr_home\n";
|
print "UTT user configuration created in $usr_home\n";
|
||||||
|
|
||||||
@ -26,10 +27,12 @@ print "UTT user configuration created in $usr_home\n";
|
|||||||
sub prepareUttUsrHome() {
|
sub prepareUttUsrHome() {
|
||||||
my $dir = shift;
|
my $dir = shift;
|
||||||
|
|
||||||
|
print "Preparing user configuration.\n";
|
||||||
|
|
||||||
if(-d $dir) {
|
if(-d $dir) {
|
||||||
print "Old configuration will be deleted!\n";
|
print "Old configuration detected. ";
|
||||||
my $cnt = unlink <$dir/*>;
|
my $cnt = unlink <$dir/*>;
|
||||||
print "$cnt files deleted.\n";
|
print "($cnt files deleted)\n";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
print "Creating directory $dir\n";
|
print "Creating directory $dir\n";
|
||||||
@ -113,15 +116,42 @@ sub conf_ser() {
|
|||||||
sub conf_utt() {
|
sub conf_utt() {
|
||||||
my $utt_file = shift;
|
my $utt_file = shift;
|
||||||
my $utthome = shift;
|
my $utthome = shift;
|
||||||
|
|
||||||
|
my $lang = getUserLanguage(abs_path(catdir($utthome, "share/utt")));
|
||||||
|
|
||||||
open(FILE, ">$utt_file");
|
open(FILE, ">$utt_file");
|
||||||
|
|
||||||
print FILE makeConfigHeader();
|
print FILE makeConfigHeader();
|
||||||
print FILE "# user locale\n";
|
print FILE "# user locale (dictionary)\n";
|
||||||
print FILE "language=", findLocale(), "\n";
|
print FILE "language=", $lang, "\n";
|
||||||
|
|
||||||
close FILE;
|
close FILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub getUserLanguage() {
|
||||||
|
my $dict_dir = shift;
|
||||||
|
|
||||||
|
print "Setup dictionaries.\n";
|
||||||
|
|
||||||
|
opendir(DIR, $dict_dir) || die "Install dictionary first!\n";
|
||||||
|
@files = grep(/[^\.{1,2}]/ && -d "$dict_dir/$_", readdir(DIR));
|
||||||
|
closedir DIR;
|
||||||
|
my $cnt = scalar @files;
|
||||||
|
print "$cnt dictionary(ies) found.\n";
|
||||||
|
if(0 == $cnt) {
|
||||||
|
die("Install dictionary first!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach my $file (@files) {
|
||||||
|
print "Do you select dictionary $file [yes/no]? ";
|
||||||
|
my $ans = <STDIN>;
|
||||||
|
if($ans =~ /y(es)?/i) {
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
die "No dictionary selected - setup failed!\n";
|
||||||
|
}
|
||||||
|
|
||||||
# Szuka locali u uzytkownika
|
# Szuka locali u uzytkownika
|
||||||
sub findLocale() {
|
sub findLocale() {
|
||||||
$cur_locale = setlocale(LC_CTYPE);
|
$cur_locale = setlocale(LC_CTYPE);
|
||||||
|
@ -10,6 +10,7 @@ use locale;
|
|||||||
use File::HomeDir;
|
use File::HomeDir;
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
use File::Temp;
|
use File::Temp;
|
||||||
|
use File::Copy;
|
||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
|
|
||||||
my $systemconfigfile='';
|
my $systemconfigfile='';
|
||||||
@ -50,29 +51,30 @@ else
|
|||||||
|
|
||||||
`lexmakelab $symfilenoext`;
|
`lexmakelab $symfilenoext`;
|
||||||
|
|
||||||
# Analiza pliku s³ownika
|
# Tworzymy katalog tymczasowy, gdzie wszystko bedzie umieszczane.
|
||||||
|
$tmp_root = tempdir( CLEANUP => 1 );
|
||||||
|
|
||||||
print "preparing file...........................................";
|
|
||||||
|
|
||||||
`sed -r "s/([[:punct:]])/\[\\1\]/g" < $file > temp1`;
|
# Analiza pliku slownika
|
||||||
|
|
||||||
`cp temp1 temp2`;
|
print "preparing file...........................................\n";
|
||||||
|
print "... sed section .....\n";
|
||||||
|
(undef, my $file_sed) = File::Temp::tempfile( DIR => $tmp_root, SUFFIX => ".sed" );
|
||||||
|
`sed -r "s/([[:punct:]])/\[\\1\]/g" < $file > $file_sed`;
|
||||||
|
|
||||||
print "OK\n";
|
print "OK\n";
|
||||||
|
|
||||||
#dzielimy plik na wiele czê¶ci, uruchamiamy lexcomplex dla ka¿dej
|
#dzielimy plik na wiele czesci, uruchamiamy lexcomplex dla kazdej
|
||||||
#czê¶ci osobno, nastêpnie ³±czymy to za pomoc± programu fsmunion
|
#czesci osobno, nastepnie laczymy to za pomoca programu fsmunion
|
||||||
|
|
||||||
#print "Dzielê s³ownik na mniejsze czê¶ci...";
|
#print "Dziele slownik na mniejsze czesci...";
|
||||||
|
|
||||||
open(IN, "./temp2");
|
open(IN, $file_sed);
|
||||||
|
|
||||||
$lineCount = 0;
|
$lineCount = 0;
|
||||||
$fileCount = 0;
|
$fileCount = 0;
|
||||||
|
|
||||||
`mkdir LemTEMP`;
|
open(FILE, ">$tmp_root/slo_$fileCount");
|
||||||
|
|
||||||
open(FILE, ">LemTEMP/slo_0");
|
|
||||||
|
|
||||||
while (<IN>) {
|
while (<IN>) {
|
||||||
|
|
||||||
@ -81,8 +83,8 @@ while (<IN>) {
|
|||||||
$lineCount = 0;
|
$lineCount = 0;
|
||||||
|
|
||||||
close(FILE);
|
close(FILE);
|
||||||
# print "Tworzê nowy plik tymczasowy: slo_".$fileCount."\n";
|
# print "Tworze nowy plik tymczasowy: slo_".$fileCount."\n";
|
||||||
open(FILE, ">LemTEMP/slo_".$fileCount);
|
open(FILE, ">$tmp_root/slo_".$fileCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
print(FILE $_);
|
print(FILE $_);
|
||||||
@ -106,9 +108,7 @@ for ($i=0; $i<=$fileCount; $i++) {
|
|||||||
}
|
}
|
||||||
$files++;
|
$files++;
|
||||||
|
|
||||||
$command = "lexcomplex -l $labfile -S $sclfile < LemTEMP/slo_".$i." > LemTEMP/slownik_".$i.".fsm";
|
`lexcomplex -l $labfile -S $sclfile < $tmp_root/slo_$i > $tmp_root/slownik_$i.fsm`;
|
||||||
|
|
||||||
`$command`;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
if ($dots < 32) {
|
if ($dots < 32) {
|
||||||
@ -119,7 +119,7 @@ if ($dots < 32) {
|
|||||||
|
|
||||||
print "OK\n";
|
print "OK\n";
|
||||||
|
|
||||||
`rm LemTEMP/slo_*`;
|
unlink <$tmp_root/slo_*>;
|
||||||
|
|
||||||
print "building final automaton";
|
print "building final automaton";
|
||||||
|
|
||||||
@ -129,7 +129,7 @@ $filesPerDot = $fileCount/$ndots;
|
|||||||
$files=$filesPerDot;
|
$files=$filesPerDot;
|
||||||
$dots=0;
|
$dots=0;
|
||||||
|
|
||||||
`cp LemTEMP/slownik_0.fsm slownik1.fsm`;
|
copy("$tmp_root/slownik_0.fsm", "$tmp_root/slownik1.fsm");
|
||||||
|
|
||||||
for ($i=1; $i<=$filecount; $i++) {
|
for ($i=1; $i<=$filecount; $i++) {
|
||||||
|
|
||||||
@ -140,11 +140,9 @@ for ($i=1; $i<=$filecount; $i++) {
|
|||||||
}
|
}
|
||||||
$files++;
|
$files++;
|
||||||
|
|
||||||
$command = "fsmunion LemTEMP/slownik_".$i." slownik1.fsm > slownik2.fsm";
|
`fsmunion $tmp_root/slownik_$i slownik1.fsm > $tmp_file/slownik2.fsm`;
|
||||||
|
|
||||||
`$command`;
|
move("$tmp_root/slownik2.fsm", "$tmp_root/slownik1.fsm") || die "Unable to move $tmp_root/slownik2.fsm!\n";
|
||||||
|
|
||||||
`mv slownik2.fsm slownik1.fsm`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($dots < $ndots) {
|
if ($dots < $ndots) {
|
||||||
@ -153,29 +151,29 @@ if ($dots < $ndots) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
`fsmunion LemTEMP/* > slownik1.fsm`;
|
`fsmunion $tmp_root/* > $tmp_root/slownik1.fsm`;
|
||||||
|
|
||||||
print "OK\n";
|
print "OK\n";
|
||||||
|
|
||||||
print "removing epsilon-transitions.............................";
|
print "removing epsilon-transitions.............................";
|
||||||
|
|
||||||
`fsmrmepsilon slownik1.fsm > slownik2.fsm`;
|
`fsmrmepsilon $tmp_root/slownik1.fsm > $tmp_root/slownik2.fsm`;
|
||||||
|
|
||||||
`rm slownik1.fsm`;
|
unlink ("$tmp_root/slownik1.fsm");
|
||||||
|
|
||||||
print "OK\n";
|
print "OK\n";
|
||||||
|
|
||||||
print "determinizing automaton..................................";
|
print "determinizing automaton..................................";
|
||||||
|
|
||||||
`fsmdeterminize slownik2.fsm > slownik1.fsm`;
|
`fsmdeterminize $tmp_root/slownik2.fsm > $tmp_root/slownik1.fsm`;
|
||||||
|
|
||||||
`rm slownik2.fsm`;
|
unlink ("$tmp_root/slownik2.fsm");
|
||||||
|
|
||||||
print "OK\n";
|
print "OK\n";
|
||||||
|
|
||||||
print "minimizing automaton.....................................";
|
print "minimizing automaton.....................................";
|
||||||
|
|
||||||
`fsmminimize slownik1.fsm > slownik.fsm`;
|
`fsmminimize $tmp_root/slownik1.fsm > $tmp_root/slownik.fsm`;
|
||||||
|
|
||||||
#`rm slownik1.fsm`;
|
#`rm slownik1.fsm`;
|
||||||
|
|
||||||
@ -183,22 +181,17 @@ print "OK\n";
|
|||||||
|
|
||||||
print "converting fsm format to bin.............................";
|
print "converting fsm format to bin.............................";
|
||||||
|
|
||||||
`fsmprint -i $labfile slownik.fsm > slownik.txt`;
|
`fsmprint -i $labfile $tmp_root/slownik.fsm > $tmp_root/slownik.txt`;
|
||||||
|
|
||||||
`fsm2aut slownik.txt > slownik.aut`;
|
`fsm2aut $tmp_root/slownik.txt > $tmp_root/slownik.aut`;
|
||||||
|
|
||||||
`aut2fsa < slownik.aut > $filenameprefix.bin`;
|
`aut2fsa < $tmp_root/slownik.aut > $filenameprefix.bin`;
|
||||||
|
|
||||||
print "OK\n";
|
print "OK\n";
|
||||||
|
|
||||||
print "removing temporary files.................................";
|
print "removing temporary files.................................";
|
||||||
|
|
||||||
`rm LemTEMP/*`;
|
unlink <$tmp_root/*>;
|
||||||
`rmdir LemTEMP`;
|
unlink ($tmp_root);
|
||||||
`rm temp2`;
|
|
||||||
`rm slownik.fsm`;
|
|
||||||
`rm slownik.txt`;
|
|
||||||
`rm slownik.aut`;
|
|
||||||
`rm labels.*`;
|
|
||||||
|
|
||||||
print "OK\n";
|
print "OK\n";
|
||||||
|
@ -155,11 +155,10 @@ my $defaultaction = ($only_matching) ? '' : 'ECHO';
|
|||||||
(undef, my $tmpfile_x) = File::Temp::tempfile();
|
(undef, my $tmpfile_x) = File::Temp::tempfile();
|
||||||
|
|
||||||
|
|
||||||
system "m4 \"--define=PATTERN=$flexpattern\" \"--define=DEFAULTACTION=$defaultaction\" $flextemplate > $tmpfile_l";
|
`m4 "--define=PATTERN=$flexpattern" "--define=DEFAULTACTION=$defaultaction" $flextemplate > $tmpfile_l`;
|
||||||
|
|
||||||
if($flex)
|
if($flex)
|
||||||
{
|
{
|
||||||
#system "cat $tmpfile_l";
|
|
||||||
if(open(FLEX, $tmpfile_l)) {
|
if(open(FLEX, $tmpfile_l)) {
|
||||||
while(<FLEX>) {
|
while(<FLEX>) {
|
||||||
print @_;
|
print @_;
|
||||||
@ -172,12 +171,10 @@ if($flex)
|
|||||||
exit 0;
|
exit 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
system "flex -o$tmpfile_c $tmpfile_l";
|
`flex -o$tmpfile_c $tmpfile_l`;
|
||||||
system "cc -O3 -o $tmpfile_x $tmpfile_c -lfl";
|
`cc -O3 -o $tmpfile_x $tmpfile_c -lfl`;
|
||||||
system "$tmpfile_x";
|
`$tmpfile_x`;
|
||||||
|
|
||||||
#system "rm -f $tmpfile_l $tmpfile_c $tmpfile_x";
|
|
||||||
unlink $tmpfile_l;
|
unlink $tmpfile_l;
|
||||||
unlink $tmpfile_c;
|
unlink $tmpfile_c;
|
||||||
unlink $tmpfile_x;
|
unlink $tmpfile_x;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user