Thread Erkennung von Abkürzungen (3 answers)
Opened by kimmy at 2011-02-25 17:11

Dubu
 2011-02-25 20:57
#146048 #146048
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
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)

View full thread Erkennung von Abkürzungen