Text-German-0.06/0002755000060600006060000000000010223741416013346 5ustar upfipse00000000000000Text-German-0.06/lib/0002755000060600006060000000000010223741416014114 5ustar upfipse00000000000000Text-German-0.06/lib/Text/0002755000060600006060000000000010223741416015040 5ustar upfipse00000000000000Text-German-0.06/lib/Text/German/0002755000060600006060000000000010223741416016251 5ustar upfipse00000000000000Text-German-0.06/lib/Text/German/Ausnahme.pm0000644000060600006060000000256210223735216020354 0ustar upfipse00000000000000# -*- Mode: Perl -*- # Ausnahme.pm -- # Author : Ulrich Pfeifer # Created On : Thu Feb 1 09:10:48 1996 # Last Modified By: Ulrich Pfeifer # Last Modified On: Sun Apr 3 11:42:38 2005 # Language : Perl # Update Count : 23 # Status : Unknown, Use with caution! package Text::German::Ausnahme; { local ($_); while () { chomp; ($ausnahme, $key) = split; $AUSNAHME{$ausnahme} = $key; } close DATA; } sub reduce { my($v,$s,$e) = @_; $s = $v.$s; while (1) { # algorithmus unklar return $AUSNAHME{$s} if defined $AUSNAHME{$s}; last unless $e; $s .= substr($e,0,1); $e = substr($e,1); } return undef; } 1; __DATA__ Anzeich Anzeichen Charakter Charakter Daten Daten Denken Denken Eltern Eltern Entwicklungsländ Entwicklungsland Frau Frau Gedankengäng Gedankengang Geschichte Geschichte Herausgeb Herausgeber Interess Interesse Italien Italien Jahr Jahr Länd Land Lexika Lexikon Problem Problem Prominentenlexika Prominentenlexikon Räte Rat Rahmen Rahmen Recht Recht Sinn Sinn Ziel Ziel Zigeun Zigeuner Zusammenhäng Zusammenhang ausgestat ausstatten ausstat ausstatten berücksichtig berücksichtigen direkt direkt entgegengesetz entgegensetzen entgegensetz entgegensetzen entwickel entwickeln erkannt erkennen hoh hoch kannt kennen klär klären widerleg widerlegen Text-German-0.06/lib/Text/German/Endung.pm0000644000060600006060000001006010223741164020022 0ustar upfipse00000000000000# -*- Mode: Perl -*- # Endung.pm -- # Author : Ulrich Pfeifer # Created On : Thu Feb 1 09:10:48 1996 # Last Modified By: Ulrich Pfeifer # Last Modified On: Sun Apr 3 12:16:20 2005 # Language : Perl # Update Count : 45 # Status : Unknown, Use with caution! package Text::German::Endung; # require Exporter; # @ISA = qw(Exporter); # @EXPORT = qw(%ENDUNG); use Text::German::Util; { local ($_); while () { chomp; my ($endung, $key) = split; my ($a,$b,$c,$d) = split ':', $key; # $c, $d nicht verwedet? my $B = Text::German::Util::bit_to_int($b); $ENDUNG{$endung} = [$a,$B,$c,$d]; } close DATA; } sub endungen { my $word = shift; my $class = wordclass($word); my @result; for $i (1 .. length($word)) { my $endung = substr($word, length($word)-$i,$i); if (defined $ENDUNG{$endung} && defined $ENDUNG{$endung}->[1] and ($ENDUNG{$endung}->[1] & $class)) { push @result, $endung; } } @result; } sub max_endung { my $word = shift; my $class = wordclass($word); my $result = undef; for $i (1 .. length($word)) { my $endung = substr($word, length($word)-$i,$i); if (defined $ENDUNG{$endung} and ($ENDUNG{$endung}->[1] & $class)) { $result = $endung if !defined($result) || length($endung) > length($result); } } $result; } sub wort_klasse { my $endung = shift; $ENDUNG{$endung}->[1]; } sub regel { my $endung = shift; $ENDUNG{$endung}->[0]; } 1; # regel # wortklassen # nachfolgeregel __DATA__ e 001:11100:000:000 em 004:00100:000:000 en 002:11101:000:010 end 003:00010:000:011 ende 037:00010:001:047 endem 039:00010:004:049 enden 038:00010:002:048 ender 040:00010:005:050 endere 057:00010:092:067 enderem 059:00010:094:069 enderen 058:00010:093:068 enderer 060:00010:095:070 enderes 061:00010:096:071 endes 041:00010:007:051 endste 077:00010:102:087 endstem 079:00010:104:089 endsten 078:00010:103:088 endster 080:00010:105:090 endstes 081:00010:106:091 ene 032:00001:001:001 enem 034:00001:004:004 enen 033:00001:002:002 ener 035:00001:005:005 enere 052:00001:092:092 enerem 054:00001:094:094 eneren 053:00001:093:093 enerer 055:00001:095:095 eneres 056:00001:096:096 enes 036:00001:007:007 enste 072:00001:102:102 enstem 074:00001:104:104 ensten 073:00001:103:103 enster 075:00001:105:105 enstes 076:00001:106:106 er 005:10100:000:000 ere 092:00100:001:001 erem 094:00100:004:004 eren 093:00100:002:002 erer 095:00100:005:005 eres 096:00100:007:007 ern 006:10000:000:010 es 007:10100:000:012 est 008:00100:000:013 este 097:00100:001:102 estem 099:00100:004:104 esten 098:00100:002:103 ester 100:00100:005:105 estes 101:00100:007:106 et 009:00001:000:014 ete 042:00001:001:017 etem 044:00001:004:019 eten 043:00001:002:018 eter 045:00001:005:020 etere 062:00001:092:022 eterem 064:00001:094:024 eteren 063:00001:093:023 eterer 065:00001:095:025 eteres 066:00001:096:026 etes 046:00001:007:021 etste 082:00001:102:102 etstem 084:00001:104:104 etsten 083:00001:103:103 etster 085:00001:105:105 etstes 086:00001:106:106 n 010:11000:000:000 nd 011:00010:000:000 nde 047:00010:001:001 ndem 049:00010:004:004 nden 048:00010:002:002 nder 050:00010:005:005 ndere 067:00010:092:092 nderem 069:00010:094:094 nderen 068:00010:093:093 nderer 070:00010:095:095 nderes 071:00010:096:096 ndes 051:00010:007:007 ndste 087:00010:102:102 ndstem 089:00010:104:104 ndsten 088:00010:103:103 ndster 090:00010:105:105 ndstes 091:00010:106:106 s 012:10000:000:000 st 013:01000:000:014 ste 102:00100:001:017 stem 104:00100:004:019 sten 103:00100:002:018 ster 105:00100:005:020 stes 106:00100:007:021 t 014:01001:000:000 te 017:01001:001:001 tem 019:00001:004:004 ten 018:01001:002:002 ter 020:00001:005:005 tere 022:00001:092:092 terem 024:00001:094:094 teren 023:00001:093:093 terer 025:00001:095:095 teres 026:00001:096:096 tes 021:00001:007:007 test 015:01000:000:008 teste 027:00001:097:097 testem 029:00001:099:099 testen 028:00001:098:098 tester 030:00001:100:100 testes 031:00001:101:101 tet 016:01000:000:009 Text-German-0.06/lib/Text/German/Regel.pm0000644000060600006060000004445310223740547017661 0ustar upfipse00000000000000# -*- Mode: Perl -*- # Regel.pm -- # Author : Ulrich Pfeifer # Created On : Thu Feb 1 09:10:48 1996 # Last Modified By: Ulrich Pfeifer # Last Modified On: Sun Apr 3 12:11:51 2005 # Language : Perl # Update Count : 73 # Status : Unknown, Use with caution! package Text::German::Regel; use Text::German::Util; $debug = 0; @REGEL = (); # -w { local ($_); while () { chomp; my ($regel, $a,$b,$c,$d,$e,@f) = split(/:/, $_); next unless $regel; push(@{$REGEL[$regel]}, [$a, $b, $c, bit_to_int($d), bit_to_int($e), @f]); } close DATA; } sub reduce { my($v,$s,$e) = @_; #my $init = join ':', ($v,$s,$e); #local ($debug) = ($s eq 'Mit')?4:0; return undef if length($s.$e) < 3; while (length($s)<3) { $s .= substr($e,0,1); $e = substr($e,1); } while (1) { my @tmp = reduce1($v,$s,$e); if ($#tmp) { my $tmp = join ':', @tmp; #print STDERR "$init => $tmp\n"; return @tmp; # if $tmp ne $init; } return @tmp if !$e; $s .= substr($e,0,1); $e = substr($e,1); } } sub reduce1 { my($v,$s,$e) = @_; my $fc; my $fr; my $did_match; while (1) { $fr = Text::German::Endung::regel($e); # || '001'; # ??? last if defined $fr; last unless $e; $s .= substr($e,0,1); $e = substr($e,1); } return undef unless $fr; $fc = Text::German::Endung::wort_klasse($e); ruleset: while (defined $REGEL[$fr]) { for $r (@{$REGEL[$fr]}) { next unless $r->[4] | $fc; # allowed wordclasses my $match = $r->[5]; $match =~ s/\+/[bcdfghjklmnpqrstvwxyz]/; $match =~ s/\%/[aeiou\344\366\374]/; #my $ns = $s.$e; #$ns = substr($ns,0,length($ns)-$r->[1]); #$e = substr($e, length($e)-$r->[1]); print "\tREGEL: $fr:", (join ':', @{$r}),"\t($s,$match)\n" if $debug > 1; if ($s =~ /$match$/) { $did_match++; print "\tREGEL: $fr:", (join ':', @{$r}),"\t$s => " if $debug; $s = (substr($s,0,length($s)-$r->[7])) if $r->[7]; $s .= $r->[8] if $r->[8]; print "$s\n" if $debug; if ($r->[6]) { # vorsilbe 'ge' kann entfallen? $v =~ s/^ge//; } $fr = $r->[0]; $fc = $r->[3]; # ??? if ($fr ne '000') { next ruleset; } else { #$s = substr($s,0,length($s)-$r->[1]); last; } } } last; } if ($did_match) { return ($v,$s,$e); } else { return undef; } } 1; # regel # 0 Folgeregel # 1 # zeichen entfernen # 2 # 3 new wc # 4 KLASSE fuer match # 5 MATCH # 6 vorsilbe ge # 7 #chars to remove # 8 string to append # 017:000:2:te:01001:01001:önn:1:3:ann __DATA__ 001:000:1:e:11100:00100:isch:0:0: 001:000:1:e:11100:10100:icht:0:0: 001:000:1:e:11100:10100:sch:0:0: 001:000:1:e:11100:00100:haft:0:0: 001:000:1:e:11100:00100:lich:0:0: 001:000:1:e:11100:00100:voll:0:0: 001:000:1:e:11100:10100:wert:0:0: 001:000:1:e:11100:10000:bold:0:0: 001:000:1:e:11100:10000:ling:0:0: 001:000:1:e:11100:10000:rich:0:0: 001:000:1:e:11100:10000:werk:0:0: 001:000:1:e:11100:00100:reich:0:0: 001:000:1:e:11100:10100:ond:0:0:e 001:000:1:e:11100:10000:iss:0:1: 001:000:1:e:11100:00100:abl:0:2:bel 001:000:1:e:11100:00100:ant:0:0: 001:000:1:e:11100:00100:ell:0:0: 001:000:1:e:11100:00100:ent:0:0: 001:000:1:e:11100:00100:esk:0:0: 001:000:1:e:11100:00100:ibl:0:2:bel 001:000:1:e:11100:10100:ff:0:0: 001:000:1:e:11100:00100:los:0:0: 001:000:1:e:11100:00100:sam:0:0: 001:000:1:e:11100:10100:sal:0:0: 001:000:1:e:11100:01000:ifizier:0:0:en 001:000:1:e:11100:01000:isier:0:0:en 001:000:1:e:11100:10100:weis:0:0:e 001:000:1:e:11100:10000:zeug:0:0: 001:000:1:e:11100:10100:är:0:0: 001:000:1:e:11100:10100:oid:0:0: 001:000:1:e:11100:00100:ös:0:0: 001:000:1:e:11100:10000:äl:0:3:al 001:000:1:e:11100:10000:eur:0:0: 001:000:1:e:11100:10000:ier:0:0: 001:000:1:e:11100:10100:ad:0:0:e 001:000:1:e:11100:10100:od:0:0:e 001:000:1:e:11100:10100:ud:0:0:e 001:000:1:e:11100:10100:ed:0:0: 001:000:1:e:11100:10100:id:0:0: 001:000:1:e:11100:10100:ig:0:0: 001:000:1:e:11100:10100:al:0:0: 001:000:1:e:11100:10100:er:0:0: 001:000:1:e:11100:00100:ig:0:0: 001:000:1:e:11100:00100:iv:0:0: 001:000:1:e:11100:00100:os:0:0: 001:000:1:e:11100:10000:an:0:0: 001:000:1:e:11100:10100:ar:0:0: 001:000:1:e:11100:10000:at:0:0: 001:000:1:e:11100:10100:%b:0:0:e 001:000:1:e:11100:10100:c:0:0:e 001:000:1:e:11100:10000:äng:0:3:ang 001:000:1:e:11100:10100:g:0:0:e 001:000:1:e:11100:10100:f:0:0:e 001:000:1:e:11100:00100:frei:0:0: 001:000:1:e:11100:10100:i:0:0:e 001:000:1:e:11100:10000:ys:0:0:e 001:000:1:e:11100:10000:ständ:0:3:and 001:000:1:e:11100:10000::0:0:e 002:010:2:en:11101:00100:isch:0:0: 002:010:2:en:11101:10100:icht:0:0: 002:010:2:en:11101:10100:schaft:0:0: 002:010:2:en:11101:00100:haft:0:0: 002:010:2:en:11101:00100:lich:0:0: 002:010:2:en:11101:00100:voll:0:0: 002:010:2:en:11101:10100:wert:0:0: 002:010:2:en:11101:10000:bold:0:0: 002:010:2:en:11101:10000:ling:0:0: 002:010:2:en:11101:10000:niss:0:1: 002:010:2:en:11101:10000:rich:0:0: 002:010:2:en:11101:10000:werk:0:0: 002:010:2:en:11101:00100:reich:0:0: 002:010:2:en:11101:10000:ism:0:0:us 002:010:2:en:11101:00100:abl:0:2:bel 002:010:2:en:11101:10100:ant:0:0: 002:010:2:en:11101:00100:ell:0:0: 002:010:2:en:11101:00100:ent:0:0: 002:010:2:en:11101:00100:esk:0:0: 002:010:2:en:11101:00100:ibl:0:2:bel 002:010:2:en:11101:10000:anz:0:0: 002:010:2:en:11101:10000:enz:0:0: 002:010:2:en:11101:10000:inn:0:1: 002:010:2:en:11101:10000:ist:0:0: 002:010:2:en:11101:10000:ung:0:0: 002:010:2:en:11101:10100:amm:0:0: 002:010:2:en:11101:10100:rn:0:0: 002:010:2:en:11101:10100:mp:0:0:e 002:010:2:en:11101:10100:tr:0:0:um 002:010:2:en:11101:10100:los:0:0: 002:010:2:en:11101:00100:sam:0:0: 002:010:2:en:11101:10100:sal:0:0: 002:010:2:en:11101:10000:hem:0:0:a 002:010:2:en:11101:01000:ifizier:0:0:en 002:010:2:en:11101:01000:isier:0:0:en 002:010:2:en:11101:10000:ität:0:0: 002:010:2:en:11101:10000:heit:0:0: 002:010:2:en:11101:10000:keit:0:0: 002:010:2:en:11101:10000:zeug:0:0: 002:010:2:en:11101:10100:oid:0:0: 002:010:2:en:11101:00100:ös:0:0: 002:010:2:en:11101:10100:är:0:0: 002:010:2:en:11101:10000:äl:0:3:al 002:010:2:en:11101:10100:eur:0:0: 002:010:2:en:11101:10100:eus:0:0:e 002:010:2:en:11101:10000:ier:0:0: 002:010:2:en:11101:01000:ier:0:0:en 002:010:2:en:11101:10000:ion:0:0: 002:010:2:en:11101:11100:eid:0:0:en 002:010:2:en:11101:11100:iem:0:0:en 002:010:2:en:11101:10100:al:0:0: 002:010:2:en:11101:10100:er:0:0: 002:010:2:en:11101:00100:ig:0:0: 002:010:2:en:11101:00100:iv:0:0: 002:010:2:en:11101:00100:os:0:0: 002:010:2:en:11101:10100:ad:0:0:e 002:010:2:en:11101:10100:an:0:0: 002:010:2:en:11101:10100:ar:0:0: 002:010:2:en:11101:10100:at:0:0: 002:010:2:en:11101:10000:ik:0:0: 002:010:2:en:11101:10000:or:0:0: 002:010:2:en:11101:10100:id:0:0: 002:010:2:en:11101:10100:od:0:0:e 002:010:2:en:11101:10100:ud:0:0:e 002:010:2:en:11101:10100:em:0:0: 002:010:2:en:11101:10100:op:0:0: 002:010:2:en:11101:10100:ur:0:0: 002:010:2:en:11101:10000:radi:0:0:us 002:010:2:en:11101:10000:di:0:0:um 002:010:2:en:11101:00100:frei:0:0: 002:010:2:en:11101:10000:ei:0:0: 002:010:2:en:11101:10100:i:0:0:e 002:010:2:en:11101:10100:e:0:0:e 002:010:2:en:11101:10000:ys:0:0:e 002:010:2:en:11101:10000:wes:0:0:en 002:010:2:en:11101:10000:Wes:0:0:en 002:010:2:en:11101:10000:orm:0:0: 002:010:2:en:11101:10000:äng:0:3:ang 003:011:3:end:00010:00010::0:0:en 004:000:2:em:00100:00100:isch:0:0: 004:000:2:em:00100:00100:haft:0:0: 004:000:2:em:00100:00100:lich:0:0: 004:000:2:em:00100:00100:voll:0:0: 004:000:2:em:00100:00100:wert:0:0: 004:000:2:em:00100:00100:reich:0:0: 004:000:2:em:00100:00100:abl:0:2:bel 004:000:2:em:00100:00100:ant:0:0: 004:000:2:em:00100:00100:ell:0:0: 004:000:2:em:00100:00100:ent:0:0: 004:000:2:em:00100:00100:esk:0:0: 004:000:2:em:00100:00100:ibl:0:2:bel 004:000:2:em:00100:00100:los:0:0: 004:000:2:em:00100:00100:sam:0:0: 004:000:2:em:00100:00100:är:0:0: 004:000:2:em:00100:00100:oid:0:0: 004:000:2:em:00100:00100:ös:0:0: 004:000:2:em:00100:00100:al:0:0: 004:000:2:em:00100:00100:ar:0:0: 004:000:2:em:00100:00100:er:0:0: 004:000:2:em:00100:00100:ig:0:0: 004:000:2:em:00100:00100:iv:0:0: 004:000:2:em:00100:00100:os:0:0: 004:000:2:em:00100:00100:frei:0:0: 005:000:2:er:10100:00100:isch:0:0: 005:000:2:er:10100:00100:haft:0:0: 005:000:2:er:10100:00100:lich:0:0: 005:000:2:er:10100:00100:voll:0:0: 005:000:2:er:10100:00100:wert:0:0: 005:000:2:er:10100:00100:reich:0:0: 005:000:2:er:10100:00100:abl:0:2:bel 005:000:2:er:10100:00100:ant:0:0: 005:000:2:er:10100:00100:ell:0:0: 005:000:2:er:10100:00100:ent:0:0: 005:000:2:er:10100:00100:esk:0:0: 005:000:2:er:10100:00100:ibl:0:2:bel 005:000:2:er:10100:00100:los:0:0: 005:000:2:er:10100:00100:sam:0:0: 005:000:2:er:10100:00100:är:0:0: 005:000:2:er:10100:00100:oid:0:0: 005:000:2:er:10100:00100:ös:0:0: 005:000:2:er:10100:00100:al:0:0: 005:000:2:er:10100:00100:ar:0:0: 005:000:2:er:10100:00100:ig:0:0: 005:000:2:er:10100:00100:iv:0:0: 005:000:2:er:00100:00100:os:0:0: 005:000:2:er:00100:00100:frei:0:0: 005:000:2:er:00100:10000:ust:0:0:er 006:010:3:ern:10000:10000::0:0: 007:012:2:es:10100:10100:niss:0:1: 007:012:2:es:10100:10100:abl:0:2:bel 007:012:2:es:10100:10100:ibl:0:2:bel 007:012:2:es:10100:10100:cod:0:0:es 007:012:2:es:10100:10100:mod:0:0:es 007:012:2:es:10100:10100:iz:0:2:ex 007:012:2:es:10100:10100:ei:0:0: 007:012:2:es:10100:10100:i:0:0:es 007:012:2:es:10100:10100::0:0: 008:013:3:est:00100:00100:cht:0:0:en 008:013:3:est:00100:00100:haft:0:0: 008:013:3:est:00100:00100:wert:0:0: 008:013:3:est:00100:00100:ant:0:0: 008:013:3:est:00100:00100:ent:0:0: 008:013:3:est:00100:00100:los:0:0: 008:013:3:est:00100:00100:oid:0:0: 008:013:3:est:00100:00100:ös:0:0: 008:013:3:est:00100:00100:os:0:0: 008:013:3:est:00100:00100:n:0:0:en 008:013:3:est:00100:00100:frei:0:0: 009:014:2:et:00001:00001:cht:1:0:en 009:014:2:et:00001:00001:magn:0:0:et 009:014:2:et:00001:00001:n:1:0:en 009:014:2:et:00001:00001:eit:1:0:en 010:000:1:n:11000:10000:enser:0:0: 010:000:1:n:11000:10000:aner:0:0: 010:000:1:n:11000:10000:iker:0:0: 010:000:1:n:11000:10000:iner:0:0: 010:000:1:n:11000:10000:ler:0:0: 010:000:1:n:11000:10000:ner:0:0: 010:000:1:n:11000:10000:el:0:0: 010:000:1:n:11000:10000:er:0:0: 010:000:1:n:11000:01000:el:0:0:n 010:000:1:n:11000:01000:er:0:0:n 010:000:1:n:11000:10000:io:0:0:n 010:000:1:n:11000:10000::0:0: 011:000:2:nd:00010:00010::0:0:nd 012:000:1:s:10000:10000:wach:0:0:s 012:000:1:s:10000:10000:llap:0:0:s 012:000:1:s:10000:10000:pul:0:0:s 012:000:1:s:10000:10000:seit:0:0:s 012:000:1:s:10000:10000:s:0:0:s 012:000:1:s:10000:10000:gla:0:0:s 012:000:1:s:10000:10000:ga:0:0:s 012:000:1:s:10000:10000:lo:0:0:s 012:000:1:s:10000:10000:ö:0:0:s 012:000:1:s:10000:10000:au:0:0: 012:000:1:s:10000:10000:i:0:0:s 012:000:1:s:10000:10000:u:0:0:s 012:000:1:s:10000:10000::0:0: 013:014:2:st:01000:01000:isch:0:0: 013:014:2:st:01000:01000:lich:0:0: 013:014:2:st:01000:01000:voll:0:0: 013:014:2:st:01000:01000:reich:0:0: 013:014:2:st:01000:01000:ell:0:0: 013:014:2:st:01000:01000:esk:0:0: 013:014:2:st:01000:01000:abel:0:0: 013:014:2:st:01000:01000:ibel:0:0: 013:014:2:st:01000:01000:sam:0:0: 013:014:2:st:01000:01000:är:0:0: 013:014:2:st:01000:01000:ier:0:0:en 013:014:2:st:01000:01000:al:0:0: 013:014:2:st:01000:01000:er:0:0: 013:014:2:st:01000:01000:ig:0:0: 013:014:2:st:01000:01000:iv:0:0: 013:014:2:st:01000:01000:el:0:0:en 013:014:2:st:01000:01000:er:0:0:en 014:000:1:t:01001:01001:haf:0:0:t 014:000:1:t:01001:01001:wer:0:0:t 014:000:1:t:01001:01001:ier:1:0:en 014:000:1:t:01001:01001:en:0:0:t 014:000:1:t:01001:01001:an:0:0:t 014:000:1:t:01001:01001:er:1:0:n 014:000:1:t:01001:01001:el:1:0:n 014:000:1:t:01001:01001:ig:1:0:en 014:000:1:t:01001:01001:t:0:0:t 014:000:1:t:01001:01001:%:0:0:t 014:000:1:t:01001:01001::1:0:en 015:008:4:test:01000:01000:ier:0:0:en 015:008:4:test:01000:01000:er:0:0:n 015:008:4:test:01000:01000:el:0:0:n 015:008:4:test:01000:01000:ig:0:0:en 015:008:4:test:01000:01000:s:0:0:en 015:008:4:test:01000:01000:+me:0:0:n 015:008:4:test:01000:01000:+ne:0:0:n 015:008:4:test:01000:01000:te:0:0:n 015:008:4:test:01000:01000:de:0:0:n 016:009:3:tet:01000:01000:ier:0:0:en 016:009:3:tet:01000:01000:er:0:0:n 016:009:3:tet:01000:01000:el:0:0:n 016:009:3:tet:01000:01000:ig:0:0:en 016:009:3:tet:01000:01000:s:0:0:en 016:009:3:tet:01000:01000:+me:0:0:n 016:009:3:tet:01000:01000:+ne:0:0:n 016:009:3:tet:01000:01000:te:0:0:n 016:009:3:tet:01000:01000:de:0:0:n 017:001:2:te:01001:01001:ier:1:0:en 017:001:2:te:01001:01001:er:1:0:n 017:001:2:te:01001:01001:el:1:0:n 017:001:2:te:01001:01001:ig:1:0:en 018:002:3:ten:01001:01001:ier:1:0:en 018:002:3:ten:01001:01001:%er:1:0:en 018:002:3:ten:01001:01001:er:1:0:n 018:002:3:ten:01001:01001:el:1:0:n 018:002:3:ten:01001:01001:%g:1:0:en 018:002:3:ten:01001:01001:ei:0:0:ten 018:002:3:ten:01001:01001:i:1:0:t 019:004:3:tem:00001:00001:wer:0:0:t 019:004:3:tem:00001:00001:haf:0:0:t 019:004:3:tem:00001:00001:en:0:0:t 019:004:3:tem:00001:00001:an:0:0:t 019:004:3:tem:00001:00001::1:0:en 020:005:3:ter:00001:00001::1:0:en 021:007:3:tes:00001:00001::1:0:en 022:092:4:tere:00001:00001::1:0:en 023:093:5:teren:00001:00001::1:0:en 024:094:5:terem:00001:00001::1:0:en 025:095:5:terer:00001:00001::1:0:en 026:096:5:teres:00001:00001::1:0:en 027:097:5:teste:00001:00001::1:0:en 028:098:6:testen:00001:00001::1:0:en 029:099:6:testem:00001:00001::1:0:en 030:100:6:tester:00001:00001::1:0:en 031:101:6:testes:00001:00001::1:0:en 032:001:3:ene:00001: : : : : 033:002:4:enen:00001: : : : : 034:004:4:enem:00001: : : : : 035:005:4:ener:00001: : : : : 036:007:4:enes:00001: : : : : 037:047:4:ende:00010:00010::0:0:end 038:048:5:enden:00010:00010::0:0:end 039:049:5:endem:00010:00010::0:0:end 040:050:5:ender:00010:00010::0:0:end 041:051:5:endes:00010:00010::0:0:en 042:017:3:ete:00001:00001:+m:1:0:en 042:017:3:ete:00001:00001:+n:1:0:en 042:017:3:ete:00001:00001:t:1:0:en 042:017:3:ete:00001:00001:d:1:0:en 043:018:4:eten:00001:00001:+m:1:0:en 043:018:4:eten:00001:00001:+n:1:0:en 043:018:4:eten:00001:00001:t:1:0:en 043:018:4:eten:00001:00001:d:1:0:en 043:018:4:eten:00001:00001:a:0:0:et 043:018:4:eten:00001:00001:i:0:0:eten 044:019:4:etem:00001:00001:+m:1:0:en 044:019:4:etem:00001:00001:+n:1:0:en 044:019:4:etem:00001:00001:t:1:0:en 044:019:4:etem:00001:00001:d:1:0:en 045:020:4:eter:00001:00001:+m:1:0:en 045:020:4:eter:00001:00001:+n:1:0:en 045:020:4:eter:00001:00001:t:1:0:en 045:020:4:eter:00001:00001:d:1:0:en 046:021:4:etes:00001:00001:+m:1:0:en 046:021:4:etes:00001:00001:+n:1:0:en 046:021:4:etes:00001:00001:t:1:0:en 046:021:4:etes:00001:00001:d:1:0:en 047:001:3:nde:00010:00010:r:0:0:nd 047:001:3:nde:00010:00010:l:0:0:nd 048:002:4:nden:00010:00010:r:0:0:nd 048:002:4:nden:00010:00010:l:0:0:nd 049:004:4:ndem:00010:00010:r:0:0:nd 049:004:4:ndem:00010:00010:l:0:0:nd 050:005:4:nder:00010:00010:r:0:0:nd 050:005:4:nder:00010:00010:l:0:0:nd 051:007:4:ndes:00010:00010:r:0:0:nd 051:007:4:ndes:00010:00010:l:0:0:nd 052:092:5:enere:00001: : : : : 053:093:6:eneren:00001: : : : : 054:094:6:enerem:00001: : : : : 055:095:6:enerer:00001: : : : : 056:096:6:eneres:00001: : : : : 057:067:6:endere:00010:00010::0:0:end 058:068:7:enderen:00010:00010::0:0:end 059:069:7:enderem:00010:00010::0:0:end 060:070:7:enderer:00010:00010::0:0:end 061:071:7:enderes:00010:00010::0:0:end 062:022:5:etere:00001:00001:+m:1:0:en 062:022:5:etere:00001:00001:+n:1:0:en 062:022:5:etere:00001:00001:t:1:0:en 062:022:5:etere:00001:00001:d:1:0:en 063:023:6:eteren:00001:00001:+m:1:0:en 063:023:6:eteren:00001:00001:+n:1:0:en 063:023:6:eteren:00001:00001:t:1:0:en 063:023:6:eteren:00001:00001:d:1:0:en 064:024:6:eterem:00001:00001:+m:1:0:en 064:024:6:eterem:00001:00001:+n:1:0:en 064:024:6:eterem:00001:00001:t:1:0:en 064:024:6:eterem:00001:00001:d:1:0:en 065:025:6:eterer:00001:00001:+m:1:0:en 065:025:6:eterer:00001:00001:+n:1:0:en 065:025:6:eterer:00001:00001:t:1:0:en 065:025:6:eterer:00001:00001:d:1:0:en 066:026:6:eteres:00001:00001:+m:1:0:en 066:026:6:eteres:00001:00001:+n:1:0:en 066:026:6:eteres:00001:00001:t:1:0:en 066:026:6:eteres:00001:00001:d:1:0:en 067:092:5:ndere:00010:00010:r:0:0:nd 067:092:5:ndere:00010:00010:l:0:0:nd 068:093:6:nderen:00010:00010:r:0:0:nd 068:093:6:nderen:00010:00010:l:0:0:nd 069:094:6:nderem:00010:00010:r:0:0:nd 069:094:6:nderem:00010:00010:l:0:0:nd 070:095:6:nderer:00010:00010:r:0:0:nd 070:095:6:nderer:00010:00010:l:0:0:nd 071:096:6:nderes:00010:00010:r:0:0:nd 071:096:6:nderes:00010:00010:l:0:0:nd 072:102:5:enste:00001: : : : : 073:103:6:ensten:00001: : : : : 074:104:6:enstem:00001: : : : : 075:105:6:enster:00001: : : : : 076:106:6:enstes:00001: : : : : 077:087:6:endste:00010:00010::0:0:end 078:088:7:endsten:00010:00010::0:0:end 079:079:7:endstem:00010:00010::0:0:end 080:090:7:endster:00010:00010::0:0:end 081:091:7:endstes:00010:00010::0:0:end 082:102:5:etste:00001:00001:+m:1:0:en 082:102:5:etste:00001:00001:+n:1:0:en 082:102:5:etste:00001:00001:t:1:0:en 082:102:5:etste:00001:00001:d:1:0:en 083:103:6:etsten:00001:00001:+m:1:0:en 083:103:6:etsten:00001:00001:+n:1:0:en 083:103:6:etsten:00001:00001:t:1:0:en 083:103:6:etsten:00001:00001:d:1:0:en 084:104:6:etstem:00001:00001:+m:1:0:en 084:104:6:etstem:00001:00001:+n:1:0:en 084:104:6:etstem:00001:00001:t:1:0:en 084:104:6:etstem:00001:00001:d:1:0:en 085:105:6:etster:00001:00001:+m:1:0:en 085:105:6:etster:00001:00001:+n:1:0:en 085:105:6:etster:00001:00001:t:1:0:en 085:105:6:etster:00001:00001:d:1:0:en 086:106:6:etstes:00001:00001:+m:1:0:en 086:106:6:etstes:00001:00001:+n:1:0:en 086:106:6:etstes:00001:00001:t:1:0:en 086:106:6:etstes:00001:00001:d:1:0:en 087:102:5:ndste:00010:00010:r:0:0:nd 087:102:5:ndste:00010:00010:l:0:0:nd 088:103:6:ndsten:00010:00010:r:0:0:nd 088:103:6:ndsten:00010:00010:l:0:0:nd 089:104:6:ndstem:00010:00010:r:0:0:nd 089:104:6:ndstem:00010:00010:l:0:0:nd 090:105:6:ndster:00010:00010:r:0:0:nd 090:105:6:ndster:00010:00010:l:0:0:nd 091:106:6:ndstes:00010:00010:r:0:0:nd 091:106:6:ndstes:00010:00010:l:0:0:nd 092:001:3:ere:00100:00100:e:0:0:er 092:001:3:ere:00100:00100::0:0: 093:002:4:eren:00100:00100:i:0:0:eren 093:002:4:eren:00100:00100::0:0: 094:004:4:erem:00100:00100::0:0: 095:005:4:erer:00100:00100::0:0: 096:007:4:eres:00100:00100::0:0: 097:102:4:este:00100:00100::0:0: 098:103:5:esten:00100:00100::0:0: 099:104:5:estem:00100:00100:f:0:0:est 099:104:5:estem:00100:00100::0:0: 100:005:5:ester:00100:00100::0:0: 101:106:5:estes:00100:00100::0:0: 102:017:3:ste:00100:00100::0:0: 103:018:4:sten:00100:00100::0:0: 104:019:4:stem:00100:00100:y:0:0:stem 104:019:4:stem:00100:00100::0:0: 105:020:4:ster:00100:00100::0:0: 106:021:4:stes:00100:00100::0:0: Text-German-0.06/lib/Text/German/Cache.pm0000644000060600006060000000402310223735250017606 0ustar upfipse00000000000000# -*- Mode: Perl -*- # Cache.pm -- # Author : Ulrich Pfeifer # Created On : Mon May 13 11:14:06 1996 # Last Modified By: Ulrich Pfeifer # Last Modified On: Sun Apr 3 11:43:04 2005 # Language : CPerl # Update Count : 17 # Status : Unknown, Use with caution! package Text::German::Cache; sub new { my $type = shift; my $self = {}; my %para = @_; $self->{Function} = $para{Function} || \&Text::German::reduce; $self->{Hold} = $para{Hold} || 100; $self->{Gc} = $para{Gc} || 2 * $self->{Hold}; $self->{Verbose} = $para{Verbose} || 0; $self->{Entries} = 0; $self->{Contents} = {}; $self->{Hit} = {}; $self->{Hits} = 0; $self->{Misses} = 0; bless $self, ref($type) || $type; } sub get { my $self = shift; my $key = shift; if (defined $self->{Contents}->{$key}) { $self->{Hits}++; $self->{Hit}->{$key}++; } else { $self->{Misses}++; $self->{Entries}++; if ($self->{Entries} >= $self->{Gc}) { $self->gc; } $self->{Contents}->{$key} = &{$self->{Function}}($key); } $self->{Contents}->{$key}; } sub gc { my $self = shift; my %rank; my $rank; if ($self->{Verbose}) { printf (STDERR "Cache: enter garbadge collect %d\n", $self->{Entries}); } for (keys %{$self->{Contents}}) { push @{$rank{$self->{Hit}->{$_}}}, $_; } for $rank (sort {$a <=> $b} keys %rank) { for (@{$rank{$rank}}) { if ($self->{Verbose}) { printf (STDERR "Cache: deleting $_(%d)\n", $rank+1); } delete $self->{Contents}->{$_}; delete $self->{Hit}->{$_}; $self->{Entries}--; } # We delete a complete rank. this is more than we must do .. last if $self->{Entries} <= $self->{Hold}; } if ($self->{Verbose}) { printf (STDERR "Cache: leave garbadge collect %d\n", $self->{Entries}); } } sub DESTROY { my $self = shift; if ($self->{Verbose}) { printf (STDERR "\nCache Hits: %d\tMisses: %d\n", $self->{Hits}, $self->{Misses}); } } 1; Text-German-0.06/lib/Text/German/Adjektiv.pm0000644000060600006060000000315210223735176020355 0ustar upfipse00000000000000# -*- Mode: Perl -*- # Adjektiv.pm -- # Author : Ulrich Pfeifer # Created On : Thu Feb 1 09:10:48 1996 # Last Modified By: Ulrich Pfeifer # Last Modified On: Sun Apr 3 11:42:22 2005 # Language : Perl # Update Count : 22 # Status : Unknown, Use with caution! package Text::German::Adjektiv; use Text::German::Util; { local ($_); while () { chomp; ($adjektiv, $key) = split; $ADJEKTIV{$adjektiv} = [split ':', $key]; } close DATA; } sub reduce { my($v,$s,$e) = @_; #return undef unless $v.$s.$e =~ /$UMLAUTR/o; while (1) { # algorithmus unklar if (defined $ADJECTIV{$s}) { return ($v, $ADJECTIV{$s}->[0], $e); } $s .= substr($e,0,1); last unless $e; $e = substr($e,1); } return undef; } 1; __DATA__ ält alt:1 ärg arg:1 ärm arm:1 alt alt:1 arg arg:1 arm arm:1 bäng bang:0 bang bang:0 bläss blaß:0 blaß blaß:0 dümm dumm:1 dumm dumm:1 frömm fromm:0 fromm fromm:0 gesünd gesund:0 gesund gesund:0 glätt glatt:0 glatt glatt:0 größ groß:1 gröb grob:1 groß groß:1 grob grob:1 härt hart:1 höch hoch:1 höh hoch:1 hart hart:1 hoch hoch:1 jüng jung:1 jung jung:1 kält kalt:1 kärg karg:0 kürz kurz:1 kalt kalt:1 karg karg:0 klüg klug:1 klug klug:1 kränk krank:1 krümm krumm:0 krank krank:1 krumm krumm:0 kurz kurz:1 läng lang:1 lang lang:1 näch nah:1 näh nah:1 näss naß:0 naß naß:0 nah nah:1 röt rot:0 rot rot:0 schärf scharf:1 scharf scharf:1 schmäl schmal:0 schmal schmal:0 schwäch schwach:1 schwärz schwarz:1 schwach schwach:1 schwarz schwarz:1 stärk stark:1 stark stark:1 wärm warm:1 warm warm:1 Text-German-0.06/lib/Text/German/Vorsilbe.pm0000644000060600006060000000301510223735412020370 0ustar upfipse00000000000000# -*- Mode: Perl -*- # Vorsilbe.pm -- # Author : Ulrich Pfeifer # Created On : Thu Feb 1 09:10:48 1996 # Last Modified By: Ulrich Pfeifer # Last Modified On: Sun Apr 3 11:44:42 2005 # Language : Perl # Update Count : 23 # Status : Unknown, Use with caution! package Text::German::Vorsilbe; # require Exporter; # @ISA = qw(Exporter); # @EXPORT = qw(%VORSILBE); { local ($_); while () { chomp; ($vorsilbe, $key) = split; $VORSILBE{$vorsilbe} = pack 'b*', $key; } close DATA; } sub vorsilben { my $word = shift; my @result; for $i (1 .. length($word)) { my $vorsilbe = substr($word,0,$i); if (defined $VORSILBE{$vorsilbe}) { push @result, $vorsilbe; } } @result; } sub max_vorsilbe { my $word = shift; my $result = undef; for $i (1 .. length($word)) { my $vorsilbe = substr($word,0,$i); if (defined $VORSILBE{$vorsilbe}) { $result = $vorsilbe if !defined($result) || length($vorsilbe) > length($result); } } $result; } 1; # un ? __DATA__ ab 010 an 010 auf 010 aus 010 be 100 bei 010 da 010 dabei 011 dar 010 darauf 011 drauf 012 durch 110 ein 010 em 100 ent 100 er 100 fest 010 fort 010 frei 010 ge 100 her 010 herauf 011 herum 011 herunter 011 hin 010 hinauf 011 hinzu 011 miss 100 mit 010 nach 010 nahe 010 ob 100 recht 010 ueber 110 um 110 umher 011 unter 110 ver 100 vor 010 voraus 011 vorher 011 weg 010 wider 110 wieder 110 zer 100 zu 010 zugrunde 012 zurueck 012 zusammen 012 Text-German-0.06/lib/Text/German/Util.pm0000644000060600006060000000172110223735354017527 0ustar upfipse00000000000000# -*- Mode: Perl -*- # Util.pm -- # Author : Ulrich Pfeifer # Created On : Thu Feb 1 16:08:41 1996 # Last Modified By: Ulrich Pfeifer # Last Modified On: Sun Apr 3 11:44:12 2005 # Language : Perl # Update Count : 8 # Status : Unknown, Use with caution! package Text::German::Util; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(bit_to_int wordclass $CAPITAL $LOWER $ADJEKTIV $UMLAUTR $VERB $FUNNY $ADJEKTIV $ANY); sub bit_to_int { my $bitvec = shift; unpack('I', pack('b*', $bitvec)."\0\0\0\0"); } $CAPITAL = bit_to_int('10000'); $LOWER = bit_to_int('01111'); $ADJEKTIV = bit_to_int('00100'); $VERB = bit_to_int('01000'); $FUNNY = bit_to_int('01001'); $ANY = bit_to_int('11111'); $UMLAUTR = "[äöü]"; sub wordclass { my ($word, $satz_anfang) = @_; if ($satz_anfang) { return $ANY; } elsif ($word =~ /^[A-ZÄÖÜ]/) { $CAPITAL; } else { $LOWER; } } Text-German-0.06/lib/Text/German/Verb.pm0000644000060600006060000002271310223735374017516 0ustar upfipse00000000000000# -*- Mode: Perl -*- # Verb.pm -- # Author : Ulrich Pfeifer # Created On : Thu Feb 1 09:10:48 1996 # Last Modified By: Ulrich Pfeifer # Last Modified On: Sun Apr 3 11:44:28 2005 # Language : Perl # Update Count : 29 # Status : Unknown, Use with caution! package Text::German::Verb; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(%VERB); { local ($_); while () { chomp; ($verb, $key) = split; $VERB{$verb} = [split ':', $key]; } close DATA; } sub reduce { my($v,$s,$e) = @_; my $ge = ($v.$s =~ /^ge/)?'ge':''; while (1) { # algorithmus unklar #print "reduce: $s\n"; if (defined $VERB{$s}) { if ($VERB{$s}->[1]) { # 'ge' gehoert zum stamm my $vg = $v; $vg =~ s/^ge//; return ($vg, $ge.$VERB{$s}->[0], $e); } else { return ($v, $VERB{$s}->[0], $e); } } last unless $e; $s .= substr($e,0,1); $e = substr($e,1); } return undef; } 1; # stamm ersatz:ge gehoert zum wort # führ fahr:0 __DATA__ äß ess:0 aß ess:0 bäck back:0 bänd bind:0 bär bär:1 bärg berg:0 bät bitt:0 bög bieg:0 böt biet:0 bük back:0 back back:0 band bind:0 bar berst:0 barg berg:0 bat bitt:0 beiß beiß:0 ber berst:0 berg berg:0 berst berst:0 bet bitt:0 biß beiß:0 bieg bieg:0 bier bär:1 biet biet:0 bind bind:0 bir berst:0 birg berg:0 biss beiß:0 bitt bitt:0 blä blas:0 blas blas:0 bleib bleib:0 bleich bleich:0 blich bleich:0 blieb bleib:0 blies blas:0 bog bieg:0 bor berst:0 borg berg:0 bot biet:0 brä brat:0 bräch bring:0 brät brat:0 brach bring:0 brann brenn:0 brat brat:0 brech brech:0 brenn brenn:0 brich brech:0 briet brat:0 bring bring:0 broch brech:0 buk back:0 bund bind:0 däch denk:0 däng ding:0 dünk dünk:0 dürb derb:0 dürf dürf:0 dach denk:0 dang ding:0 darb derb:0 darf dürf:0 deih deih:1 denk denk:0 derb derb:0 deuch dünk:0 dieh deih:1 ding ding:0 dirb derb:0 dorb derb:0 dräng dring:0 dräsch dresch:0 drösch dresch:0 dröss drieß:0 drang dring:0 drasch dresch:0 dresch dresch:0 drieß drieß:0 dring dring:0 drisch dresch:0 droß drieß:0 drosch dresch:0 dross drieß:0 drung dring:0 dung ding:0 durf dürf:0 ess ess:0 fähl fehl:0 fähr fahr:0 fäll fall:0 fänd find:0 fäng fang:0 föch fecht:0 föhl fehl:0 führ führ:0 fahl fehl:0 fahr fahr:0 fall fall:0 fand find:0 fang fang:0 fech fecht:0 fecht fecht:0 fehl fehl:0 fich fecht:0 fiehl fehl:0 fiel fall:0 find find:0 fing fang:0 flöch flecht:0 flög flieg:0 flöh flieh:0 flöss fliess:0 flech flecht:0 flecht flecht:0 fleiß fleiß:0 fliß fleiß:0 flich flecht:0 flicht flecht:0 flieg flieg:0 flieh flieh:0 fliess fliess:0 fliss fleiß:0 floß fliess:0 floch flecht:0 flog flieg:0 floh flieh:0 floss fliess:0 foch fecht:0 fohl fehl:0 fräß fress:0 fräg frag:0 frör frier:0 fraß fress:0 frag frag:0 fress fress:0 friß fress:0 frier frier:0 fror frier:0 frug frag:0 fuhr fahr:0 fund find:0 gäß gess:0 gäb geb:0 gäl gelt:0 gänn ginn:0 gär gär:0 göl gelt:0 gönn ginn:0 gör gär:0 göss gieß:0 gaß gess:0 gab geb:0 gal gelt:0 gang geh:0 gann ginn:0 geb geb:0 geh geh:0 gelt gelt:0 gess gess:0 giß gess:0 gib geb:0 gieß gieß:0 gil gelt:0 gilt gelt:0 ging geh:0 ginn ginn:0 glömm glimm:0 gleich gleich:0 gleit gleit:0 glich gleich:0 glimm glimm:0 glitt gleit:0 glomm glimm:0 goß gieß:0 gol gelt:0 gonn ginn:0 gor gär:0 goss gieß:0 gräb grab:0 grüb grab:0 grab grab:0 greif greif:0 griff greif:0 grub grab:0 häl halt:0 hälf helf:0 hält halt:0 häng häng:0 hätt hab:0 höb heb:0 hüb heb:0 hülf helf:0 ha hab:0 hab hab:0 hal halt:0 half helf:0 halt halt:0 hang häng:0 hat hab:0 hau hau:0 heb heb:0 heiß heiß:0 helf helf:0 hieß heiß:0 hieb hau:0 hiel halt:0 hilf helf:0 hing häng:0 hob heb:0 holf helf:0 hub heb:0 iß ess:0 ies käm komm:0 kömm komm:0 könn könn:0 kör kies:0 kam komm:0 kann könn:0 kies kies:0 kläng kling:0 klömm klimm:0 klang kling:0 klimm klimm:0 kling kling:0 klomm klimm:0 klung kling:0 kneif kneif:0 kniff kneif:0 komm komm:0 konn könn:0 kor kies:0 kröch kriech:0 kreisch kreisch:0 kriech kriech:0 krisch kreisch:0 kroch kriech:0 läß lass:0 läd lad:0 läg lieg:0 läng ling:1 läs les:0 läuf lauf:0 lög lüg:0 lör lier:0 lösch lösch:0 lüd lad:0 lüg lüg:0 lad lad:0 lag lieg:0 lang ling:1 las les:0 lass lass:0 lauf lauf:0 leg lieg:0 leid leid:0 leih leih:0 les les:0 lie les:0 ließ lass:0 lief lauf:0 lieg lieg:0 lieh leih:0 lier lier:0 lies les ling ling:1 lisch lösch:0 litt leid:0 log lüg:0 lor lier:0 losch lösch:0 lud lad:0 lung ling:1 mäß mess:0 möch mög:0 mög mög:0 mölk melk:0 müß müss:0 müss müss:0 maß mess:0 mag mög:0 mahl mahl:0 meid meid:0 melk melk:0 mess mess:0 miß mess:0 mied meid:0 milk melk:0 moch mög:0 molk melk:0 muß müss:0 nähm nehm:0 näs nes:1 nöss nieß:1 nahm nehm:0 nann nenn:0 nas nes:1 nehm nehm:0 nenn nenn:0 nes nes:1 nieß nieß:1 nimm nehm:0 noß nieß:1 nomm nehm:0 noss nieß:1 pfähl pfehl:0 pfänd pfind:0 pfäng pfang:0 pföhl pfehl:0 pfahl pfehl:0 pfand pfind:0 pfang pfang:0 pfehl pfehl:0 pfeif pfeif:0 pfiehl pfehl:0 pfiff pfeif:0 pfind pfind:0 pfing pfang:0 pflög pfleg:0 pfleg pfleg:0 pflog pfleg:0 pfohl pfehl:0 pfund pfind:0 preis preis:0 pries preis:0 quöll quell:0 quell quell:0 quill quell:0 quoll quell:0 rä rat:0 räng ring:0 ränn rinn:0 rät rat:0 röch riech:0 rönn rinn:0 ra rat:0 rang ring:0 rann renn:0 rat rat:0 reiß reiß:0 reib reib:0 reit reit:0 renn renn:0 riß reiß:0 rie rat:0 rieb reib:0 riech riech:0 rief ruf:0 riet rat:0 ring ring:0 rinn rinn:0 riss reiß:0 ritt reit:0 roch riech:0 ronn rinn:0 ruf ruf:0 rung ring:0 säß sitz:0 säh seh:0 säng sing:0 sänk sink:0 sänn sinn:0 säuf sauf:0 söff sauf:0 sög saug:0 sönn sinn:0 söt sied:0 sött sied:0 saß sitz:0 sah seh:0 salz salz:0 sand send:0 sang sing:0 sank sink:0 sann sinn:0 sauf sauf:0 saug saug:0 schäh scheh:1 schöb schieb:0 schöl schelt:0 schöll schall:0 schör scher:0 schöss schieß:0 schüf schaff:0 schaff schaff:0 schah scheh:1 schal schelt:0 schall schall:0 scheh scheh:1 scheiß scheiß:0 scheid scheid:0 schein schein:0 schelt schelt:0 scher scher:0 schiß scheiß:0 schieß schieß:0 schieb schieb:0 schied scheid:0 schieh scheh:1 schien schein:0 schil schelt:0 schilt schelt:0 schind schind:0 schiss scheiß:0 schläf schlaf:0 schläg schlag:0 schläng schling:0 schlöss schließ:0 schlüg schlag:0 schlaf schlaf:0 schlag schlag:0 schlang schling:0 schleiß schleiß:0 schleich schleich:0 schleif schleif:0 schliß schleiß:0 schlich schleich:0 schließ schließ:0 schlief schlaf:0 schliff schleif:0 schling schling:0 schliss schleiß:0 schloß schließ:0 schloss schließ:0 schlug schlag:0 schlung schling:0 schmölz schmelz:0 schmeiß schmeiß:0 schmelz schmelz:0 schmiß schmeiß:0 schmilz schmelz:0 schmiss schmeiß:0 schmolz schmelz:0 schnöb schnaub:0 schnaub schnaub:0 schneid schneid:0 schnitt schneid:0 schnob schnaub:0 schoß schieß:0 schob schieb:0 schol schelt:0 scholl schall:0 schor scher:0 schoss schieß:0 schräk schreck:0 schrak schreck:0 schreck schreck:0 schrei schrei:0 schreib schreib:0 schreit schreit:0 schri schrei:0 schrick schreck:0 schrie schrei:0 schrieb schreib:0 schrit schreit:0 schritt schreit:0 schrock schreck:0 schuf schaff:0 schund schind:0 schwämm schwimm:0 schwänd schwind:0 schwäng schwing:0 schwöll schwell:0 schwömm schwimm:0 schwör schwör:0 schwür schwör:0 schwamm schwimm:0 schwand schwind:0 schwang schwing:0 schweig schweig:0 schwell schwell:0 schwieg schweig:0 schwill schwell:0 schwimm schwimm:0 schwind schwind:0 schwing schwing:0 schwoll schwell:0 schwomm schwimm:0 schwor schwör:0 schwund schwind:0 schwung schwing:0 schwur schwör:0 seh seh:0 send send:0 sess sitz:0 sied sied:0 sieh seh:0 sing sing:0 sink sink:0 sinn sinn:0 sitz sitz:0 soff sauf:0 sog saug:0 sonn sinn:0 sot sied:0 sott sied:0 spänn spinn:0 spönn spinn:0 spann spinn:0 spei spei:0 spi spei:0 spie spei:0 spinn spinn:0 spleiß spleiß:0 spliß spleiß:0 spliss spleiß:0 sponn spinn:0 spräch sprech:0 spräng spring:0 spröss sprieß:0 sprach sprech:0 sprang spring:0 sprech sprech:0 sprich sprech:0 sprieß sprieß:0 spring spring:0 sproß sprieß:0 sproch sprech:0 spross sprieß:0 sprung spring:0 stäch stech:0 stähl stehl:0 stäk steck:0 ständ steh:0 stänk stink:0 stöß stoß:0 stöb stieb:0 stöhl stehl:0 stünd steh:0 stürb sterb:0 stach stech:0 stahl stehl:0 stak steck:0 stand steh:0 stank stink:0 starb sterb:0 stech stech:0 steck steck:0 steh steh:0 stehl stehl:0 steig steig:0 sterb sterb:0 stich stech:0 stieß stoß:0 stieb stieb:0 stieg steig:0 stiehl stehl:0 stink stink:0 stirb sterb:0 stoß stoß:0 stob stieb:0 stoch stech:0 stohl stehl:0 storb sterb:0 streich streich:0 streit streit:0 strich streich:0 strit streit:0 stritt streit:0 stunk stink:0 sung sing:0 sunk sink:0 tä tun:0 tät tun:0 ta tun:0 tan tun:0 tat tun:0 träf treff:0 träg trag:0 tränk trink:0 trät tret:0 tröff trief:0 trög trüg:0 trüg trüg:0 traf treff:0 trag trag:0 trank trink:0 trat tret:0 treff treff:0 treib treib:0 tret tret:0 trieb treib:0 trief trief:0 triff treff:0 trink trink:0 trit tret:0 tritt tret:0 troff treff:0 trog trüg:0 trug trag:0 trunk trink:0 tu tun:0 tun tun:0 wäch wachs:0 wänd wind:0 wänn winn:1 wäsch wasch:0 wöb web:0 wög wieg:0 wönn winn:1 wüß wiss:0 wüchs wachs:0 würb werb:0 würd werd:0 würf werf:0 wüsch wasch:0 wachs wachs:0 wand wind:0 wann winn:1 warb werb:0 ward werd:0 warf werf:0 wasch wasch:0 web web:0 weiß wiss:0 weich weich:0 weis weis:0 werb werb:0 werd werd:0 werf werf:0 wich weich:0 wieg wieg:0 wies weis:0 will woll:0 wind wind:0 winn winn:1 wir werd:0 wirb werb:0 wird werd:0 wirf werf:0 wiss wiss:0 wob web:0 wog wieg:0 woll woll:0 wonn winn:1 worb werb:0 word werd:0 worf werf:0 wräng wring:0 wrang wring:0 wring wring:0 wrung wring:0 wuß wiss:0 wuchs wachs:0 wund wind:0 wurd werd:0 wusch wasch:0 zög zieh:0 zieh zieh:0 zog zieh:0 zwäng zwing:0 zwang zwing:0 zwing zwing:0 zwung zwing:0 Text-German-0.06/lib/Text/German.pm0000444000060600006060000000502210223741326016602 0ustar upfipse00000000000000#!/usr/bin/perl # -*- Mode: Perl -*- # Word.pm -- # ITIID : $ITI$ $Header $__Header$ # Author : Ulrich Pfeifer # Created On : Thu Feb 1 13:57:42 1996 # Last Modified By: Ulrich Pfeifer # Last Modified On: Sun Apr 3 12:17:56 2005 # Language : Perl # Update Count : 70 # Status : Unknown, Use with caution! # package Text::German; $VERSION = $VERSION = 0.06; use Text::German::Util; require Text::German::Adjektiv; require Text::German::Ausnahme; require Text::German::Endung; require Text::German::Regel; require Text::German::Verb; require Text::German::Vorsilbe; require Text::German::Cache; sub partition { my $word = shift; my $vorsilbe = Text::German::Vorsilbe::max_vorsilbe($word); my $vl = length($vorsilbe||''); my $endung = Text::German::Endung::max_endung(substr($word,$vl)); my $el = length($endung||''); my $l = length($word); return ($vorsilbe, substr($word, $vl, $l-$vl-$el), $endung); } sub reduce { my $word = shift; my $satz_anfang = shift; my @word = partition($word); my @tmp; printf "INIT %s\n", join ':', @word if $debug; $word[0] ||= ''; $word[2] ||= ''; my $a = Text::German::Ausnahme::reduce(@word); return($a) if defined $a; my $c = wordclass($word, $satz_anfang); unless ($c&$FUNNY || $word[2]) { return $word[1]; } if ($c & $VERB) { @tmp = Text::German::Verb::reduce(@word); if ($#tmp) { @word = @tmp; printf "VERB %s\n", join ':', @word if $debug; return($word[1].'en'); } } if ($c & $ADJEKTIV) { @tmp = Text::German::Adjektiv::reduce(@word); if ($#tmp) { @word = @tmp; printf "VERB %s\n", join ':', @word if $debug; return($word[1]); } } @tmp = Text::German::Regel::reduce(@word); if ($#tmp) { @word = @tmp; printf "REGEL %s\n", join ':', @word if $debug; } #return join ':', @word; return $word[0].$word[1]; # vorsilbe wieder anhaengen } # Do not use this! my $cache; sub cache_reduce { unless ($cache) { $cache = Text::German::Cache->new(Verbose => 0, Function => sub {reduce($_[0], 1); }, Gc => 1000, Hold => 600, ); } $cache->get(@_); } # This is a hoax! sub stem { my $word = shift; my $gf = reduce($word, @_); my @word = partition($gf); return $word[1]; } 1; Text-German-0.06/META.yml0000644000060600006060000000046210223741415014616 0ustar upfipse00000000000000# http://module-build.sourceforge.net/META-spec.html #XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# name: Text-German version: 0.06 version_from: lib/Text/German.pm installdirs: site requires: distribution_type: module generated_by: ExtUtils::MakeMaker version 6.17 Text-German-0.06/MANIFEST0000644000060600006060000000055510223736670014510 0ustar upfipse00000000000000German.pod MANIFEST Makefile.PL README lib/Text/German.pm lib/Text/German/Adjektiv.pm lib/Text/German/Ausnahme.pm lib/Text/German/Cache.pm lib/Text/German/Endung.pm lib/Text/German/Regel.pm lib/Text/German/Util.pm lib/Text/German/Verb.pm lib/Text/German/Vorsilbe.pm t/basic.t t/cache.t META.yml Module meta-data (added by MakeMaker) Text-German-0.06/t/0002755000060600006060000000000010223741416013611 5ustar upfipse00000000000000Text-German-0.06/t/basic.t0000644000060600006060000000325510223734041015056 0ustar upfipse00000000000000# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl test.pl' ######################### We start with some black magic to print on failure. # Change 1..1 below to 1..last_test_to_print . # (It may become useful if the test is moved to ./t subdirectory.) BEGIN {print "1..15\n";} END {print "not ok 1\n" unless $loaded;} use Text::German; $loaded = 1; $i = 1; print "ok 1\n"; ######################### End of black magic. $Text::German::Regel::debug = 0; $Text::German::debug = 0; $debug = 0; # gemachter testen häuslich äße verband verbarg verbiß frömmlich # vordersten hintersten geheiligt gemäßigt wenn ich so wollte # wie ich könnte würde ich noch ganz anders als die anderen # qualifiziert äusserst fade findet das mein kätzchen eure # heiserkeit heiterkeiten hoheitsvollerweise @should = qw( infrastrukturell Verfall gesellschaftlich Organisation DDR führen verhärten isolationistisch Politik reformerisch Anforderung Mitte Jahr Krisenpotential ); for $word (qw( infrastrukturelle Verfall gesellschaftlichen Organisation DDR führte verhärteten isolationistischen Politik reformerische Anforderungen Mitte Jahre Krisenpotential )) { #$x = join ':', Text::German::partition($word); print "=====$word=====\n" if $debug; $x = Text::German::reduce($word); $y = shift @should; print "$word => $x ($y)\n"; $i++; ($x eq $y)? print "ok $i\n": print "not ok $i\n"; } # Insert your test code below (better if it prints "ok 13" # (correspondingly "not ok 13") depending on the success of chunk 13 # of the test code): Text-German-0.06/t/cache.t0000644000060600006060000000325510223734041015040 0ustar upfipse00000000000000# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl test.pl' ######################### We start with some black magic to print on failure. # Change 1..1 below to 1..last_test_to_print . # (It may become useful if the test is moved to ./t subdirectory.) BEGIN {print "1..19\n";} END {print "not ok 1\n" unless $loaded;} use Text::German; $loaded = 1; $i = 1; print "ok 1\n"; ######################### End of black magic. $Text::German::Regel::debug = 0; $Text::German::debug = 0; $debug = 0; # gemachter testen häuslich äße verband verbarg verbiß frömmlich # vordersten hintersten geheiligt gemäßigt wenn ich so wollte # wie ich könnte würde ich noch ganz anders als die anderen # qualifiziert äusserst fade findet das mein kätzchen eure # heiserkeit heiterkeiten hoheitsvollerweise @should = qw( infrastrukturell DDR Verfall gesellschaftlich Organisation DDR führen verhärten führen isolationistisch Mitte Mitte Politik reformerisch Anforderung Mitte Jahr Krisenpotential ); for $word (qw( infrastrukturelle DDR Verfall gesellschaftlichen Organisation DDR führte verhärteten führte isolationistischen Mitte Mitte Politik reformerische Anforderungen Mitte Jahre Krisenpotential )) { print "=====$word=====\n" if $debug; $x = Text::German::cache_reduce($word); $y = shift @should; print "$word => $x ($y)\n"; $i++; ($x eq $y)? print "ok $i\n": print "not ok $i\n"; } # Insert your test code below (better if it prints "ok 13" # (correspondingly "not ok 13") depending on the success of chunk 13 # of the test code): Text-German-0.06/German.pod0000644000060600006060000000225610223736363015273 0ustar upfipse00000000000000# -*- Mode: Perl -*- # German.pod -- # Author : Ulrich Pfeifer # Created On : Tue Jul 2 11:24:15 1996 # Last Modified By: Ulrich Pfeifer # Last Modified On: Sun Apr 3 11:52:51 2005 # Language : CPerl # Update Count : 10 # Status : Unknown, Use with caution! =head1 NAME Text::German - German grundform reduction =head1 SYNOPSYS C C<$stem = Text::German::reduce($word)> =head1 DESCRIPTION This is a rather incomplete implementaion of work done by Gudrun Putze-Meier. I have to confess that I never read her original paper. So all credit belongs to her, all bugs are mine. I tried to get some insight from an implementation of two students of mine. They remain anonymous because their work was the wost piece of code I ever saw. My code behaves mostly as their implementation did except it is about 75 times faster. =head1 AUTHOR Ulrich Pfeifer Fpfeifer@wait.deE> =head1 COPYRIGHT Copyright (c) 1996 Ulrich Pfeifer. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 CHANGES 0.5: Fixed copyright statement Text-German-0.06/Makefile.PL0000644000060600006060000000070010223734041015307 0ustar upfipse00000000000000use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Text::German', 'VERSION_FROM' => 'lib/Text/German.pm', 'LIBS' => [''], # e.g., '-lm' 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING' 'INC' => '', # e.g., '-I/usr/include/other' 'dist' => { SUFFIX => 'gz', COMPRESS => 'gzip -f' }, ); Text-German-0.06/README0000644000060600006060000000155110223736407014232 0ustar upfipse00000000000000NAME Text::German - German grundform reduction SYNOPSYS "use Text::German;" "$stem = Text::German::reduce($word)" DESCRIPTION This is a rather incomplete implementaion of work done by Gudrun Putze-Meier. I have to confess that I never read her original paper. So all credit belongs to her, all bugs are mine. I tried to get some insight from an implementation of two students of mine. They remain anonymous because their work was the wost piece of code I ever saw. My code behaves mostly as their implementation did except it is about 75 times faster. AUTHOR Ulrich Pfeifer COPYRIGHT Copyright (c) 1996 Ulrich Pfeifer. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. CHANGES 0.5: Fixed copyright statement