Thread Erkennung von Abkürzungen
(3 answers)
Opened by kimmy at 2011-02-25 17:11
Die ganzen Fallunterscheidungen gefallen mir nicht. Das lässt sich zumindest etwas generischer ausdrücken.
Was hältst du davon, einfach aus jeder Abkürzung eine Regex zu machen? Man muss eigentlich doch nur den Punkt durch \w+ ersetzen, wofür er ja steht: 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 #!/usr/bin/perl use strict; use warnings; use Encode; binmode(STDOUT,":utf8"); my @arr_abk = <>; # Liste von Abkürzungen # Zeilenenden entfernen chomp @arr_abk; # Mache aus allen Abkuerzungen eine Regex my @abk_re = @arr_abk; s/\./\\w+/g for @abk_re; # Alle Begriffe durchgehen open(my $lex, "<:encoding(UTF8)", "lexikon.txt") or die "kann das Lexikon nicht öffnen: $!"; while (my $line = <$lex>){ chomp $line; for my $i (0 .. $#abk_re) { print "$arr_abk[$i]\t$line\n" if $line =~ /^$abk_re[$i]$/i; } } (Das lässt sich noch etwas verkürzen, wenn die Abkürzung selber nicht ausgegeben werden muss. Aber ich denke, diese Ausgabe möchtest du haben.) Zu überlegen ist, ob ein Begriff auf mehrere Abkürzungen passen kann und ob das bemerkt werden soll. Ansonsten könnte die Schleife vorzeitig verlassen werden. Umgekehrt kann man sich überlegen, die Schleifen zu vertauschen. Was effizienter ist, hängt von deinen Daten und dem Ziel ab. PS: Ach ja, evtl. müsste man die Abkürzungen vorher noch auf Zeichen prüfen, die in Regexen eine besondere Bedeutung haben +,*,{,},[,],... Last edited: 2011-02-25 20:59:46 +0100 (CET) |