41. kasu praktikoa: hitz propioak eta komunak

                                                                 
Komando-lerrotik bi fitxategi jaso eta fitxategi bakoitzaren hitz propioak bistaratzen dituen programa idatzi nahi dugu. Baina zeintzuk dira hitz propioak? Fitxategi horretan soilik agertzen direnak, komunak ez direnak.
      Hobeto uler dadin, demagun egaña.txt  fitxategian Andoni Egaña bertsolariak amodioaren inguruan kantatutako bertso guztiak dauzkagula, eta maia.txt fitxategian Jon Maiarenak. Gure nahia, maitasunari buruz kantatzean bertsolari bakoitzak erabiltzen dituen hitz propioak topatzea da, hau da, gai horri buruz
kantatzean berak bakarrik erabili dituen hitzak.
      Hitz propioak topatzeko gure programarekin erraza litzateke aurreko ataza egitea:
 
>perl hitzPropio.pl egaña.txt maia.txt
 egaña.txt-ren hitz propioak:
 amorio
 moñoña
 …
 maia.txt-ren hitz propioak:
 muxutxue
 …
 >
     
Programak 2 fitxategien edukia hitzez hitz konparatuko du, eta 2 fitxategietan errepikatzen ez diren haiek soilik itzuli. Modu horretan gai beraren inguruan bertsolari bakoitzak, berak bakarrik, erabili dituen hitzak zeintzuk diren jakin ahalko dugu.

     Programaren prozedura orokorra aurrekoaren antzekoa da (40. kasu praktikoa), bi ezberdintasunekin: programa honek ez du testua esaldiz esaldi prozesatzen, hitzez hitz baizik. Hash-aren gakoak oraingo honetan hitzak izango dira. Bigarren ezberdintasuna datuak bistaratzean ageri da: aurreko programan esaldi guztiak bistaratzen genituen, lehenengo fitxategian (A), bigarrenean (B) edo bietan (AB) agertzen zen zehaztuz. Oraingoan, fitxategi bakoitzaren hitz propioak soilik bistaratu nahi ditugunez, A etiketa daramatenak eta B etiketa daramatenak bistaratuko ditugu, hitz komunak (AB etiketa daramatenak) baztertuz.
     Hona programa:

hitzPropio.pl

 #!/usr/bin/perl
 use strict; use warnings;
 my ($lerro,%hash1, %hash2, %hashOrok, @hitzak1, @hitzak2);
 my (@lehen, @bigarren);
 open (FITX1, $ARGV[0]) ||
      die(“Ezin $ARGV[0] fitxategia irekin”);
 while ($lerro = <FITX1>) {
    chomp($lerro);
    # Lerroa hitzetan banatu
    @hitzak1 = split (/[s.,;:?!]+/, $lerro);
    foreach my $hitz (@hitzak1) { # Hitz bakoitza prozesatu
        # Lehen lerroko hitzak biltzen dituen hash-a
        $hash1{$hitz} = 1;
        # Hitz guztiak biltzen dituen hash-a
        $hashOrok{$hitz} = “A”;
      }
 }
 close(FITX1);
 open (FITX2, $ARGV[1]) || die(“Ezin $ARGV[1] irekin”);
 while ($lerro = <FITX2>) {
      chomp($lerro);
      @hitzak2 = split (/[s.,;:?!]+/, $lerro);
      foreach my $hitz (@hitzak2) {
            # Bigarren lerroko hitzak dituen hash-a
            $hash2{$hitz} = 1;
            if(exists($hashOrok{$hitz})) {
                 $hashOrok{$hitz} = “AB”; }
            else { $hashOrok{$hitz} = “B”; }
      }
 }

 close(FITX2);
 foreach my $elem (sort(keys(%hashOrok))) {
      if ($hashOrok{$elem} eq “A”) {
            push(@lehen, $elem);
      }
      elsif ($hashOrok{$elem} eq “B”) {
            push(@bigarren, $elem);
      }
 }
 print (“*****************n”);
 print(“$ARGV[0]-ren hitz propioak:n”);
 foreach my $elem (@lehen) {
      print(“$elemn”);
 }
 print (“*****************nn”);
 print(“$ARGV[1]-ren hitz propioak :n”);
 foreach my $elem (@bigarren) {
      print(“$elemn”);
 }
 print (“*****************n”);

Jaitsi   hitzPropio.pl   fitxategia

Utzi erantzuna

Zure e-posta helbidea ez da argitaratuko. Beharrezko eremuak * markatuta daude