Schrift
[thread]8561[/thread]

Tagging in perl



<< >> 6 Einträge, 1 Seite
J-jayz-Z
 2006-12-07 21:12
#72371 #72371
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

ich hab ein kleines Problem mit regulären ausdrücken. Und zwar hab ich einen begriff an mehreren Stellen gesplittet und will dann schauen, ob alle dieser Ergebnisse in einem Text vorkommen.
Allerdings ist ein Text zum Beispiel "Praktikant in München" oder so. Einer der texte, die gesplittet werden lautet "Praktikant/in". Nun findet er Praktikant oben allerdings nicht. Das "in" wird ignoriert. Hier mal etwas Code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
my @tags = split(/\s|\/|-|\(|\)/, $$arr[0]);
my @new = map { $tags[$_] ? $tags[$_] eq "in" ? "" : $tags[$_] : "" } (0..9); #mit "" auffüllen, bis es 10 Tags sind
if(
($headline =~ m/.*$new[0].*/i) &&
($headline =~ m/.*$new[1].*/i) &&
($headline =~ m/.*$new[2].*/i) &&
($headline =~ m/.*$new[3].*/i) &&
($headline =~ m/.*$new[4].*/i) &&
($headline =~ m/.*$new[5].*/i) &&
($headline =~ m/.*$new[6].*/i) &&
($headline =~ m/.*$new[7].*/i) &&
($headline =~ m/.*$new[8].*/i) &&
($headline =~ m/.*$new[9].*/i))
{
$jobbezeichnung = $$arr[0];
}
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
topeg
 2006-12-07 21:36
#72372 #72372
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Warum suchst du Streng nach 10 Kriterien?
Das splitten kannst du auch mit "\W" machen das bedeutet alles was nicht nicht in Worten vorkommt.
versuch es mal so:
Code: (dl )
1
2
@tags=split(/\W/, $$arr[0] );
$jobbezeichnung = $$arr[0] if( $#tags == grep{ $_ eq 'in' or $headline=~/$_/i }@tags);

etwas auseinandergezogen:
Code: (dl )
1
2
3
my @tags=split(/\W/, $$arr[0] );
my $anzahlpositiv=grep{ $_ eq 'in' or $headline=~/$_/i }@tags;
$jobbezeichnung = $$arr[0] if( $#tags == $anzahlpositiv)
\n\n

<!--EDIT|topeg|1165520423-->
renee
 2006-12-07 22:48
#72373 #72373
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Außerdem kannst Du aus
Code: (dl )
$headline =~ m/.*$new[0].*/i
das hier machen:
Code: (dl )
$headline =~ m/$new[0]/i



Das hier wäre vielleicht auch noch eine Möglichkeit:
Code: (dl )
1
2
3
if(10 == grep{$headline =~ /$_/}@new){
print "alles vorhanden";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
J-jayz-Z
 2006-12-08 00:32
#72374 #72374
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Auf die Idee mit grep bin ich gar nicht gekommen, danke. Aber der post von dir, topeg, bringt nur Müll. Dann hab ich "Versicherungsdetektiv/in" obwohl er eigentlich Softwareentwickler/in finden sollte. Erklären kann ich mir das jedoch nicht so ganz ...
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
topeg
 2006-12-08 00:57
#72375 #72375
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Am "in" kann es nicht liegen ... hmmm ich glaube ich weiß wo das Problem ist.
Nehmen wir mal an alle Wörter bis auf eines werden gefunden, und dieses eine, nicht gefundene, ist halt "Softwareentwickler", dann würde er dir auch den "Versicherungsdetektiv" auspucken. Ich habe da einen kleinen Denkfehler gemacht, denn "$#tags" ist der letzte Index im array, das ist aber eines weniger als Elemete Enthalten sind ($array[0] ist ja der erste Index). Richtig wäre hier "@tags" das im Scalarkontext die Anzahl der Elemete des Arrays ausgibt.
Der richtige Code müßte allso lauten:
Code: (dl )
1
2
my @tags=split(/\W/, $$arr[0] );
$jobbezeichnung = $$arr[0] if( @tags == grep{ $_ eq 'in' or $headline=~/$_/i }@tags);

Entschuldigung...\n\n

<!--EDIT|topeg|1165532289-->
J-jayz-Z
 2006-12-09 03:01
#72376 #72376
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hehe, du brauchst dich nicht entschuldigen. Ich hab zu danken ;)
Testen kann ich es jedoch gerade nicht. Is fürs Geschäft, hab ja auch Wochenende ... ;)

Ich bin leider etwas eingerostet in Perl. Als ich damit angefangen hab, war ich relativ fit, dann musste ich Jobmäßig nur noch Java machen, dann C++. Jetzt kann ich selbst entscheiden und Perl war mir für den Anwendungsbereich das sinnvollste. Ich denk, ihr werdet in nächster Zeit mehr von mir hören ;)
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
<< >> 6 Einträge, 1 Seite



View all threads created 2006-12-07 21:12.