Soy un novato en Perl y para uno de los deberes que se me ocurrió una solución como esta:¿Cómo se puede hacer esto en forma más Perl
#wordcount.pl FILE
#
#if no filename is given, print help and exit
if (length($ARGV[0]) < 1)
{
print "Usage is : words.pl word filename\n";
exit;
}
my $file = $ARGV[0]; #filename given in commandline
open(FILE, $file); #open the mentioned filename
while(<FILE>) #continue reading until the file ends
{
chomp;
tr/A-Z/a-z/; #convert all upper case words to lower case
tr/.,:;!?"(){}//d; #remove some common punctuation symbols
#We are creating a hash with the word as the key.
#Each time a word is encountered, its hash is incremented by 1.
#If the count for a word is 1, it is a new distinct word.
#We keep track of the number of words parsed so far.
#We also keep track of the no. of words of a particular length.
foreach $wd (split)
{
$count{$wd}++;
if ($count{$wd} == 1)
{
$dcount++;
}
$wcount++;
$lcount{length($wd)}++;
}
}
#To print the distinct words and their frequency,
#we iterate over the hash containing the words and their count.
print "\nThe words and their frequency in the text is:\n";
foreach $w (sort keys%count)
{
print "$w : $count{$w}\n";
}
#For the word length and frequency we use the word length hash
print "The word length and frequency in the given text is:\n";
foreach $w (sort keys%lcount)
{
print "$w : $lcount{$w}\n";
}
print "There are $wcount words in the file.\n";
print "There are $dcount distinct words in the file.\n";
$ttratio = ($dcount/$wcount)*100; #Calculating the type-token ratio.
print "The type-token ratio of the file is $ttratio.\n";
He incluido el comentario de mencionar lo que hace. De hecho, tengo que encontrar el conteo de palabras del archivo de texto dado. La salida del programa anterior se verá así:
The words and their frequency in the text is:
1949 : 1
a : 1
adopt : 1
all : 2
among : 1
and : 8
assembly : 1
assuring : 1
belief : 1
citizens : 1
constituent : 1
constitute : 1
.
.
.
The word length and frequency in the given text is:
1 : 1
10 : 5
11 : 2
12 : 2
2 : 15
3 : 18
There are 85 words in the file.
There are 61 distinct words in the file.
The type-token ratio of the file is 71.7647058823529.
A pesar de que con la ayuda de Google puedo capaz de encontrar la solución para mi tarea. Pero, sin embargo, creo que habrá un código más pequeño y conciso que utilizará el poder real de Perl. ¿Alguien puede darme una solución en Perl con muchas menos líneas de código?
De acuerdo con su estado de uso, el nombre del archivo es el segundo argumento. Eso contradice tu código. –
Una sugerencia es: no use abierta explícitamente. Solo usa <>. Perl interpretará cada argumento en ARGV como un nombre de archivo, y <> lo leerá. –
@WilliamPursell: el nombre de archivo Sí es el segundo argumento ... – sriram