Thread Probleme mit RegEx und Worttypen
(49 answers)
Opened by Dingels at 2008-07-25 19:00
So, sorry war gestern unterwegs, daher kann ich mich erst jetzt melden.
Ich hab jetzt zig Sachen ausprobiert, die ihr vorgeschlagen habt, aber nichts funktioniert. Wahrscheinlich habe ich missverstanden, wie ich eure Tipps anwenden soll. Also hier noch mal mein Code bis zu dem Punkt, an dem er korrekt funktioniert: Code (perl): (dl
)
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 use strict; use diagnostics; use locale; my %korpus = lese_korpus("korpus.txt"); sub lese_korpus { my $dateiname = shift; my %hash_korpus; open my $input, "<", $dateiname or return 0; while (my $zeile = <$input>) { # Whitespace entfernen und normalisieren: $zeile =~ s/(\S+)\s+(\S+)/$1 $2/; $zeile =~ s/^\s+//; # Leere Zeilen überspringen next if ($zeile eq ''); # Token und Tag im Hash als Schlüssel und Wert ablegen: $zeile =~ s/(\S+)\s(\S+)/$hash_korpus{$1}=$2/ge; } close $input; return %hash_korpus; } Ja, viele Token enthalten auch zig Sonderzeichen. Das Korpus beinhaltet Daten aus Zeitungen. Wenn ich die Schlüssel sortiert ausgeben lassen, sieht man das schon. Hier mal ein Auszug: ! # $ % & ' ( ) * + +16,4% +23% +5,8% +8,8% , - [...] Auch am Ende kommen noch paar Sonderzeichen: [...] £ © ± µg/m « » Wo genau soll ich diese \Q und \E einfügen? Hab das an jedem möglichen Vorkommen von $pre und $post versucht, es ändert nichts daran, dass mein Programm scheinbar ne Endlosschleife produziert und nichts anzeigt. Ich habe auch schon versucht, alle Sonderzeichen mit einem regulären Ausdruck in einer if-Anweisung auszuschließen, aber das führt auch zu keinem Ergebnis. So hab ich das gemacht: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 foreach my $schluessel (keys %korpus) { if ($schluessel =~ /\w+/) { foreach my $pre (keys %korpus) { foreach my $post (keys %korpus) { if ($schluessel eq "\Q$pre$post\E") { print $schluessel . "\n"; } } } } } Was muss ich machen, damit der Code endlich funktioniert? Gibt's ne Abkürzung, mit der man alle Sonderzeichen auf einmal ausschließen kann? |