perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 24
Click for quality!




11.02.2012 / 16:35

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragProblem bei Stringsuche
Seitenanfang
Hallo
ich könnte die nachaeinander vorkommende mit Großbuchstaben angefangene Zeichenkette nicht finden.Es kommt alle einzelne.nicht zusammen.Wie könnte die Lösung sein? Vielen Dank für jede Antwort!

open(ZEITUNG,"$zeitung");
while($t=){
@array=split(/ /,$t);
foreach $zeile (@array) {
if ($zeile=~m/^[A-Z][a-z]+\b[,.]?\s*/){
print "$zeile\n"; }
}

}
Zß es musste "Frau Susane Meier" zu finden.Diese Programm gibt mir aber alle einzelne in je eine Zeile.

Datum: 25.01.2009-03:03

Beitragre: Problem bei Stringsuche
Seitenanfang
Du splittest die Zeilen ja auch an Leerzeichen, prüfst jedes einzelne Element und wenn es mit einem Großbuchstaben anfängt, gibst Du es in einer einzelnen Zeile aus.

Du beschreibst die Aufgabenstellung auch etwas wirr. Was für Eingabedaten hast Du? Was soll am Ende rauskommen?

Noch ein paar Anmerkungen zum Code: Du solltest Fehlerbehandlung machen:

# wichtig ist der "or die..."-Teil
open(ZEITUNG,"$zeitung") or die "Kann Datei nicht oeffnen: $!";

Dann solltest Du lexikalische Filehandles nehmen (siehe auch http://wiki.perl-community.de/bin/view/Wissensbasis/WasIsteinLexikalischerFileHandle):

open my $fh_zeitung, "$zeitung" or die $!;

Dann solltest Du die 3-Arg-Form von open verwenden, da das mögliche Sicherheitslücken stopft. Die 3-Arg-Form von open wird allerdings erst ab Perl 5.8.x unterstützt:

# '<' zeigt an, dass die Datei
# lesend geoeffnet wird. '>' ist fuer
# schreibenden Zugriff
open my $fh_zeitung, '<', $zeitung or die $!;

Wenn ich Deinen Code so anschaue, dann vermute ich, dass Du kein "use strict;" im Code hast. Solltest Du aber. Unbedingt das hier lesen: http://wiki.perl-community.de/bin/view/Wissensbasis/UseStrict

Datum: 25.01.2009-19:15

Beitragre: Problem bei Stringsuche
Seitenanfang
Vielen Dank für Antwort
Ich suche in einer Zeitungstext die Personennamen.zb: Frau Sussane Dietrich
Dafür hatte ich eine kleine Dateien aus Anreden und Zeitungstext.wenn es großgeschriebenes Wort in Zeitung gefunden ist, sucht den in anrede.txt ob diese da vorhanden ist.bis hier funktioniert schon.Aber weiß genau nicht, wie ich weitere großbuchstaben angefangenes Wort nach der Anrede suchen kann. Hast du eine Idee? anrede.txt habe ich als hash bearbeitet.
if ($word=~ m/^[A-Z]\w+/){

if (exists $anrede{$word}){


}
print "gefunden: $word\n";

}
Hier ist Herr oder Frau schon gefunden.Aber möchte weiter die Namen vollständig finden.

Datum: 25.01.2009-21:29

Beitragre: Problem bei Stringsuche
Seitenanfang
Keine perfekte Lösung:

while( my $zeile = <$fh_zeitung> ){
my @words = split / /, $zeile;
chomp $zeile;
for my $word ( @words ){
if ($word=~ m/^[A-Z]\w+/){
if (exists $anrede{$word}){
my ($complete) = $zeile =~ /(\Q$word\E\s*(?:[A-Z][a-z]+\s?)+)/;
print $complete,"\n";
}
}
}
}

Datum: 26.01.2009-09:26

Beitragre: Problem bei Stringsuche
Seitenanfang
Danke für die Hilfe
Ich habe mit anderen Weg es probiert.Es soll den Namen durch tigger(anrede/titel oder name, die ich als Datei habe.)identifiziert werden.Zuerst die Großbuchstaben angefangene Wort(GBAW) mit anrede/titel verglichen und weiter genau nächste GBAW gesucht.wenn die beide GBAW gefunden ist, sucht weitere GBAW.Dann am Ende muss Frau Dr Angelika Müller usw... erkennen und in Bildschirm ausgegeben gleichzeitig in Variablen Personennamen gespeichert werden.Dafür habe ich dies geschrieben.Leider funktioniert nicht so wie ich wünsche

#!/usr/bin/perl-w;

use strict 'vars';

my ($file1,$file2,$file3,$file4);
my (%anrede,%titel,%name,%personname);
my ($a,$b,$c);

#open a file, and read to hash, suppose each line is a term of name/calling

$file1="c:\\Perl\\Copy\\anrede.txt"; #herr,frau,etc...
$file2="c:\\Perl\\Copy\\titel.txt"; #..
$file3="c:\\Perl\\Copy\\name.txt"; #..
$file4="c:\\Perl\\Copy\\zeitung.txt"; #

open(FH,'<',$file1) or die $!;
while(my $a=<FH>){
chomp($a);
$anrede{$a}=1;
}

open(FHA,'<',$file2) or die $!;
while(my $b=<FHA>){
chomp($b);
$titel{$b}=1;
}

open(FHN,'<',$file3) or die $!;
while(my $c=<FHN>){
chomp($c);
$name{$c}=1;
}

###########open the zeitung.txt
open(ZT,'<',$file4) or die $!;
while (my $line=<ZT>){
chomp($line);

$line=~s/\W+/ /g; #loeschen alle "nicht-wort" zeichen

my @line=split(/\s+/,$line); #split line to word
foreach my $word(@line){
if ($word=~/^[A-Z]\w+/){

if (exists $anrede{$word}){
$a=$word;

}
elsif (exists $titel{$word})
{
$b=$word;
}
elsif (exists $name{$word})
{
$c=$word;

}
else
{
}
}
}
my $name=$a." ".$b." ".$c; #full name
print"$name";
$personname{$c}++; #put the name to %personname
$a=""; #clear $a.$b.$c for the next name
$b="";
$c="";
}


Bin sehr Dankbar für jede Hilfe!

Datum: 29.01.2009-03:06

Beitragre: Problem bei Stringsuche
Seitenanfang
PS: Es soll alle mögliche Formen erkannt werden zb Herr Müller, Herr Dr Müller, oder Herr Micheal Müller usw.
Vielen Dank ;-)

Datum: 29.01.2009-03:16

-






-
-