Hallo,
ich stehe grade vor einem Problem, das ich auch in 8 Stunden nicht lösen konnte... dabei geht es nur um gute 15 Zeilen Code:
Ich habe die hashes %referentenliste und %anaphernliste. Für beide gilt: Die Keys sind Integer, die Werte Arrays aus Strings. Beide Hashes bestehen aus der gleichen Anzahl von Schlüssel-/ Wertepaaren. Ich möchte nun die Keys (Sätze) von 1-n durchgehen und dabei Key für Key (satzweise) die einzelnen Anaphern (Elemente aus @{$anaphernliste{$index}}) abarbeiten.
Jede Anapher wird dazu auf einen bestimmten Teil reduziert und $muster zugewiesen.
Dann schaue ich für den aktuellen Satz und alle vorangegangenen Sätze, ob in den $kandidat aus @{$referentenliste{$i}} das gleiche Muster enthalten ist. Ist das der Fall, soll $kandidat auf @kandidatenliste gepusht werden.
Leider klappt das nicht. Anscheinend komme ich in eine Endlosschleife, die ich mit STRG + C beenden muss.
Was läuft falsch? Im Anhang findet ihr den Code; leider nicht schön formatiert. Die Zeilen sind wohl zu lang; zudem wurden immer wieder ausgegeben.
Vielen Dank, Pida
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
my $index = 1;
my $satzzahl = @sort_keys_satzliste;
while ($index <= $satzzahl) {
# solange der satzindex die zahl der sätze nicht übersteigt
while (@{$anaphernliste{$index}}) {
# solange noch anaphern auf der liste des aktuellem satzes stehen
my $aktuelles_pronomen = shift (@{$anaphernliste{$index}}); # shifte eine anapher
my $muster = $aktuelles_pronomen;
# weise $muster die aktuelle anapher zu
$muster =~ s/\(.*(\d[sp]).*\)/$1/;
# reduziere $muster auf 3s, 2p o.ä.
print $muster;
for (my $i = $index; $i > 0; $i--) {
# für diesen satz und alle davor tue
my @kandidatenliste;
foreach my $kandidat (@{$referentenliste{$i}}) { # für jeden referenten des aktuellen satzes
if ($kandidat =~ /$muster/) {
# wenn $muster teil des aktuellen referenten ist
push (@kandidatenliste, $kandidat); # pushe den aktuellen referenten auf @kandidatenliste
}
}
print @kandidatenliste;
# gib die liste aus
}
$index++; # zum nächsten satz
}
}
\n\n
<!--EDIT|renee|1172236917-->