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
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”;
}