Schrift
[thread]12256[/thread]

Probleme mit RegEx und Worttypen (Seite 2)



<< |< 1 2 3 4 5 >| >> 50 Einträge, 5 Seiten
Linuxer
 2008-07-25 20:08
#112741 #112741
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
Wo hast Du bei 3 Schleifen eine Rekursion?

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
26
#!/usr/bin/perl
# vi:ts=4 sw=4 et:
use strict;
use warnings;

my %hash = (
    Abend      => 'NN',
    Sonne      => 'NN',
    Haus       => 'NN',
    Abendsonne => 'NN',
);

my $text = q~Haus Abendsonne haussonne hurz~;

for my $word ( split /\s+/, $text ) {

    for my $pre ( keys %hash ) {

        for my $post ( keys %hash ) {

            if ( $word =~ /^$pre$post$/i ) {
                print $word, $/;
            }
        }
    }
}
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
MatthiasW
 2008-07-25 20:09
#112742 #112742
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Quote
Ja, so in etwa habe ich mir das vorgestellt. Hab das ja mit einer foreach-Schleife versucht. Aber Rekursionen sind scheinbar nicht möglich.

Wo vermutest du denn eine Rekursion in deiner foreach-Schleife?
Du prüfst in der Schleife, ob $element den eigenen Wert und noch irgendetwas hinten dran enthällt.
Das kann natürlich nicht sein, deshlab kriegste auch keine Ausgabe.

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
LanX-
 2008-07-25 20:13
#112743 #112743
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
Linuxer+2008-07-25 18:08:32--
Wo hast Du bei 3 Schleifen eine Rekursion?


er verwechselt es mit Iteration ...
Dingels
 2008-07-25 20:19
#112744 #112744
User since
2008-07-07
31 Artikel
BenutzerIn
[default_avatar]
@Linuxer

Danke. Der Ansatz hilft mir. Ich wusste nicht, dass man zwei mal hintereinander über dieselben Wörter iterieren kann und nur die Kontrollvariable ändern muss, damit der Reguläre Ausdruck funktioniert. DANKESCHÖN! :-)

@LanX-

Stimmt, ich meinte Iteration. Hab ich grad durcheinander geworfen.
LanX-
 2008-07-25 20:22
#112746 #112746
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
um Linuxers Code ohne RegEx verständlicher zu machen

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for my $word ( split /\s+/, $text ) {

    for my $pre ( keys %hash ) {

        for my $post ( keys %hash ) {
            #- Kleinschreibung
            my $lc_word="\L$word";
            my $lc_komposit="\L$pre$post";

            if ( $lc_word eq $lc_komposit ) {
                print $word, $/;
            }
        }
    }
}
LanX-
 2008-07-25 20:36
#112749 #112749
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
LanX-+2008-07-25 18:04:49--
Wenn du aber Computerlinguist werden willst dann setz dich IMHO lieber mit RegExes auseinander, da gibts ein sehr gutes O'reilly-Buch das fast alle Beispiele in Perl macht.

http://oreilly.com/catalog/9780596002893/toc.html
Dingels
 2008-07-25 20:45
#112750 #112750
User since
2008-07-07
31 Artikel
BenutzerIn
[default_avatar]
Mhm..jetzt gibts noch ein Problem, was ich mit meinem alten Code schon hatte. Ich bekomme ne Fehlermeldung, dass im RegEx ne Klammer fehlen würde, dabei fehlt eigentlich keine. Und wen ich welche hinzufüge, dann kommt der Fehler immer noch. Mein Code sieht jetzt so aus:


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use strict;
use diagnostics;

# Ist ne Subroutine, die funzt aber zu 100%
my %korpus = lese_korpus("korpus.txt");

my @array_korpus = keys %korpus;

foreach my $worttyp (@array_korpus) {
foreach my $pre (keys %korpus) {
foreach my $post (keys %korpus) {
if ($worttyp =~ /^$pre$post$/i) {
print $worttyp . "\n";
}
}
}
}


Da krieg ich jetzt folgende Fehlermeldung:

Code: (dl )
Unmatched ( in regex; marked by <-- HERE in m/^Wahlkampf( <-- HERE


Das Wort "Wahlkampf" hat er zwei mal ausgegeben, dann kam dieser Fehler. Er bezieht sich auf die Zeile mit der if-Anweisung. Bin grade sehr überfragt, warum dieser Fehler auftaucht?
LanX-
 2008-07-25 20:51
#112751 #112751
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
probier mal meinen Code ohne RegEx! Ich vermute in deinem "Korpus" steckt eine "Klammer"!
LanX-
 2008-07-25 20:53
#112752 #112752
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
my @array_korpus = keys %korpus;
foreach my $worttyp (@array_korpus) {                            #hier!
        foreach my $pre (keys %korpus) {                             #hier!
                foreach my $post (keys %korpus) {                   #hier!
                        if ($worttyp =~ /^$pre$post$/i) {
                                print $worttyp . "\n";
                        }
                }
        }
}


du iterierst 3 mal über keys %korpus
Dingels
 2008-07-25 21:03
#112753 #112753
User since
2008-07-07
31 Artikel
BenutzerIn
[default_avatar]
@LanX-

Schau mal die folgenden Zeilen an:


Code: (dl )
1
2
3
my $text = q~Haus Abendsonne haussonne hurz~;

for my $word ( split /\s+/, $text ) {


Im Grunde wird doch hier der Text in einzelne Token gesplittet und dann darüber iteriert. Ich hab das auch so gemacht, nur hab halt die Schlüssel als Token in einem Array gespeichert und dann darüber iteriert. Seltsam, dass es damit nicht funktioniert.

das Programm mit deinem Code läuft zwar, aber er gibt nix aus. So als ob ne Endlosschleife ausgeführt würde, aber er nix anzeigt.
<< |< 1 2 3 4 5 >| >> 50 Einträge, 5 Seiten



View all threads created 2008-07-25 19:00.