# -*- 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