From f1563c0f0270f57e03d1fba3f2ce99a3828b3b8c Mon Sep 17 00:00:00 2001 From: obrebski Date: Tue, 11 Mar 2008 12:54:35 +0000 Subject: [PATCH] git-svn-id: svn://atos.wmid.amu.edu.pl/utt@3 e293616e-ec6a-49c2-aa92-f4a8b91c5d16 --- app/conf/Makefile | 8 + app/conf/cor.conf | 7 + app/conf/gue.conf | 8 + app/conf/lem.conf | 7 + nawszelkiwypadek/tools/aut2fsa | Bin 0 -> 57500 bytes nawszelkiwypadek/tools/cor_dic/makeLabels.pl | 11 + nawszelkiwypadek/tools/cor_dic/prep.pl | 67 ++++ nawszelkiwypadek/tools/dist/Makefile | 47 +++ nawszelkiwypadek/tools/dist/README | 5 + nawszelkiwypadek/tools/fsm2aut | 44 +++ nawszelkiwypadek/tools/gue_dic/README | 28 ++ nawszelkiwypadek/tools/gue_dic/attr.pm | 110 ++++++ nawszelkiwypadek/tools/gue_dic/canon.pl | 9 + .../tools/gue_dic/compile_user_dict.pl | 197 ++++++++++ nawszelkiwypadek/tools/gue_dic/count_prefs.pl | 86 +++++ nawszelkiwypadek/tools/gue_dic/cut_prefs.pl | 60 +++ nawszelkiwypadek/tools/gue_dic/gue.bin | 0 nawszelkiwypadek/tools/gue_dic/labels.lab | 95 +++++ nawszelkiwypadek/tools/gue_dic/labels.scl | 356 ++++++++++++++++++ nawszelkiwypadek/tools/gue_dic/labels.sym | 7 + nawszelkiwypadek/tools/gue_dic/makeLabels.pl | 11 + nawszelkiwypadek/tools/gue_dic/prep.pl | 213 +++++++++++ .../tools/gue_dic/prep_user_dict.pl | 31 ++ nawszelkiwypadek/tools/gue_dic/rmDup.pl | 55 +++ nawszelkiwypadek/tools/gue_dic/stat.pl | 165 ++++++++ nawszelkiwypadek/tools/gue_dic/stat_pre.pl | 95 +++++ nawszelkiwypadek/tools/lem_dic/makeLabels.pl | 11 + nawszelkiwypadek/tools/lem_dic/prep.pl | 75 ++++ www/copyright.html | 34 ++ www/downloads.html | 34 ++ www/index.html | 34 ++ www/utt.html | 34 ++ 32 files changed, 1944 insertions(+) create mode 100644 app/conf/Makefile create mode 100644 app/conf/cor.conf create mode 100644 app/conf/gue.conf create mode 100644 app/conf/lem.conf create mode 100755 nawszelkiwypadek/tools/aut2fsa create mode 100755 nawszelkiwypadek/tools/cor_dic/makeLabels.pl create mode 100755 nawszelkiwypadek/tools/cor_dic/prep.pl create mode 100644 nawszelkiwypadek/tools/dist/Makefile create mode 100644 nawszelkiwypadek/tools/dist/README create mode 100755 nawszelkiwypadek/tools/fsm2aut create mode 100644 nawszelkiwypadek/tools/gue_dic/README create mode 100644 nawszelkiwypadek/tools/gue_dic/attr.pm create mode 100755 nawszelkiwypadek/tools/gue_dic/canon.pl create mode 100755 nawszelkiwypadek/tools/gue_dic/compile_user_dict.pl create mode 100755 nawszelkiwypadek/tools/gue_dic/count_prefs.pl create mode 100755 nawszelkiwypadek/tools/gue_dic/cut_prefs.pl create mode 100644 nawszelkiwypadek/tools/gue_dic/gue.bin create mode 100644 nawszelkiwypadek/tools/gue_dic/labels.lab create mode 100644 nawszelkiwypadek/tools/gue_dic/labels.scl create mode 100644 nawszelkiwypadek/tools/gue_dic/labels.sym create mode 100755 nawszelkiwypadek/tools/gue_dic/makeLabels.pl create mode 100755 nawszelkiwypadek/tools/gue_dic/prep.pl create mode 100755 nawszelkiwypadek/tools/gue_dic/prep_user_dict.pl create mode 100755 nawszelkiwypadek/tools/gue_dic/rmDup.pl create mode 100755 nawszelkiwypadek/tools/gue_dic/stat.pl create mode 100755 nawszelkiwypadek/tools/gue_dic/stat_pre.pl create mode 100755 nawszelkiwypadek/tools/lem_dic/makeLabels.pl create mode 100755 nawszelkiwypadek/tools/lem_dic/prep.pl create mode 100644 www/copyright.html create mode 100644 www/downloads.html create mode 100644 www/index.html create mode 100644 www/utt.html diff --git a/app/conf/Makefile b/app/conf/Makefile new file mode 100644 index 0000000..c6df9a7 --- /dev/null +++ b/app/conf/Makefile @@ -0,0 +1,8 @@ +main: + +copy: +ifdef UTT_CONF_DIR + cp *.conf ${UTT_CONF_DIR} +endif + +clean: diff --git a/app/conf/cor.conf b/app/conf/cor.conf new file mode 100644 index 0000000..384b14a --- /dev/null +++ b/app/conf/cor.conf @@ -0,0 +1,7 @@ +# Plik konfiguracyjny dla komponentu cor. + +# kazda linia ma postac: +# nazwa_parametru [=] wartosc + +# PRZYKLAD: analizuj tylko slowa +# p = W diff --git a/app/conf/gue.conf b/app/conf/gue.conf new file mode 100644 index 0000000..7b4bd38 --- /dev/null +++ b/app/conf/gue.conf @@ -0,0 +1,8 @@ +# Plik konfiguracyjny dla komponentu gue. + +# kazda linia ma postac: +# nazwa_parametru [=] wartosc + +# PRZYKLAD: analizuj tylko slowa +# p = W + diff --git a/app/conf/lem.conf b/app/conf/lem.conf new file mode 100644 index 0000000..4708b64 --- /dev/null +++ b/app/conf/lem.conf @@ -0,0 +1,7 @@ +# Plik konfiguracyjny dla komponentu lem. + +# kazda linia ma postac: +# nazwa_parametru [=] wartosc + +# PRZYKLAD: analizuj tylko slowa +# p = W diff --git a/nawszelkiwypadek/tools/aut2fsa b/nawszelkiwypadek/tools/aut2fsa new file mode 100755 index 0000000000000000000000000000000000000000..8a5a9f0ec4efbd4d122262dc155fad0cd394466e GIT binary patch literal 57500 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 labels.sym`; + +`lexmakelab labels`; + +print "Pobieram informacje ze słownika.........................."; + +`cut -d \\; -f 1 <$file > temp1`; + +`sort -u < temp1 > temp2`; + +print "OK\n"; + +print "Kompiluję automat........................................"; + +`lexcomplex -l labels.lab -S labels.scl temp1`; + +print "OK\n"; + +print "Usuwam epsilon-przejscia................................."; + +`fsmrmepsilon temp1> temp2`; + +print "OK\n"; + +print "Determinizuję automat...................................."; + +`fsmdeterminize temp2 > temp1`; + +print "OK\n"; + +print "Minimalizuję automat....................................."; + +`fsmminimize temp1> temp2`; + +print "OK\n"; + +print "Konwertuję automat do formatu fsa........................"; + +`fsmprint -i labels.lab temp2> temp1`; + +`../fsm2aut temp1> temp2`; + +`../aut2fsa < temp2> cor.dic`; + +print "OK\n"; + +print "Czyszczę pliki pomocnicze................................"; + +`rm temp2`; +`rm temp1`; +`rm labels.*`; + +print "OK\n"; + diff --git a/nawszelkiwypadek/tools/dist/Makefile b/nawszelkiwypadek/tools/dist/Makefile new file mode 100644 index 0000000..1d67b8e --- /dev/null +++ b/nawszelkiwypadek/tools/dist/Makefile @@ -0,0 +1,47 @@ +# main makefile + +BIN=bin +SRC=src +DIR=$(shell pwd) +############################## +# CONFIGURATION + +# UTT_BIN_DIR - directory for executables +# UTT_SHARE_DIR - directory for data and stuff +# UTT_DOC_DIR - directory for documentation + +# example (site installation) +# UTT_BIN_DIR=/usr/local/bin +# UTT_DOC_DIR=/usr/share/doc/utt + +UTT_BIN_DIR=~/utt/bin +UTT_SHARE_DIR=~/.utt +UTT_DOC_DIR=~/utt/doc +UTT_LIB_DIR=$(UTT_SHARE_DIR)/lib +############################## + +install: make_dirs install_dta install_lib #install_doc install_components + @echo "Installation completed successfully!" + +install_components: + cp -r bin/* $(UTT_BIN_DIR)/ + +install_dta: + if [ -d data ]; then cp -r data/* $(UTT_SHARE_DIR)/; fi + +install_doc: + cp -r doc/* $(UTT_DOC_DIR)/ + +install_lib: + cp -r lib/* $(UTT_LIB_DIR)/ + +make_dirs: + #if [ -d $(UTT_BIN_DIR) ]; then true; else mkdir -p $(UTT_BIN_DIR); fi + if [ -d $(UTT_SHARE_DIR) ]; then true; else mkdir -p $(UTT_SHARE_DIR); fi + if [ -d $(UTT_LIB_DIR) ]; then true; else mkdir -p $(UTT_LIB_DIR); fi + #if [ -d $(UTT_DOC_DIR) ]; then true; else mkdir -p $(UTT_DOC_DIR); fi + +uninstall: + rm -r $(UTT_SHARE_DIR) + #rm -r $(UTT_BIN_DIR) + #rm -r $(UTT_DOC_DIR) diff --git a/nawszelkiwypadek/tools/dist/README b/nawszelkiwypadek/tools/dist/README new file mode 100644 index 0000000..5719ebf --- /dev/null +++ b/nawszelkiwypadek/tools/dist/README @@ -0,0 +1,5 @@ +Instalacja: + +1) Przeniesc katalog .utt do swojego katalogu domowego. +2) Dopisac do $PATH sciezke do katalogu bin. + diff --git a/nawszelkiwypadek/tools/fsm2aut b/nawszelkiwypadek/tools/fsm2aut new file mode 100755 index 0000000..ee25876 --- /dev/null +++ b/nawszelkiwypadek/tools/fsm2aut @@ -0,0 +1,44 @@ +#!/usr/bin/perl + +my $currstate=-1; +my @states; +my @final; +my $tn=0; + +while(<>) +{ + if(/^\s*([0-9]+)\s+([0-9]+)\s+(.)(\s*)?$/) + { + push @{$states[$1]}, ($3, $2); + $#states=$2 if $#states<$2; + $tn++; + } + elsif(/^\s*([0-9]+)\s*$/) + { + $final[$1]=1; + $#states=$1 if $#states<$1; + } + else + { + die("Input error."); + } +} + +print scalar(@states)," ",$tn," char void\n"; + +my $i=0; +my $width=int(log(@states+1)/log(10)); +foreach $stateref (@states) +{ + $f = ($final[$i]?"+":"-"); + printf "%${width}d %s",$i++,$f; + while(@$stateref) + { + $c=shift @$stateref; + $s=shift @$stateref; + print " $c $s"; + } + print "\n"; +} + + diff --git a/nawszelkiwypadek/tools/gue_dic/README b/nawszelkiwypadek/tools/gue_dic/README new file mode 100644 index 0000000..1d490fb --- /dev/null +++ b/nawszelkiwypadek/tools/gue_dic/README @@ -0,0 +1,28 @@ +How to prepare gue dictionary? + +1. Preparing input file. + +Lines in input file should look like this: + +prefix*suffix~weight;description + +where: +prefix - is the prefix of a word +suffix - is the suffix of a word +weight - is the weight saying how importand information in this line is +description - is a description of the word + (in any format - description will be in output of gue) + + +2. Compiling a dictionary. + +Let's say we have input file named "dict.in". +Commands compiling dictionary: + +prep_user_dict.pl < dict.in > dict.temp +compile_user_dict.pl dict.temp + +Those should create file called "gue.bin" which is dictionary +for gue component. + +Good luck. diff --git a/nawszelkiwypadek/tools/gue_dic/attr.pm b/nawszelkiwypadek/tools/gue_dic/attr.pm new file mode 100644 index 0000000..c15d75e --- /dev/null +++ b/nawszelkiwypadek/tools/gue_dic/attr.pm @@ -0,0 +1,110 @@ +package attr; + +use locale; +use strict; + + +sub match(\@\@) +{ + my ($cat1,$avs1)= @{shift @_}; + my ($cat2,$avs2)= @{shift @_}; + + if($cat1 ne $cat2) + { + return 0; + } + else + { + ATTR:for my $attr (keys %$avs1) + { + if($avs2->{$attr}) + { + for my $val (keys %{$avs1->{$attr}}) + { + next ATTR if $avs2->{$attr}->{$val}; + } + return 0; + last ATTR; + } + } + } + + return 1; +} + +# funkcja parse +# arg: deskrypcja +# wartość: referencja do tablicy [, ], +# gdzie jest referencja do hasza, zawierajacego pary +# atrybut=>hasz wartości (pary wartość=>1), czyli np. + +# [ +# 'ADJ', +# { +# 'KOLEDZY' => { +# '' => 1, +# '' => 1, +# '' => 1 +# }, +# 'C' => { +# 'p' => 1, +# 'a' => 1, +# 'i' => 1 +# }, +# 'N' => { +# 'p' => 1 +# } +# } +# ]; + +sub parse ($) +{ + my ($dstr)=@_; + my $avs={}; + my ($cat,$attrlist) = split '/', $dstr; + attr: + while( $attrlist =~ /([[:upper:]]+)((?:[[:lower:]+?!*-]|<[^>\n]+>)+)/g ) + { + my ($attrstr,$valstr)=($1,$2); + my %vals; + while($valstr =~ /[[:lower:]+?!*-]|<[^>\n]+>/g) + { + my $val = $&; + next attr if $val eq '*'; + $val =~ s/^<([[:lower:]])>$/$1/; + $vals{$val}=1; + } + + $avs->{$attrstr} = \%vals; # dlaczego to dziala? %vals jest lokalne + } + [$cat, $avs]; +} + +# funkcja unparse +# arg: jak wartość parse +# wartość: deskrypcja - napis + +sub unparse (\@) +{ + my ($cat,$avs)= @{shift @_}; + my $dstr=$cat; + my @attrs = keys %$avs; + if(@attrs) + { + $dstr .= '/'; + for my $attr ( sort @attrs ) + { + $dstr .= $attr . (join '', sort keys %{$avs->{$attr}}); + } + } + $dstr; +} + + +sub canonize ($) +{ + unparse @{parse @_[0]} ; +} + + +1; diff --git a/nawszelkiwypadek/tools/gue_dic/canon.pl b/nawszelkiwypadek/tools/gue_dic/canon.pl new file mode 100755 index 0000000..e85a7de --- /dev/null +++ b/nawszelkiwypadek/tools/gue_dic/canon.pl @@ -0,0 +1,9 @@ +#!/usr/bin/perl + +use locale; +use attr; + +while (<>) { + s/,(.*)$/','.attr::canonize($1)/e; + print; +} diff --git a/nawszelkiwypadek/tools/gue_dic/compile_user_dict.pl b/nawszelkiwypadek/tools/gue_dic/compile_user_dict.pl new file mode 100755 index 0000000..a7267ac --- /dev/null +++ b/nawszelkiwypadek/tools/gue_dic/compile_user_dict.pl @@ -0,0 +1,197 @@ +#! /usr/bin/env perl + +use locale; +#use strict; + +# +################################################## +$linesPerFile = 20000; + +if (@ARGV < 1) { + print "usage: prep_user_dict.pl dictionary_file\n"; + exit; +} + +$file = shift; # @ARGV; + +# Przygotowanie etykiet + +`makeLabels.pl > labels.sym`; + +`lexmakelab labels`; + +# Analiza pliku słownika + + +print "Kanonizuję opisy........................................."; + +`canon.pl <$file >temp1`; + +print "OK\n"; + +print "Sortuję plik............................................."; + +`sort -t \\~ -k1,1 -k2,2nr temp2`; + +print "OK\n"; + +print "Minimalizuję plik słownika..............................."; + +#`rmDup.pl < temp2 > temp1`; +#`rmDup2.pl < temp1 > temp2`; + +`cp temp1 temp2`; + +`rm temp1`; + +print "OK\n"; + +print "Czyszczę pliki..........................................."; + +`sed -r "s/([[:punct:]])/[\\1]/g" < temp2 > temp1`; + +`cp temp1 temp2`; +`rm temp1`; + +print "OK\n"; + +#dzielimy plik na wiele części, uruchamiamy lexcomplex dla każdej +#części osobno, następnie łączymy to za pomocą programu fsmunion + +print "Dzielę słownik na mniejsze części........................"; + +open(IN, "./temp2"); + +$lineCount = 0; +$fileCount = 0; + +`mkdir LemTEMP`; + +open(FILE, ">LemTEMP/slo_0"); + +while () { + + if (++$lineCount >= $linesPerFile) { + $fileCount++; + $lineCount = 0; + + close(FILE); +# print "Tworzę nowy plik tymczasowy: slo_".$fileCount."\n"; + open(FILE, ">LemTEMP/slo_".$fileCount); + } + + print(FILE $_); +} + +print "OK\n"; + +print "Tworzę automaty pośrednie"; + +#32 kropki, fileCount plikow +$filesPerDot = $fileCount/32; +$files=$filesPerDot; +$dots=0; + +for ($i=0; $i<=$fileCount; $i++) { + + if ($files >= $filesPerDot) { + $files = 0; + print "."; + $dots++; + } + $files++; + + $command = "lexcomplex -l labels.lab -S labels.scl < LemTEMP/slo_".$i." > LemTEMP/slownik_".$i.".fsm"; + + `$command`; + +} +if ($dots < 32) { + for ($i=0; $i<32 - $dots; $i++) { + print "."; + } +} + +print "OK\n"; + +`rm LemTEMP/slo_*`; + +print "Tworzę automat końcowy"; + +#35 kropek... +$filesPerDot = $fileCount/35; +$files=$filesPerDot; +$dots=0; + +`cp LemTEMP/slownik_0.fsm slownik1.fsm`; + +for ($i=1; $i<=$filecount; $i++) { + + if ($files >= $filesPerDot) { + $files = 0; + print "."; + $dots++; + } + $files++; + + $command = "fsmunion LemTEMP/slownik_".$i." slownik1.fsm > slownik2.fsm"; + + `$command`; + + `mv slownik2.fsm slownik1.fsm`; +} + +if ($dots < 35) { + for ($i=0; $i<35 - $dots; $i++) { + print "."; + } +} + +`fsmunion LemTEMP/* > slownik1.fsm`; + +print "OK\n"; + +print "Usuwam epsilon-przejscia................................."; + +`fsmrmepsilon slownik1.fsm > slownik2.fsm`; + +`rm slownik1.fsm`; + +print "OK\n"; + +print "Determinizuję automat...................................."; + +`fsmdeterminize slownik2.fsm > slownik1.fsm`; + +`rm slownik2.fsm`; + +print "OK\n"; + +print "Minimalizuję automat....................................."; + +`fsmminimize slownik1.fsm > slownik.fsm`; + +`rm slownik1.fsm`; + +print "OK\n"; + +print "Konwertuję automat do formatu fsa........................"; + +`fsmprint -i labels.lab slownik.fsm > slownik.txt`; + +`../fsm2aut slownik.txt > slownik.aut`; + +`../aut2fsa < slownik.aut > gue.bin`; + +print "OK\n"; + +print "Czyszczę pliki pomocnicze................................"; + +`rm LemTEMP/*`; +`rmdir LemTEMP`; +`rm temp2`; +`rm slownik.fsm`; +`rm slownik.txt`; +`rm slownik.aut`; + +print "OK\n"; diff --git a/nawszelkiwypadek/tools/gue_dic/count_prefs.pl b/nawszelkiwypadek/tools/gue_dic/count_prefs.pl new file mode 100755 index 0000000..1c382d4 --- /dev/null +++ b/nawszelkiwypadek/tools/gue_dic/count_prefs.pl @@ -0,0 +1,86 @@ +#! /usr/bin/perl + +use locale; +use strict; + +my @prefs; + +sub addPref { + + my $pref = shift; + my $desc = shift; + my $i; + for ($i=0; $i< @prefs; ++$i) { + my @tab = @{$prefs[$i]}; + if (${@{$prefs[$i]}}[0] =~ /^$pref/) { + ${@{$prefs[$i]}}[1]{$desc}++; + return; + } + } + my @new; + my %hash; + + $hash{$desc}++; + push(@new, $pref); + push(@new, \%hash); + + push(@prefs, \@new); +} + +sub printPrefs { + + my $i; + for $i (@prefs) { + my @tab = @$i; +# print $tab[0]."\t"; + my $pref = $tab[0]; + my %hash = %{$tab[1]}; + my @keys = keys(%hash); +# print(@keys."\n"); + my $sum = 0; + my $key; + for $key (@keys) { + $sum += $hash{$key}; + } + for $key (@keys) { + print $pref."\t"; + print $key."\t"; + print $hash{$key}."\t"; + print $sum."\n"; + } + } +} + +if (@ARGV < 2) { + print "USAGE: count_prefs.pl MIN_PREF_LEN MAX_PREF_LEN\n"; + exit; +} + +my $MIN = shift; +my $MAX = shift; +my $PART = shift; + +if ($MIN > $MAX) { + print "MIN_PREF_LEN > MAX_PREF_LEN! ($MIN > $MAX)\n"; + exit; +} +my $begin = ""; +while (<>) { + my $len = $MIN; + $_ =~ /(\w+);(.*)$/; + my $pref = $1; + my $desc = $2; + if ($begin eq "") { + $begin = substr($pref, 0, $MIN); + } + if ($pref !~ /^$begin.*/) { + printPrefs(); + undef(@prefs); + $begin = ""; + } + while ($len <= $MAX) { + addPref(substr($pref, 0, $len++), $desc); + } +} + +printPrefs(); diff --git a/nawszelkiwypadek/tools/gue_dic/cut_prefs.pl b/nawszelkiwypadek/tools/gue_dic/cut_prefs.pl new file mode 100755 index 0000000..eb6c25e --- /dev/null +++ b/nawszelkiwypadek/tools/gue_dic/cut_prefs.pl @@ -0,0 +1,60 @@ +#! /usr/bin/perl + +use locale; +use strict; + +if (@ARGV < 3) { + print "USAGE: cut_prefs.pl CUT_OFF TOTAL_PER ABS_CUT\n\n"; + print "Obcina wpisy mało ważne, opis nie jest uwzględniany\n"; + print "jeżeli zachodzi jeden z warunków:\n"; + print " - jezeli liczba wystapien danego opisu jest mniejsza\n"; + print " od \$CUT_OFF*(liczba wystapien poprzedniego opisu)\n"; + print " - jezeli liczba wystapien danego opisu jest mniejsza\n"; + print " od \$TOTAL_PER*(suma wszystkich wystapien)\n"; + print " - jezeli liczba wystapien danego opisu jest mniejsza\n"; + print " od \$ABS_CUT\n"; + exit; +} + +# jezeli liczba wystapien danego opisu jest mniejsza +# od $CUT_OFF*(liczba wystapien poprzedniego opisu) - opis nie jest uwzgledniany +my $CUT_OFF = shift; + +# jezeli liczba wystapien danego opisu jest mniejsza +# od $TOTAL_PER*(suma wszystkich wystapien) - opis nie jest uwzgledniany +my $TOTAL_PER = shift; + +# jezeli liczba wystapien danego opisu jest mniejsza +# od $ABS_CUT - opis nie jest uwzgledniany +my $ABS_CUT = shift; + +my $pref = ""; +my $oldPref = " "; +my $countTotal = -1; +my $count = -1; + +while (<>) { + + if (($count == -1) && ($_ =~ /^$oldPref\t.*/)) { + next; + } + + if ($pref =~ //) { + $_ =~ /^(\w+)\t.+\t(\d+)\t(\d+)/; + $pref = $1; + $count = $2; + $countTotal = $3; +# print "\$pref=$pref\t\$count=$count\t\$countTotal=$countTotal\n"; + } + $_ =~ /\w+\t.+\t(\d+)\t\d+/; + my $c = $1; +# print "\$c=$c\t\$CUT_OFF*\$count=$CUT_OFF*$count\t\$TOTAL_PER*\$countTotal=".$TOTAL_PER*$countTotal."\n"; + if (($CUT_OFF*$count < $c) && ($TOTAL_PER*$countTotal < $c) && ($ABS_CUT < $c)) { + $count = $c; + print $_; + } else { + $count = -1; + $oldPref = $pref; + $pref = ""; + } +} diff --git a/nawszelkiwypadek/tools/gue_dic/gue.bin b/nawszelkiwypadek/tools/gue_dic/gue.bin new file mode 100644 index 0000000..e69de29 diff --git a/nawszelkiwypadek/tools/gue_dic/labels.lab b/nawszelkiwypadek/tools/gue_dic/labels.lab new file mode 100644 index 0000000..09e0cb7 --- /dev/null +++ b/nawszelkiwypadek/tools/gue_dic/labels.lab @@ -0,0 +1,95 @@ + 0 +a 1 +ą 2 +b 3 +c 4 +ć 5 +d 6 +e 7 +ę 8 +f 9 +g 10 +h 11 +i 12 +j 13 +k 14 +l 15 +ł 16 +m 17 +n 18 +ń 19 +o 20 +ó 21 +p 22 +q 23 +r 24 +s 25 +ś 26 +t 27 +u 28 +v 29 +w 30 +x 31 +y 32 +z 33 +ź 34 +ż 35 +é 36 +ö 37 +ü 38 +ä 39 +A 40 +Ą 41 +B 42 +C 43 +Ć 44 +D 45 +E 46 +Ę 47 +F 48 +G 49 +H 50 +I 51 +J 52 +K 53 +L 54 +Ł 55 +M 56 +N 57 +Ń 58 +O 59 +Ó 60 +P 61 +Q 62 +R 63 +S 64 +Ś 65 +T 66 +U 67 +V 68 +W 69 +X 70 +Y 71 +Z 72 +Ź 73 +Ż 74 +0 75 +1 76 +2 77 +3 78 +4 79 +5 80 +6 81 +7 82 +8 83 +9 84 +, 85 +. 86 +@ 87 +/ 88 +' 89 +_ 90 +~ 91 +; 92 +- 93 +\ 94 diff --git a/nawszelkiwypadek/tools/gue_dic/labels.scl b/nawszelkiwypadek/tools/gue_dic/labels.scl new file mode 100644 index 0000000..5765e22 --- /dev/null +++ b/nawszelkiwypadek/tools/gue_dic/labels.scl @@ -0,0 +1,356 @@ +lcase 1 +lcase 2 +lcase 3 +lcase 4 +lcase 5 +lcase 6 +lcase 7 +lcase 8 +lcase 9 +lcase 10 +lcase 11 +lcase 12 +lcase 13 +lcase 14 +lcase 15 +lcase 16 +lcase 17 +lcase 18 +lcase 19 +lcase 20 +lcase 21 +lcase 22 +lcase 23 +lcase 24 +lcase 25 +lcase 26 +lcase 27 +lcase 28 +lcase 29 +lcase 30 +lcase 31 +lcase 32 +lcase 33 +lcase 34 +lcase 35 +lcase 36 +lcase 37 +lcase 38 +lcase 39 +sem 91 +sem 92 +sem 93 +sem 94 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 50 + 51 + 52 + 53 + 54 + 55 + 56 + 57 + 58 + 59 + 60 + 61 + 62 + 63 + 64 + 65 + 66 + 67 + 68 + 69 + 70 + 71 + 72 + 73 + 74 + 75 + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 +ucase 40 +ucase 41 +ucase 42 +ucase 43 +ucase 44 +ucase 45 +ucase 46 +ucase 47 +ucase 48 +ucase 49 +ucase 50 +ucase 51 +ucase 52 +ucase 53 +ucase 54 +ucase 55 +ucase 56 +ucase 57 +ucase 58 +ucase 59 +ucase 60 +ucase 61 +ucase 62 +ucase 63 +ucase 64 +ucase 65 +ucase 66 +ucase 67 +ucase 68 +ucase 69 +ucase 70 +ucase 71 +ucase 72 +ucase 73 +ucase 74 +letter 1 +letter 2 +letter 3 +letter 4 +letter 5 +letter 6 +letter 7 +letter 8 +letter 9 +letter 10 +letter 11 +letter 12 +letter 13 +letter 14 +letter 15 +letter 16 +letter 17 +letter 18 +letter 19 +letter 20 +letter 21 +letter 22 +letter 23 +letter 24 +letter 25 +letter 26 +letter 27 +letter 28 +letter 29 +letter 30 +letter 31 +letter 32 +letter 33 +letter 34 +letter 35 +letter 36 +letter 37 +letter 38 +letter 39 +letter 40 +letter 41 +letter 42 +letter 43 +letter 44 +letter 45 +letter 46 +letter 47 +letter 48 +letter 49 +letter 50 +letter 51 +letter 52 +letter 53 +letter 54 +letter 55 +letter 56 +letter 57 +letter 58 +letter 59 +letter 60 +letter 61 +letter 62 +letter 63 +letter 64 +letter 65 +letter 66 +letter 67 +letter 68 +letter 69 +letter 70 +letter 71 +letter 72 +letter 73 +letter 74 +all 1 +all 2 +all 3 +all 4 +all 5 +all 6 +all 7 +all 8 +all 9 +all 10 +all 11 +all 12 +all 13 +all 14 +all 15 +all 16 +all 17 +all 18 +all 19 +all 20 +all 21 +all 22 +all 23 +all 24 +all 25 +all 26 +all 27 +all 28 +all 29 +all 30 +all 31 +all 32 +all 33 +all 34 +all 35 +all 36 +all 37 +all 38 +all 39 +all 40 +all 41 +all 42 +all 43 +all 44 +all 45 +all 46 +all 47 +all 48 +all 49 +all 50 +all 51 +all 52 +all 53 +all 54 +all 55 +all 56 +all 57 +all 58 +all 59 +all 60 +all 61 +all 62 +all 63 +all 64 +all 65 +all 66 +all 67 +all 68 +all 69 +all 70 +all 71 +all 72 +all 73 +all 74 +all 75 +all 76 +all 77 +all 78 +all 79 +all 80 +all 81 +all 82 +all 83 +all 84 +all 85 +all 86 +all 87 +all 88 +all 89 +all 90 +all 91 +all 92 +all 93 +all 94 +digit 75 +digit 76 +digit 77 +digit 78 +digit 79 +digit 80 +digit 81 +digit 82 +digit 83 +digit 84 +signs 85 +signs 86 +signs 87 +signs 88 +signs 89 +signs 90 diff --git a/nawszelkiwypadek/tools/gue_dic/labels.sym b/nawszelkiwypadek/tools/gue_dic/labels.sym new file mode 100644 index 0000000..ef82a4e --- /dev/null +++ b/nawszelkiwypadek/tools/gue_dic/labels.sym @@ -0,0 +1,7 @@ +lcase a ą b c ć d e ę f g h i j k l ł m n ń o ó p q r s ś t u v w x y z ź ż é ö ü ä +ucase A Ą B C Ć D E Ę F G H I J K L Ł M N Ń O Ó P Q R S Ś T U V W X Y Z Ź Ż +letter lcase ucase +digit 0 1 2 3 4 5 6 7 8 9 +signs , . @ / ' _ +sem ~ ; - \ +all letter digit signs sem diff --git a/nawszelkiwypadek/tools/gue_dic/makeLabels.pl b/nawszelkiwypadek/tools/gue_dic/makeLabels.pl new file mode 100755 index 0000000..98ad155 --- /dev/null +++ b/nawszelkiwypadek/tools/gue_dic/makeLabels.pl @@ -0,0 +1,11 @@ +#!/usr/bin/perl + +use locale; + +print "lcase a ą b c ć d e ę f g h i j k l ł m n ń o ó p q r s ś t u v w x y z ź ż é ö ü ä\n"; +print "ucase A Ą B C Ć D E Ę F G H I J K L Ł M N Ń O Ó P Q R S Ś T U V W X Y Z Ź Ż\n"; +print "letter lcase ucase\n"; +print "digit 0 1 2 3 4 5 6 7 8 9\n"; +print "signs , . @ \/ \' _\n"; +print "sem ~ ; - \\ \n"; +print "all letter digit signs sem\n"; diff --git a/nawszelkiwypadek/tools/gue_dic/prep.pl b/nawszelkiwypadek/tools/gue_dic/prep.pl new file mode 100755 index 0000000..0e61bec --- /dev/null +++ b/nawszelkiwypadek/tools/gue_dic/prep.pl @@ -0,0 +1,213 @@ +#! /usr/bin/perl + +use locale; + +$linesPerFile = 20000; + +if (@ARGV < 1) { + print "usage: prep.pl dictionary_file\n"; + exit; +} + +$file = shift; # @ARGV; +$kind = shift; + +if ($kind eq "") { + $kind="suf"; +} + +# Przygotowanie etykiet + +`makeLabels.pl > labels.sym`; + +`lexmakelab labels`; + +# Analiza pliku słownika + + +print "Kanonizuję opisy........................................."; + +`canon.pl <$file >temp2`; + +print "OK\n"; + +print "Analizuje prefiksy......................................."; + +`count_prefs.pl 2 4 < temp2 > prefs`; +`sort -k1,1 -k3,3nr prefs > prefsS`; +`cut_prefs.pl 0.5 0.01 100 prefsS > prefs`; +`rm prefsS`; + +print "OK\n"; + +print "Analizuję plik słownika"; + +if ($kind eq "pre") { + print "(pre)............................."; + `stat_pre.pl temp2 > temp1`; +} else { + print "(suf)............................."; + `stat.pl prefs < temp2 > temp1`; +} + +print "OK\n"; + +# zmniejszamy plik... + +print "Sortuję plik............................................."; + +`sort -t \\~ -k1,1 -k2,2nr temp2`; + +print "OK\n"; + +print "Minimalizuję plik słownika..............................."; + +`rmDup.pl < temp2 > temp1`; +#`rmDup2.pl < temp1 > temp2`; + +`cp temp1 temp2`; + +`rm temp1`; + +print "OK\n"; + +#dzielimy plik na wiele części, uruchamiamy lexcomplex dla każdej +#części osobno, następnie łączymy to za pomocą programu fsmunion + +print "Dzielę słownik na mniejsze części........................"; + +open(IN, "./temp2"); + +$lineCount = 0; +$fileCount = 0; + +`mkdir LemTEMP`; + +open(FILE, ">LemTEMP/slo_0"); + +while () { + + if (++$lineCount >= $linesPerFile) { + $fileCount++; + $lineCount = 0; + + close(FILE); +# print "Tworzę nowy plik tymczasowy: slo_".$fileCount."\n"; + open(FILE, ">LemTEMP/slo_".$fileCount); + } + + print(FILE $_); +} + +print "OK\n"; + +print "Tworzę automaty pośrednie"; + +#32 kropki, fileCount plikow +$filesPerDot = $fileCount/32; +$files=$filesPerDot; +$dots=0; + +for ($i=0; $i<=$fileCount; $i++) { + + if ($files >= $filesPerDot) { + $files = 0; + print "."; + $dots++; + } + $files++; + + $command = "lexcomplex -l labels.lab -S labels.scl < LemTEMP/slo_".$i." > LemTEMP/slownik_".$i.".fsm"; + + `$command`; + +} +if ($dots < 32) { + for ($i=0; $i<32 - $dots; $i++) { + print "."; + } +} + +print "OK\n"; + +`rm LemTEMP/slo_*`; + +print "Tworzę automat końcowy"; + +#35 kropek... +$filesPerDot = $fileCount/35; +$files=$filesPerDot; +$dots=0; + +`cp LemTEMP/slownik_0.fsm slownik1.fsm`; + +for ($i=1; $i<=$filecount; $i++) { + + if ($files >= $filesPerDot) { + $files = 0; + print "."; + $dots++; + } + $files++; + + $command = "fsmunion LemTEMP/slownik_".$i." slownik1.fsm > slownik2.fsm"; + + `$command`; + + `mv slownik2.fsm slownik1.fsm`; +} + +if ($dots < 35) { + for ($i=0; $i<35 - $dots; $i++) { + print "."; + } +} + +`fsmunion LemTEMP/* > slownik1.fsm`; + +print "OK\n"; + +print "Usuwam epsilon-przejscia................................."; + +`fsmrmepsilon slownik1.fsm > slownik2.fsm`; + +`rm slownik1.fsm`; + +print "OK\n"; + +print "Determinizuję automat...................................."; + +`fsmdeterminize slownik2.fsm > slownik1.fsm`; + +`rm slownik2.fsm`; + +print "OK\n"; + +print "Minimalizuję automat....................................."; + +`fsmminimize slownik1.fsm > slownik.fsm`; + +`rm slownik1.fsm`; + +print "OK\n"; + +print "Konwertuję automat do formatu fsa........................"; + +`fsmprint -i labels.lab slownik.fsm > slownik.txt`; + +`../fsm2aut slownik.txt > slownik.aut`; + +`../aut2fsa < slownik.aut > gue.bin`; + +print "OK\n"; + +print "Czyszczę pliki pomocnicze................................"; + +`rm LemTEMP/*`; +`rmdir LemTEMP`; +`rm temp2`; +`rm slownik.fsm`; +`rm slownik.txt`; +`rm slownik.aut`; + +print "OK\n"; diff --git a/nawszelkiwypadek/tools/gue_dic/prep_user_dict.pl b/nawszelkiwypadek/tools/gue_dic/prep_user_dict.pl new file mode 100755 index 0000000..27ef1e1 --- /dev/null +++ b/nawszelkiwypadek/tools/gue_dic/prep_user_dict.pl @@ -0,0 +1,31 @@ +#! /usr/bin/env perl + +use locale; +use strict; + +################################################## +# Skrypt transformuje słownik użytkownika # +# do słownika rozumianego przez gue. # +# Format wejściowy: # +# pref*kon~waga;opis # +# Format wyjściowy: # +# nok_pref~waga;opis # +# # +# Prefiks może być pusty, końcówka też # +################################################## + +while (<>) { + /^(\w*)\*(\w*)(~.*)$/; + my $pref = $1; + my $kon = $2; + my $desc = $3; + + print reverse(split("",$kon)); + + if ($pref != "") { + print "_$pref"; + } + print "$desc\n"; + + +} diff --git a/nawszelkiwypadek/tools/gue_dic/rmDup.pl b/nawszelkiwypadek/tools/gue_dic/rmDup.pl new file mode 100755 index 0000000..0b82cd0 --- /dev/null +++ b/nawszelkiwypadek/tools/gue_dic/rmDup.pl @@ -0,0 +1,55 @@ +#!/usr/bin/perl + +# Usuwa zbędne powtórzenia scieżek + +use locale; + +#if (@ARGV < 1) { +# print "USAGE: remDup.pl num\n\tGdzie \"num\" jest ilością powtórzeń, które zostawiamy\n"; +# exit(0); +#} + + + +#ilość powtórzeń, które zostawiamy +$max = 10; + +# przyjmujemy, ze na wejściu znajduje się plik posortowany, +# po końcówkach oraz po prawdopodobieństwie + +$line = <>; + +while (($line !~ m/^$/) || ($line =~ m/^\n$/)) { + + $count = 0; + + while ($line =~ m/^\n$/) { + $line = <>; + } + + $line =~ /^([^~]+)~.*/; + $theEnd = $1; + $end = $1; + + while (($end =~ m/$theEnd/) && ($count++ < $max)) { + print $line; + $line = <>; + $line =~ /^([^~]+)~.*/; + $end = $1; + } + + # tutaj mamy dwie możliwości: + # 1. wypisaliśmy już max lini - musimy wywalić kolejne linie, które + # zawierają końcówkę theEnd, + # 2. pasujących lini było mniej niż max, wtedy nic nie musimy robić + # - w zmiennej line znajduje się kolejna linia... + + if ($count == $max + 1) { + while ($oldEnd =~ m/$theEnd/) { + $line = <>; + $line =~ /^([^~]+)~.*/; + $oldEnd = $1; + } + } + +} diff --git a/nawszelkiwypadek/tools/gue_dic/stat.pl b/nawszelkiwypadek/tools/gue_dic/stat.pl new file mode 100755 index 0000000..3f0f826 --- /dev/null +++ b/nawszelkiwypadek/tools/gue_dic/stat.pl @@ -0,0 +1,165 @@ +#! /usr/bin/perl + +use locale; + +###################################################### +# na wejściu znajduje się plik zawierający linie # +# postaci: # +# slowo;opis # +# # +# na wyjściu ma się znaleźć plik zawierający linie: # +# końcówka(rev);prawdopodobieństwo;opis # +# gdzie: # +# - końcówka(rev) jest końcówką wyrazu zapisaną # +# w odwrotnej kolejności, dla każdego wyrazu # +# w słowniku wypisujemy końcówki o długościach # +# od 1 do długości wyrazu, # +# - prawdopodobieństwo jest prawdopodobieństwem # +# wystąpienia danego opisu dla danej końcówki # +# (obliczonym na podstwie statystycznej analizy # +# słownika), np: 250 oznacza, ze opis popjawia sie # +# 1 raz na 4 wystąpienia końcówki. # +# Zapisana zostaje odwrotność prawdopodobieństwa # +# aby scieżka najbardziej prawdopodobna miała # +# najmniejszy koszt. # +###################################################### + +###### +#STALE +# +# Jak bardzo prawdopodobna musi być dana ścieżka, aby +# brać ją pod uwagę? (w promilach) +$MIN_PROB = 0; +# +# Maksymalna ilość powtórzeń danej końcówki (brane od +# najbardziej prawdopodbnej w dół +$MAX_PATH = 10; +# +# Znak odzielajacy koncowke od prefiksu +$PREF_SIGN = '_'; +###### +# Zmienne globalne +# +# Tablica okreslajaca, ktore prefiksy nalezy uwzlednic +# w wyjsciowym pliku. +# Klucz - ciag znakow prefiks$PREF_SIGNopis. +# Wartosc: 1 - jezeli nalezy uwzglednic, 0 w przeciwnym przypadku +my %prefs; +# +# maksymalna dlugosc analizowanego prefiksu +my $MAX_PREF = 0; +###### + +########################################################### +# FUNKCJE + +# wczytuje prefiksy do tablicy hashowej +# parametry: +# - nazwa pliku, z ktorego nalezy pobrac prefiksy +# Plik w formacie: +# prefiks\topis...\n +sub load_prefs { + + my $file = shift; + open(IN, $file); + + while () { + $_ =~ /^(\w+)\t([^\t]+)\t/; + my $key = "$1$PREF_SIGN$2"; + my $len = length($1); + if ($len > $MAX_PREF) { + $MAX_PREF = $len; + } + $prefs{$key} = 1; + } +} + +########################################################### + +# Jezeli podano parametr to jest to nazwa pliku z prefiksami + +if (@ARGV > 0) { +# print "Laduje prefiksy ($ARGV[0])\n"; + load_prefs(shift); +# print "Zaladowane:\n"; +# for $key (keys(%prefs)) { +# print "$key\t$prefs{$key}\n"; +# } +# print "++++++++++++++++++++++++++++++++++++++++++++++++++\n"; +} + +@input = <>; + +#$max = 0; + +#for $m (@input) { +# $m =~ /(\w+);.*$/; +# if (length($1) > $max) { +# $max = length($1); +# } +#} + +$n = 2; #$max; + +$go = 1; + +while ($go) { + + my %koncowki; + my $sumy; + + $go = 0; + for $m (@input) { + if ($m =~ /(\w{$n});(.*)$/) { + $go = 1; + my $ending = $1; + my $desc = $2; + for (my $i=$MAX_PREF; $i>0; $i--) { + $m =~ /^(\w{$i}).*/; + my $key = "$1$PREF_SIGN$desc"; + if ($prefs{$key} == 1) { + $ending .= "$PREF_SIGN$1"; + last; + } + } + $koncowki{$ending.";".$desc}++; + $sumy{$ending}++; + } + } + + print "\n"; + + for $koncowka (keys %koncowki) { + $koncowka =~ /^(.*);(.*)$/; + my $ending = $1; + my $opis = $2; + $p = $koncowki{$koncowka} / $sumy{$ending}; + $p *= 1000; #wartosc w promilach + + if ($p <= $MIN_PROB) { + next; + } + + #if ($p == 1000) { + # $p--; + #} + + #$p = 1000 - $p; #odwrotnosc + my $old = $2; + $ending =~ /^(\w+)$PREF_SIGN(\w+)/; + + my $rev = reverse($1); + + if ($2 !~ /^$old$/) { + $rev .= "$PREF_SIGN$2"; + } + + # opakowujemy znak '-' znakami [] ;) dla lextools + $opis =~ s/-/\[-\]/; + + printf "%s~%.0f;%s\n", $rev, $p, $opis; + } + + $n++; + +} diff --git a/nawszelkiwypadek/tools/gue_dic/stat_pre.pl b/nawszelkiwypadek/tools/gue_dic/stat_pre.pl new file mode 100755 index 0000000..07d55ec --- /dev/null +++ b/nawszelkiwypadek/tools/gue_dic/stat_pre.pl @@ -0,0 +1,95 @@ +#! /usr/bin/perl + +use locale; + +###################################################### +# na wejściu znajduje się plik zawierający linie # +# postaci: # +# slowo;opis # +# # +# na wyjściu ma się znaleźć plik zawierający linie: # +# końcówka(rev);prawdopodobieństwo;opis # +# gdzie: # +# - końcówka(rev) jest końcówką wyrazu zapisaną # +# w odwrotnej kolejności, dla każdego wyrazu # +# w słowniku wypisujemy końcówki o długościach # +# od 1 do długości wyrazu, # +# - prawdopodobieństwo jest prawdopodobieństwem # +# wystąpienia danego opisu dla danej końcówki # +# (obliczonym na podstwie statystycznej analizy # +# słownika), np: 250 oznacza, ze opis popjawia sie # +# 1 raz na 4 wystąpienia końcówki. # +# Zapisana zostaje odwrotność prawdopodobieństwa # +# aby scieżka najbardziej prawdopodobna miała # +# najmniejszy koszt. # +###################################################### + +###### +#STALE +# +# Jak bardzo prawdopodobna musi być dana ścieżka, aby +# brać ją pod uwagę? (w promilach) +$MIN_PROB = 0; +# +# Maksymalna ilość powtórzeń danej końcówki (brane od +# najbardziej prawdopodbnej w dół +$MAX_PATH = 10; +# +###### + +@input = <>; + +#$max = 0; + +#for $m (@input) { +# $m =~ /(\w+);.*$/; +# if (length($1) > $max) { +# $max = length($1); +# } +#} + +$n = 1; #$max; + +$go = 1; + +while ($n<7) { + + my %prefiksy; + my $sumy; + + $go = 0; + for $m (@input) { + if ($m =~ /^(\w{$n})\w*;(.*)$/) { + $go = 1; + $prefiksy{$1.";".$2}++; + $sumy{$1}++; + } + } + + print "\n"; + + for $prefiks (keys %prefiksy) { + $prefiks =~ /^(.*);(.*)$/; + $p = $prefiksy{$prefiks} / $sumy{$1}; + $p *= 1000; #wartosc w promilach + + if ($p <= $MIN_PROB) { + next; + } + + #if ($p == 1000) { + # $p--; + #} + + $p = 1000 - $p; #odwrotnosc +# $rev = reverse($1); + # opakowujemy znak '-' znakami [] ;) + $opis = $2; + $opis =~ s/-/\[-\]/; + + printf "%s~%.0f;%s\n", $1, $p, $opis; + } + + $n++; + +} diff --git a/nawszelkiwypadek/tools/lem_dic/makeLabels.pl b/nawszelkiwypadek/tools/lem_dic/makeLabels.pl new file mode 100755 index 0000000..e25b5da --- /dev/null +++ b/nawszelkiwypadek/tools/lem_dic/makeLabels.pl @@ -0,0 +1,11 @@ +#!/usr/bin/perl + +use locale; + +print "lcase a ą b c ć d e ę f g h i j k l ł m n ń o ó p q r s ś t u v w x y z ź ż é ö ü ä\n"; +print "ucase A Ą B C Ć D E Ę F G H I J K L Ł M N Ń O Ó P Q R S Ś T U V W X Y Z Ź Ż\n"; +print "letter lcase ucase\n"; +print "digit 0 1 2 3 4 5 6 7 8 9\n"; +print "signs , . @ \/ \'\n"; +print "sem ~ ; _ - + ? \\ \n"; +print "all letter digit signs sem\n"; diff --git a/nawszelkiwypadek/tools/lem_dic/prep.pl b/nawszelkiwypadek/tools/lem_dic/prep.pl new file mode 100755 index 0000000..915d213 --- /dev/null +++ b/nawszelkiwypadek/tools/lem_dic/prep.pl @@ -0,0 +1,75 @@ +#! /usr/bin/perl + +use locale; +use strict; + +my $file = shift; +my $filename; + +if ($file eq "") { + print "Podaj nazwę pliku.\n"; + exit(1); +} + +if ($file =~ /(.*)\.dic/) +{ + $filename = $1; +} +else +{ + print "The input file must have .dic extension."; + exit(1); +} + +`makeLabels.pl > labels.sym`; + +`lexmakelab labels`; + +print "Kanonizuję opisy........................................."; + +#`canon.pl <$file >temp2`; + +print "Kompiluję automat........................................"; + +`lexcomplex -l labels.lab -S labels.scl <$file > temp1`; + +print "OK\n"; + +print "Usuwam epsilon-przejscia................................."; + +`fsmrmepsilon temp1> temp2`; + +print "OK\n"; + +print "Determinizuję automat...................................."; + +`fsmdeterminize temp2 > temp1`; + +print "OK\n"; + +print "Minimalizuję automat....................................."; + +`fsmminimize temp1> temp2`; + +print "OK\n"; + +print "Konwertuję automat do formatu fsa........................"; + +`fsmprint -i labels.lab temp2> temp1`; + +`cp temp1 pofsmprint`; + +`../fsm2aut temp1> temp2`; + +`./aut2fsa.nowy < temp2> $filename.bin`; + +print "OK\n"; + +print "Czyszczę pliki pomocnicze................................"; + +`rm temp2`; +`rm temp1`; +#`rm labels.*`; + +print "OK\n"; + diff --git a/www/copyright.html b/www/copyright.html new file mode 100644 index 0000000..960bd58 --- /dev/null +++ b/www/copyright.html @@ -0,0 +1,34 @@ + + +UAM Text Tools + + +

UAM Text Tools

+ + +

UTT components

+
    +
  • tok - tokenizer +
  • lem - lemmatizer +
  • gue - guesser +
  • cor - corrector +
  • ser - searcher +
  • grp - grepper +
  • con - concordancer +
  • dgp - dependency graph parser +
  • kot - rezinekot +
+ +

Download

+
    +
  • Software +
  • Polish dictionary data (PMDB tagset) +
  • Portuguese dictionary data (INTEX tagset) +
+ + + +Authors: Tomasz Obrębski, Michał Stolarski, Justyna Walkowska + + + diff --git a/www/downloads.html b/www/downloads.html new file mode 100644 index 0000000..960bd58 --- /dev/null +++ b/www/downloads.html @@ -0,0 +1,34 @@ + + +UAM Text Tools + + +

UAM Text Tools

+ + +

UTT components

+
    +
  • tok - tokenizer +
  • lem - lemmatizer +
  • gue - guesser +
  • cor - corrector +
  • ser - searcher +
  • grp - grepper +
  • con - concordancer +
  • dgp - dependency graph parser +
  • kot - rezinekot +
+ +

Download

+
    +
  • Software +
  • Polish dictionary data (PMDB tagset) +
  • Portuguese dictionary data (INTEX tagset) +
+ + + +Authors: Tomasz Obrębski, Michał Stolarski, Justyna Walkowska + + + diff --git a/www/index.html b/www/index.html new file mode 100644 index 0000000..960bd58 --- /dev/null +++ b/www/index.html @@ -0,0 +1,34 @@ + + +UAM Text Tools + + +

UAM Text Tools

+ + +

UTT components

+
    +
  • tok - tokenizer +
  • lem - lemmatizer +
  • gue - guesser +
  • cor - corrector +
  • ser - searcher +
  • grp - grepper +
  • con - concordancer +
  • dgp - dependency graph parser +
  • kot - rezinekot +
+ +

Download

+
    +
  • Software +
  • Polish dictionary data (PMDB tagset) +
  • Portuguese dictionary data (INTEX tagset) +
+ + + +Authors: Tomasz Obrębski, Michał Stolarski, Justyna Walkowska + + + diff --git a/www/utt.html b/www/utt.html new file mode 100644 index 0000000..960bd58 --- /dev/null +++ b/www/utt.html @@ -0,0 +1,34 @@ + + +UAM Text Tools + + +

UAM Text Tools

+ + +

UTT components

+
    +
  • tok - tokenizer +
  • lem - lemmatizer +
  • gue - guesser +
  • cor - corrector +
  • ser - searcher +
  • grp - grepper +
  • con - concordancer +
  • dgp - dependency graph parser +
  • kot - rezinekot +
+ +

Download

+
    +
  • Software +
  • Polish dictionary data (PMDB tagset) +
  • Portuguese dictionary data (INTEX tagset) +
+ + + +Authors: Tomasz Obrębski, Michał Stolarski, Justyna Walkowska + + +