36. kasu praktikoa: hitzen maiztasunak testuan

         Sarrera-datu gisa fitxategi-izena jaso eta bertako hitz bakoitzaren agerpen kopurua kontatzen duen programa garatuko dugu. Emaitzak agerpen kopuruaren arabera  ordenatuta bistaratuko ditu, handienetik txikienera, hitz bakoitzeko honako informazioa erakutsiz: hitza bera, bere agerpen kopurua edo maiztasuna, eta maiztasun erlatiboa. Hitz baten maiztasun erlatiboa, hitz horren agerpen kopurua hitz kopuru orokorraz zatituta lortzen den koefizientea da.

      Programa esaeraZaharrak.txt fitxategiko hitzen maiztasunak ezagutzeko erabiliz gero, hauxe da lortuko genukeena:

 >perl hitzMaizErlat.pl esaeraZaharrak.txt
 hitza: “ez”               Maiztasuna: 103       Maiz. Erlatiboa:             4.1382
 hitza: “eta”              Maiztasuna: 90         Maiz. Erlatiboa:      3.6159
 hitza: “da”               Maiztasuna: 50         Maiz. Erlatiboa:      2.0088
 hitza: “du”               Maiztasuna: 24         Maiz. Erlatiboa:      0.9642
 hitza: “baino”            Maiztasuna: 19         Maiz. Erlatiboa:      0.7634
 …
 >

      Berriro ere, emaitza handiegia da pantailan osorik ikusi ahal izateko. Irteera fitxategi batera birbideratzea izan daiteke soluzio egokia, edo baita irteerako fitxategi bat erabiltzea datuak bertan idazteko ere.

      Programaren kodea:

hitzMaizErlat.pl
 #!/usr/bin/perl
 use strict;
 use warnings;
 my ($l,@hitzak, $hitzakguztira, $h, %Maiz);
 open (FI, $ARGV[0]) ||
      die(“Ezin $ARGV[0] fitxategia zabaldun”);
 $hitzakguztira = 0;
 while ($l = <FI>) {
      chomp($l);
      # Banatu lerroa hitzetan
      # Banatzaileak: , ; . : ! ? eta zuriunea
        @hitzak = split(/[.?!,;:s]+/,$l);
        foreach $h (@hitzak) {
                 # $h hitzaren agerpen kop. eguneratu
                 $Maiz{$h}++;
                 # Hitz kopuru totala
                 $hitzakguztira = $hitzakguztira + 1;
        }
 }
 my $maiztasuna;
 # %Maiz hash-aren gakoak atxikitako balioaren arabera
 # ordenatu, handienetik txikienera
 my @gakoOrdenaduak =
               sort ({$Maiz{$b} <=> $Maiz{$a}} keys(%Maiz));
 foreach $h (@gakoOrdenaduak) {
        # $h hitzaren maiztasun erlatiboa:
        # bere agerpen kopurua zati hitz kopuru totala
        # (ehunekotan adierazia)
        $maiztasuna = 100 * ($Maiz{$h} / $hitzakguztira) ;
        printf (“hitza: ‘%s’ tt maiztasuna(ehuneko):
                    %4.4f n” ,$h, $maiztasuna);
 }

Jaitsi   hitzMaizErlat.pl   fitxategia

Iruzkinak (1)

  • Mikel Osinalde Aguirre says:


                    Jakina da, testu batean agertzen
    diren hitzen maiztasuna aztertuta, bertako edukiaren eta darabilen gaiaren
    nahiz tesiaren inguruko gutxieneko ezaguera geuregana genezakeela. Ildo horri
    jarraiki osatutako programa da honakoa. Nahi dugun web orrian aukeratzen dugun
    hitz baten inguruko hitzak eta bere maiztasuna emango digu. Era horretara,
    esaterako, izenak jarriz gero, testua idatzi duenak horri buruz duen iritzia
    jakin dezakegu inguruan dituen espezifikatzaileak nahiz beraien maiztasuna
    ikusita. Besta aplikazio bat izan daiteke, adizki jokatu baten laguntzailea
    baliatzea, hartzen duen aditz nagusia ezagutzeko, horrela erabilera iragankor
    edo iragangaitzak azter ditzakegu, esate baterako.

                    Hona programaren erabilera
    adibide bat eta jarraian bere perl egitura:

    C:UsersRibaryMikelenperl>perl
    ingurumaizprobatzen.pl

     

    Zein hitzen ingurua aztertu nahi duzu?

    du

     

    Zenbateko tartean daudenak aztertu nahi dituzu?

    1

     

    Zein web orritan aztertu nahi duzu?

    http://www.berria.info

     

     

    Hemen, atzean dituen hitzen zerrenda ordenatua

    eta maiztasunaren arabera antolatua

     

    ‘du’ ren atzeko ‘Diputazioak’ hitzaren agerpen kopurua: 1

    ‘du’ ren atzeko ‘Jose’ hitzaren agerpen kopurua: 1

    ‘du’ ren atzeko ‘Osasunak”>Espainiako’ hitzaren agerpen kopurua: 1

    ‘du’ ren atzeko ‘Osasunak</a></p>’ hitzaren agerpen kopurua: 1

    ‘du’ ren atzeko ‘aurtengo’ hitzaren agerpen kopurua: 1

    ‘du’ ren atzeko ‘okerrera’ hitzaren agerpen kopurua: 1

    ‘du’ ren atzeko ‘parte’ hitzaren agerpen kopurua: 1

     

     

    Hemen, aurrean dituen hitzen zerrenda ordenatua

    eta maiztasunaren arabera antolatua

     

    ‘du’ ren aurreko ‘egin’ hitzaren agerpen kopurua: 4

    ‘du’ ren aurreko ‘eskatu’ hitzaren agerpen kopurua: 1

    ‘du’ ren aurreko ‘hartuko’ hitzaren agerpen kopurua: 1

    ‘du’ ren aurreko ‘ikertu’ hitzaren agerpen kopurua: 1

     

    Programaren egitura:

     

    #!/usr/bin/perl

    use strict;

    use warnings;

    use LWP::Simple;

     

    my ($bilagaia, $html,
    $zenb, $i, $weba, $atz, $aur, @hitzak, @aurhitz, @atzhitz, %Maiz1, %Maiz2);

     

    print (“nZein
    hitzen ingurua aztertu nahi duzu?n”);

    $bilagaia =
    <STDIN>;

    chomp $bilagaia;

     

    print (“nZenbateko tartean
    daudenak aztertu nahi dituzu?n”);

    $zenb = <STDIN>;

    chomp $zenb;

     

     

    print (“nZein web
    orritan aztertu nahi duzu?n”);

    $html = <STDIN>;

    chomp $html;

     

    $weba =
    get(“http://” . $html);

     

    @hitzak =
    split(/[,.s?!;]+/,$weba);

     

    for ( my $i = 0; $i <=
    $#hitzak; $i++) {

                # hitzak badu $bilagaia?

                if ($hitzak[$i] =~ /b$bilagaiab/) {

                            # Bistaratu aurreko eta hurrengo $zenb
    hitzekin batera

                            push (@aurhitz, $hitzak[($i-$zenb)])
    &&

                            push (@atzhitz, $hitzak[($i+$zenb)]) ;

                            }

    }

     

    # Honekin bi array, ustez
    egoki, sortu ditudala ikusi dut.

    # print “@aurhitz
    n”;

    # print
    “n,n”;

    # print “@atzhitz
    n”;

     

    # Orain, hitzak banaka
    jarri eta bakoitzaren maiztasuna atera nahi nuke:

     

    # $atz = 0;

    # $aur = 0;

     

    foreach $atz (@atzhitz) {

                            $Maiz1{$atz}++;

                            }

     

    foreach $aur (@aurhitz) {

                            $Maiz2{$aur}++;

                            }

     

     

    # Azkenik hemen zerrendak
    atera ditzan saiatu behar nuke

     

    print “nn Hemen,
    atzean dituen hitzen zerrenda ordenatua n eta maiztasunaren arabera antolatua
    nn”;

     

    foreach $atz
    (sort(keys(%Maiz1))) {

                            print “‘$bilagaia’ ren atzeko ‘$atz’
    hitzaren agerpen kopurua: $Maiz1{$atz}n”;

    }

     

    print “nn Hemen,
    aurrean dituen hitzen zerrenda ordenatua n eta maiztasunaren arabera antolatua
    nn”;

     

    foreach $aur
    (sort(keys(%Maiz2))) {

                            print “‘$bilagaia’ ren aurreko ‘$aur’
    hitzaren agerpen kopurua: $Maiz2{$aur}n”;

    }

Utzi erantzuna

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