5 # Dieses Perl-Skript extrahiert einfache Wortlisten aus der
6 # »wortliste«-Datenbank, die beispielsweise als Eingabedateien für »patgen«
7 # verwendet werden können.
9 # Aufruf: perl extract-tex.pl [Optionen...] < wortliste > input.patgen
11 # Die »wortliste«-Datei muss in UTF-8 kodiert sein.
13 # Option »-t« wählt die traditionelle deutsche Rechtschreibung aus, Option
14 # »-s« die traditionelle (deutsch)schweizerische Rechtschreibung. Wenn
15 # weder »-s« noch »-t« gesetzt ist, wird die reformierte deutsche
16 # Rechtschreibung ausgewählt.
18 # Ist Option »-x« gesetzt, werden Optionen »-g« und »-u« ignoriert und die
19 # die sprachspezifischen Felder unbearbeitet ausgegeben.
21 # Option »-g« bewirkt die Ausgabe von Wörtern mit gewichteten Trennstellen;
22 # Wörter mit »·« werden ignoriert.
24 # Option »-u« verhindert die Ausgabe von Wörtern mit Markern für
25 # unerwünschte Trennungen (z.B. »An-al.pha-bet«).
27 # Option »-v« verhindert die Ausgabe von Versalformen, wo »ß« durch »ss«
30 # Option »-l« konvertiert die Ausgabe nach latin-1 (wie von »patgen«
34 use utf8
; # String-Literals direkt als UTF-8
38 our ($opt_g, $opt_l, $opt_s, $opt_t, $opt_u, $opt_v, $opt_x);
44 binmode(STDIN
, ":encoding(utf8)");
47 binmode(STDOUT
, ":encoding(latin1)");
50 binmode(STDOUT
, ":encoding(utf8)");
66 # entferne Leerzeichen aller Art
69 my @feld = split(';');
72 # reformiert: Felder 2, 4, 5, 7
73 # traditionell: Felder 2, 3, 5, 6
74 # traditionell Schweiz: Felder 2, 3, 5, 6, 8
76 $zeile = $feld[2] if defined $feld[2]
77 && $feld[2] ne "-3-" && ($opt_t || $opt_s);
78 $zeile = $feld[3] if defined $feld[3]
79 && $feld[3] ne "-4-" && !($opt_t || $opt_s);
80 $zeile = $feld[4] if defined $feld[4]
81 && $feld[4] ne "-5-" && !$opt_v;
82 $zeile = $feld[5] if defined $feld[5]
83 && $feld[5] ne "-6-" && ($opt_t || $opt_s) && !$opt_v;
84 $zeile = $feld[6] if defined $feld[6]
85 && $feld[6] ne "-7-" && !($opt_t || $opt_s) && !$opt_v;
86 $zeile = $feld[7] if defined $feld[7]
87 && $feld[7] ne "-8-" && $opt_s && !$opt_v;
89 next if $zeile eq "-2-";
92 # entferne spezielle Trennungen
93 $zeile =~ s
|\
{ (.*?
) / .*? \
}|$1|gx
;
94 # entferne Doppeldeutigkeiten
95 $zeile =~ s
|\
[ (.*?
) / .*? \
]|entferne_marker
($1)|egx
;
97 # Ausgabe von Wörtern mit unerwünschten Trennungen?
98 next if $zeile =~ /[._]/ and $opt_u;
99 # entferne Markierungen für unerwünschte Trennungen
100 $zeile =~ s/[·|=-]*[._]+[·|=-]*//g;
102 # Ausgabe von Wörtern mit ungewichteten Trennstellen?
103 next if $zeile =~ /·/ and $opt_g;
104 # reduziere Trennstellenmarker zu »-«, falls gewollt
105 $zeile =~ s/[·|=-]+/-/g if not $opt_g;