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 0000000..8a5a9f0 Binary files /dev/null and b/nawszelkiwypadek/tools/aut2fsa differ diff --git a/nawszelkiwypadek/tools/cor_dic/makeLabels.pl b/nawszelkiwypadek/tools/cor_dic/makeLabels.pl new file mode 100755 index 0000000..de60a2d --- /dev/null +++ b/nawszelkiwypadek/tools/cor_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/cor_dic/prep.pl b/nawszelkiwypadek/tools/cor_dic/prep.pl new file mode 100755 index 0000000..f6d48ef --- /dev/null +++ b/nawszelkiwypadek/tools/cor_dic/prep.pl @@ -0,0 +1,67 @@ +#! /usr/bin/perl + +use locale; +use strict; + +my $file = shift; + +if ($file eq "") { + print "Podaj nazwę pliku.\n"; + exit(0); +} + + +`makeLabels.pl > 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 + + +