Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7500[/thread]

Vergleich: zweier Arrays und ihrer Elemente (Seite 2)

Leser: 2


<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten
esskar
 2005-12-12 05:36
#60460 #60460
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Crian,09.12.2005, 15:15]Das klingt nach einem Teilproblem zwischen B und C in einer Problemkette A-B-C-D für die Perl eine elegante Direktlösung A-D bereithält... =)[/quote]
*schenkelklopfer*

PS: mal wieder 2 sehr konstruktive beiträge verfasst
renee
 2005-12-12 05:55
#60461 #60461
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@SD6: Was soll passieren, wenn in beiden Dateien das 'a' auftaucht, aber in unterschiedlichen Zeilen?
Vielleicht kannst Du ja mal ein paar Beispiele posten...

Was soll z.B. hier passieren?

Datei A.txt:
Code: (dl )
1
2
3
4
a b c d e
f g h i j
k l m n o
x q y w z


Datei B.txt:
Code: (dl )
1
2
3
4
a b c f e
k o j n p
y w e q a
x q y w z
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/
renee
 2005-12-12 05:56
#60462 #60462
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@esskar: Dein erster Post war nicht sinnlos *g* War doch eine eindeutige Antwort...
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/
SD6
 2005-12-12 14:05
#60463 #60463
User since
2005-12-09
7 Artikel
BenutzerIn
[default_avatar]
ok..
in dem ersten Teil meiner Programmierung habe ich aus einem Korpus Sätze herausgefiltert. Die ersten elemente sind daher Satznummern, die in einer Datei nur einmal vorkommt.Danach muss ich die Herausgefilterten Sätze mit einem anderen Korpus vergleichen indem die Sätze -auch andere- vorkommen. Mein Ziel ist jetzt: die Satznummern zu vergleichen. und wenn die satznummern gleich sind sollen auch die restlichen wörter verglichen werden

ok renee das waren die 2 Dateien
Datei A.txt:Code  
a b c d e
f g h i j
k l m n o
x q y w z


Datei B.txt:Code  
a b c f e
k o j n p
y w e q a(Hab im ersten teil ein code geschrieben das das erste element immer die Satznummer ist, daher nicht a; aber da die ersten elemente bzw die Satznummer nicht stimmen ist es egal, s.u.)
x q y w z

so und jetzt die ausgaben Renee:

in Satznummer a:
Bla1     b     b     gleich (soll in Bla1 gespeichert werden)
Bla2     c     c     gleich   ............
Bla3     d     f     ungleich...
Bla4     e     e     gleich

in Satznummer x:
Bla1     q     q     gleich
Bla2     y     y     gleich
Bla3     w     w    gleich
Bla4     z      z     gleich

...und da die ersten elemente(Satznummer) der mittleren beiden Zeilen nicht gleich sind brauche es nicht auszugeben .
renee
 2005-12-12 14:16
#60464 #60464
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
aha, da kommen wir der Sache doch schon naeher...
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/
renee
 2005-12-13 04:30
#60465 #60465
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Vielleicht hilft Dir dieser Code etwas weiter:
Code: (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
27
28
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my @bla;

open(my $fh,"<A.txt") or die $!;
my @lines_a = <$fh>;
close $fh;

open(my $fh_b,"<B.txt") or die $!;
while(my $line = <$fh_b>){
chomp $line;
next if($line =~ /^\s*$/);
my @info = split /\s+/,$line;
my @info_a = split /\s+/,$lines_a[$.-1];
if($info[0] == $info_a[0]){
for(1..4){
my $string = $info[$_] eq $info_a[$_] ? "gleich" : "ungleich";
push(@bla,[$.,$info[$_],$info_a[$_],$string]);
}
}
}
close $fh_b;

print Dumper(\@bla);
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/
coax
 2005-12-13 10:47
#60466 #60466
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Oder so
Code: (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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/perl

 use strict;
 use warnings;

 my $file_a = <<EO_FILE_A;
a b c d e
f g h i j
k l m n o
x q y w z
EO_FILE_A

 my $file_b = <<EO_FILE_B;
a b c f e
k o j n p
y w e q a
x q y w z
EO_FILE_B

 open( FILE_A, '<', \$file_a ) or die $!;
 open( FILE_B, '<', \$file_b ) or die $!;

 my $pattern = qr/^\s*$/; # trifft auf leere Zeilen oder nur Whitespaces zu
 my @lines_a = grep !/$pattern/, <FILE_A>;
 my @lines_b = grep !/$pattern/, <FILE_B>;

 close( FILE_A ); close( FILE_B );

 chomp(@lines_a, @lines_b);

 for( my $i = 0; defined $lines_a[$i] && defined $lines_b[$i]; $i++ ) {

     my @parts_a = split /\s+/, $lines_a[$i];
     my @parts_b = split /\s+/, $lines_b[$i];

     next unless $parts_a[0] eq $parts_b[0]; # ueberspringt ungleiche Satznr.

     print "\t\t$lines_a[$i]\t$lines_b[$i]\n";
     print "Satznr: $parts_a[0]\n";
     print "Aufeinanderfolgend gleiche Woerter:";

     # so lange beide Elemente definiert sind und gleiche Inhalte haben ...
     my $j = 1;
     while(    (defined $parts_a[$j] && defined $parts_b[$j])
            && ($parts_a[$j] eq $parts_b[$j])                    ) {

         print " $j";  # ... aktuelle Wortindexnr. ausgeben
         $j++;
     }

     print "\n", '-' x 45, "\n\n";
 }

Das funktioniert nachdem Prinzip wie du es oben beschrieben hast. Kann aber sein dass du etwas anderes suchst. Im Moment werden die Saetze miteinander verglichen die in den Dateien an gleicher Stelle (in gleicher Zeile) stehen.
Ein Satz mit der Nummer 10, der in beiden Dateien vorkommt aber an unterschiedlichen Stellen wuerde niemals verglichen werden.
Womoeglich moechtest du alle Saetze die in beiden Dateien vorkommen miteinander vergleichen, dann musst du natuerlich einen anderen Weg gehen.

PS: Bitte verwende fuer Codezeilen, Beispieldaten, etc. CODE-Tags, generell koennte der Thread etwas kuerze sein wenn der Eroeffnungspost etwas ausfuehrlicher, klarer formuliert und mit Beispieldaten ausgestattet wurden waere. Thx :)\n\n

<!--EDIT|coax|1134463945-->
,,Das perlt aber heute wieder...'' -- Dittsche
renee
 2005-12-13 11:42
#60467 #60467
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=coax,13.12.2005, 09:47][...]
Das funktioniert nachdem Prinzip wie du es oben beschrieben hast. Kann aber sein dass du etwas anderes suchst. Im Moment werden die Saetze miteinander verglichen die in den Dateien an gleicher Stelle (in gleicher Zeile) stehen.
Ein Satz mit der Nummer 10, der in beiden Dateien vorkommt aber an unterschiedlichen Stellen wuerde niemals verglichen werden.
Womoeglich moechtest du alle Saetze die in beiden Dateien vorkommen miteinander vergleichen, dann musst du natuerlich einen anderen Weg gehen.
[...][/quote]
Nach wie vor ist nicht komplett Licht in die Sache gekommen ;)
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/
SD6
 2005-12-13 14:03
#60468 #60468
User since
2005-12-09
7 Artikel
BenutzerIn
[default_avatar]
oh Vielen Dank.....ich werde es gleich mal ausprobieren....und gib euch bescheid....;)
SD6
 2005-12-13 20:34
#60469 #60469
User since
2005-12-09
7 Artikel
BenutzerIn
[default_avatar]
Hallo miteinander;

@Renee:
Sodele ich habe es Versucht und komme leider nicht weiter :(
Der Vorschlag von dir Renee war Super nur hat es jedes Element im Array im A.txt mit jedem Element von B.txt verglichen. Habe es versucht bisschen zu ändern leider ohne Erfolg.

@Coax:
Der Vorschlag von dir Coax ist zu meinem Problem ein bisschen näher gekommen. Es hat die gleichen Sätze erkannt und die Elemente verglichen aber bis zum ungleichen Element. Danach konnte ich nicht weitervergleichen. :(

ich versuch mal jetzt mein eigentliches Problem "ganz offen" zu schildern. ich möchte aus den Sätzen die Merkmalsstrukturen wie Referenzobjekt(REF), Lokalisiertes Objekt (LOC), Relation (REL) und Modifikation der Relation(MOD) extrahieren.Da sieht ein Satz so aus:

Satznummer REF LOC REL MOD
a b c d e

wenn ich jetzt die Dateien habe wie:

Datei A.txt:Code
a b c d e
f g h i j
k l m n o
x q y w z

Datei B.txt:Code
a b c f e
k o j n p
y w e q l
x q y w z

die Ausgabe würde dann so aussehen:

in Satznummer a:
REF b b gleich
LOC c c gleich
REL d f ungleich
MOD e e gleich

in Satznummer x:
REF q q gleich
LOC y y gleich
REL w w gleich
MOD z z gleich

zum schluss möchte ich jedes Merkmalstruktur in einer Formel benutzen, dazu brauche ich die Anzahl der richtigen bzw falsch gematchten Merkmalsstrukturen, die ich auch ausgeben möchte.
also
Ref_richtig = .. mal Ref-falsch = .. mal
Loc-richtig = .. mal Loc-falsch= .. mal
Rel-richtig = .. mal Rel-falsch= .. mal
Mod_richtig= .. mal Mod-falsch= .. mal

Ich Arbeite in einem Projekt indem ich vieles per Hand gemacht habe bis ich auf einen bekannten gestossen bin der mir das Programmieren in den Kopf gesetzt hat. Danach habe ich ein Code geschrieben der mir ne ganze Menge arbeit erspart hatte...und jetzt wollte ich weitermachen... :-( Ich hoffe das dieses Forum mir die Angst nimmt und mut macht mich in der PERL Welt weiter zu entwickeln...


:( :( :(
<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten



View all threads created 2005-11-28 02:45.