• Publicidad

Contar la repetición de una palabra

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Contar la repetición de una palabra

Notapor vtaborda » 2007-02-16 06:49 @325

Hola amigos del Perl.
Hace un tiempo largo que no toco el lenguaje y tengo un problema que resolver.
Tengo que leer varios archivos y contar la cantidad de veces que se repite una palabra sobre una lista de palabras seleccionadas.
Creo tener resuelto el tema si hago lo siguiente:
- Leo el archivo y lo asigno por completo a una variable.
- Tomo la primera palabra. Cuento cuanta veces se repite.
- Grabo en otro archivo.
- Tomo la siguiente palabra y así...

El tema es que no encuentro la forma de CONTAR la cantidad de veces que se repite una cadena en otra.
¿Alguien tiene una pista?.

Muchas gracias.
vtaborda
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2007-02-16 06:42 @321

Publicidad

Notapor Perl user » 2007-02-16 07:30 @354

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my %contador;
$contador{ $palabra }++;
 
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor vtaborda » 2007-02-16 17:04 @753

Por ahí no se entendió, lo que necesito saber es saber la cantidad de veces que se repite la palabra en el archivo.
Necesito saber el número de veces.
Gracias
vtaborda
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2007-02-16 06:42 @321

Notapor Perl user » 2007-02-16 18:20 @805

¿Qué parte no entiendes o qué parte no te sirve?

¿Intentaste pensar un poco en qué te puede servir la solución que te dí?

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor kondenado » 2007-02-16 19:25 @851

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;

my $archivo = 'archivo';
open (FILE, $archivo) || die "$!\n";
my @content = <FILE>;
close(FILE);

my $i;
foreach (@content) {
             $i++ if ($_ =~ /palabra/);  #palabra que deseas buscar
}
print 'La palabra ha sido encontrada '.$i.' veces en '.$archivo;
print "\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Bueno es algo más largo que el anterior pero también sirve.
Última edición por kondenado el 2007-02-17 15:01 @667, editado 2 veces en total
Avatar de Usuario
kondenado
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2006-08-21 18:57 @831

Notapor kidd » 2007-02-16 20:22 @890

Hola vtaborda, bienvenido al foro de Perl en Español.

Es importante que tengas en consideración lo siguiente, nosotros estamos dispuesto a ayudarte en tus problemas, pero al final de cuenta son tus problemas, así que es mal visto cuando alguien pide que se le haga un script o que se dé la solución de un problema sin que nosotros veamos antes un verdadero esfuerzo de tu parte.

Por esta razón Perl User te dió pistas o guías que puedes seguir para que empieces a explorar diferentes posibilidades a partir de las cuales nosotros te podríamos dar una ayudada, pero al final de cuentas, nosotros ayudamos NO estamos para servir.

Sé que no es tu intención esa, pero como planteaste el problema así lo parece.

Aquí te dejo un ejemplo de un script que abre un archivo y hace el conteo de todas las palabras que hay en él:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use strict;
use warnings;

# Archivo que quieres parsear
my $archivo = 'tu_archivo.txt';

my %Palabras;

open my $FILE, '<', $archivo or die("No pude abrir el archivo: $!");

while (my $linea = <$FILE>) {

    chomp $linea;

    $Palabras{lc $_}++ for split /\s+/, $linea;

}

close $FILE;


#Ahora vemos el resultado del conteo

for my $palabra ( sort { $Palabras{$b} <=> $Palabras{$a} } keys %Palabras) {
    print $Palabras{ $palabra } . " - " . $palabra . "\n";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Deja te explico un poco lo que hace para que puedas empezar a modificarlo para que haga lo que necesitas.

Abre un archivo y lo lee línea por línea. Cada línea la divide por palabras (esta división es muy relativa, pues realmente divido por espacios pre-suponiendo que cada palabra está separada por espacio) usando la función split.

Usando el hash %Palabras se lleva el conteo de cada palabra que se va encontrando, no antes sin convertir todas las palabras en minúsculas usando la función lc para que sea lo mismo la palabra "Agua" que "agua".

Ya al final se muestra el resultado de todas las palabras encontradas ordenándolas por las que tienen más apariciones en el archivo.

Creo que esto te dá suficiente para empezar a crear el script que necesitas, también te recomiendo que cheques la sección de tutoriales donde podrás encontrar más información.


Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor explorer » 2007-02-17 13:51 @619

Habría que empezar por definir lo que es una palabra.

No vale con decir aquello que está separado por espacios, porque los signos de puntuación suelen estar al lado de las palabras.

Ejemplo: es la misma palabra esta, que esta. Pero si separamos esta línea por los espacios en blanco, serán dos palabras distintas (una tendrá una coma y la otra, un punto).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor explorer » 2007-02-17 15:29 @687

Este problema ya se ha comentado varias veces en este foro.
http://perldoc.perl.org/perlfaq6.html#H ... summary%3F
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron