Thread Textnormalisierung...Hilfe! (18 answers)
Opened by Gast at 2008-06-26 17:45

Gast Gast
 2008-06-26 20:43
#111576 #111576
Gast+2008-06-26 17:50:56--
@ Gast da oben
Dein Ansatz ist sehr wirr, da steig ich nicht durch. Map- und Grep-Funktion hatten wir noch nicht im Kurs.

Hatte auch [/code] vergessen, also nochmal der Code:
Code: (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
#!/usr/bin/perl

use strict;
use warnings;

my $text = 'Hier steht ein langer Text , in dem das erste Wort klein gemacht werden soll , so wie hier .';
print "Input:\n$text\n\n";


my @words = split ' ', $text;

my %words;
my %starting_words = map {
my $t = $words[$_];
$words{$t}--;
$t => $_
} grep {
$words{$words[$_]}++;
$words[$_-1] =~ /^[\.!\?]$/
} 0 .. $#words;

foreach my $key ( keys %starting_words )
{
my $lckey = lcfirst $key;

if ( exists $words{$lckey} && ( $words{$lckey} > $words{$key} ) )
{
$words[$starting_words{$key}] = $lckey;
} # if
} # foreach


print "Output:\n", join( ' ', @words ), "\n";
<STDIN>;

__END__

Ich hoffe so wirds klarer. Bei dem Input den ich im Code angegeben habe, ist das 'Hier' am Anfang im Output klein.
Es funktioniert folgendermaßen:
Zuerst teile ich den Text in seine Bestandteile auf, indem ich ihn anhand von whitespace split()te.
Schade dass ihr map {} und grep {} noch nicht hattet, aber dieser Teil lässt sich in folgendes umschreiben:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my %words;
my %starting_words;

for my $i ( 0 .. $#words )
{
my $cur_word = $words[$i];

$words{$cur_word}++;
if ( $words[$i-1] =~ /^[\.!\?]$/ )
{
$words{$cur_word}--;
$starting_words{$cur_word} = $i;
} # if
} # for

Hier speichere ich die Anzahl der Wörter die nicht am Satzanfang stehen. Groß-/Kleinschreibung wird beachtet ('hier' ne 'Hier').
Ausserdem speichere ich alle Wörter die am Satzanfang stehen, mit dazugehörigem Index im Array @words.
Danach durchlaufe ich alle Wörter, die am Satzanfang stehen und überprüfe ob es mehr Wörter im Text (ausser Satzanfänge) gibt, die kleingeschrieben werden. Alle diese Wörter werden dann ersetzt und es folgt die Ausgabe.

MfG

View full thread Textnormalisierung...Hilfe!