Ik ben bezig met een script voor zogenaamde bigrammen. Dus een script dat een tekst doorloopt en woordcombinaties opslaat, die combinaties zijn het volgende.
bv: A B C D E F G H I J
laten we zeggen we willen E hebben en slaat daarbij ook D E en E F op in een hash.
Ik had al een script geschreven die alle mogelijke woord combinaties opslaat. Dat gaat als volgt.
Ik heb een reference file, waarin woorden staan. De tekst heb ik per zin op 1 regel gezet. Hij doorloopt dus alle regels en kijkt of er een woord uit de reference file matched. ZO ja, dan slaat hij alle woord combinaties op. Maar dat is niet wat ik uiteindelijk wil.
Ik wil dus dat hij het woord en het woord ervoor en erna opslaat.
Nu dacht ik al als ik een array heb en het gematchte woord is woorden[9] dat is de vorige dus woorden[9-1] en de volgende woorden[9+1] alleen is het gematchte woord uiteraard niet standaar woorden[9] maar verschillend.
Uitprogammeren is uiteindelijk niet moeilijk maar ik kom er niet op hoe ik dit probleem kan oplossen, wie kan mij op weg helpen?
een fragment uit mijn code maakt het waarschijnlijk duidelijker:
bv: A B C D E F G H I J
laten we zeggen we willen E hebben en slaat daarbij ook D E en E F op in een hash.
Ik had al een script geschreven die alle mogelijke woord combinaties opslaat. Dat gaat als volgt.
Ik heb een reference file, waarin woorden staan. De tekst heb ik per zin op 1 regel gezet. Hij doorloopt dus alle regels en kijkt of er een woord uit de reference file matched. ZO ja, dan slaat hij alle woord combinaties op. Maar dat is niet wat ik uiteindelijk wil.
Ik wil dus dat hij het woord en het woord ervoor en erna opslaat.
Nu dacht ik al als ik een array heb en het gematchte woord is woorden[9] dat is de vorige dus woorden[9-1] en de volgende woorden[9+1] alleen is het gematchte woord uiteraard niet standaar woorden[9] maar verschillend.
Uitprogammeren is uiteindelijk niet moeilijk maar ik kom er niet op hoe ik dit probleem kan oplossen, wie kan mij op weg helpen?
een fragment uit mijn code maakt het waarschijnlijk duidelijker:
code:
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
41
42
43
| while (<REFERENCE>) { @reference_words = split (/;/,$_); }
# zet de woorden van de reference file in een array
while (<CORPUS>) {
#doorloop het corpus
$zin = $_;
$totaal_zinnen++;
#totaal aantal zinnen +1
foreach my $word(@reference_words) {
#doorloop de array met referentie woorden
if ($zin =~ /\b$word\b/i) {
#matched het reference woord in de zin dan
@words_zin = split (/ /,$zin);
#split de zin op woordbasis en zet de woorden uit de zin in een array
foreach my $word_zin(@words_zin) {
#doorloop de array met woorden uit de zin
if ($word_zin =~ /\w/) {
#als het woord begint met een woordteken
if ($word ne $word_zin) {
#referentie woord moet niet gelijk zijn aan woord uit de zin, dus niet {voorbeeld}{voorbeeld}
$bigram{$word}{$word_zin}++;
#zet deze in de hash bigrammem in combi met reference woord dus bv {een}{computer}
}
}
}
}
}
} |