Thread Probleme mit RegEx und Worttypen (49 answers)
Opened by Dingels at 2008-07-25 19:00

Dingels
 2008-08-02 21:04
#113019 #113019
User since
2008-07-07
31 Artikel
BenutzerIn
[default_avatar]
Hallo nochmal,

weil jeder Durchgang des Programms trotz jetzt nur noch quadratischen Aufwands nur zum Testen einzelner Quelltextänderungen recht lange dauert, hab ich mir mal ein kleines Test-Script gebastelt.

Das sieht jetzt folgendermaßen aus:

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
use strict;
use diagnostics;
use locale;

my %lexikon = (
               'hell' => 'ADJA',
               'blau'      => 'ADJA',
               'hellblau' => 'ADJA',

               'Tisch'      => 'NN',
               'Decke'     => 'NN',
               'Tischdecke' => 'NN'
               [...]
);

foreach my $wortteil_1 (keys %lexikon) {
        foreach my $wortteil_2 (keys %lexikon) {
                if (exists $lexikon{$wortteil_1.$wortteil_2}) {
                        if ($lexikon{$wortteil_1} eq "ADJA" && $lexikon{$wortteil_2} eq "ADJA" && $lexikon{$wortteil_1.$wortteil_2} eq "ADJA") {
                                print $wortteil_1.$wortteil_2 . "\t" . $lexikon{$wortteil_1.$wortteil_2} . "\t\t" . $wortteil_1 . "\t" . $lexikon{$wortteil_1} . "\t\t" . $wortteil_2 . "\t" . $lexikon{$wortteil_2}  . "\n";
                        }
                }
        }
}


Hiermit teste ich jetzt also, ob ein Wort ein Kompositum ist. Das ist dann der Fall, wenn seine einzelnen Bestandteile einzeln im Korpus vorkommen. Zusätzlich teste ich die Wortart, da jedes Wort ein Wortarten-Tag besitzt. In dem Hash oben sind zwei repräsentative Einträge.

Meine Abfrage mit dem Adjektiv funktioniert korrekt:
Code: (dl )
hellblau	ADJA		hell	ADJA		blau	ADJA


Mit dem Substantiv klappts logischerweise nicht, weil die Groß- und Kleinschreibung nicht normalisiert ist. Also wollte ich die lc-Funktion anwenden. Klappt jedoch seltsamerweise nicht. Folgendes geht z.B. nicht:

Code (perl): (dl )
1
2
3
4
5
6
7
foreach my $wortteil_1 (keys %lexikon) {
               $wortteil_1 = lc($wortteil_1);
               foreach my $wortteil_2 (keys %lexikon) {
                               $wortteil_2 = lc ($wortteil_2);
              [...]
               }
}


Hab noch andere Dinge versucht, aber nichts funktioniert. Wie kann ich nur für den temporären Schleifendurchlauf alle Schlüssel im Hash in Kleinbuchstaben umwandeln? Denn ausgegeben werden sollen die Wörter ja in der richtigen Groß- und Kleinschreibung.

Vielen Dank. :)


Schönen Gruß,
Dingels

View full thread Probleme mit RegEx und Worttypen