Foros del Web » Programación para mayores de 30 ;) » Programación General »

Ejercicio en perl,ayudita

Estas en el tema de Ejercicio en perl,ayudita en el foro de Programación General en Foros del Web. Hola amig@s: Resulta que me han mandado un ejercicio para programarlo en Perl y no sé cómo empezar,no digo que me lo hagáis(hombre,si alguien sabe ...
  #1 (permalink)  
Antiguo 21/11/2004, 12:56
 
Fecha de Ingreso: octubre-2003
Mensajes: 146
Antigüedad: 20 años, 6 meses
Puntos: 1
Ejercicio en perl,ayudita

Hola amig@s:

Resulta que me han mandado un ejercicio para programarlo en Perl y no sé cómo empezar,no digo que me lo hagáis(hombre,si alguien sabe cómo hacerlo pues mejor que mejor) pero si os pido que me digáis si alguien lo sabe cómo plantearlo y que funciones emplear y demás,sé algo de perl pero aún me falta mucho.El enunciado es el que sigue:

Localizador de concordancias

Para los filólogos resulta especialmente interesante estudiar las distribuciones de determinadas palabras en un texto. Para ello es muy útil el uso de un localizador de concordancias. Un localizador de concordancias es un programa que a partir de un filtro de búsqueda, localiza todas las palabras que encajan con el filtro en un texto y las muestra junto a su contexto.

Desarrollar un programa en perl que actue como un localizador de concordancias. Este programa recibirá los siguiente parámetros:
concordancias filtro texto

Donde texto será el nombre de un fichero de texto analizado morfológicamente. Esto es, un texto donde aparece en cada línea una palabra seguida de su análisis morfológico. Puede que aparezca más de un análisis para la misma palabra. Ejemplo:

El [ArtMasSg]
niño [NomMasSg]
salta [VerTerSg]

El filtro consistirá en un fichero con varias línea. Una por cada condición buscada. Este fichero tendrá el siguiente formato por cada línea:
palabra atributo valor

Donde:
palabra = Número que indica la palabra a la que hace referencia el filtro en relación a la palabra buscada. Así, por ejemplo, -1 hace referencia a la palabra anterior, 2 hace referencia a la segunda palabra a partir de la buscada y 0 hace referencia a la palabra buscada.
atributo = Atributo de la palabra que se quiere restringir en el filtro. Puede ser: Palabra, Tipo, Numero, Persona, Género.
valor = Valor que debe tener el atributo de las palabras buscadas.

El filtro buscará todas las palabras que cumplan todas las condiciones del filtro y mostrará por pantalla un listado alfabético de las mismas. En este listado debe aparecer una línea por cada palabra junto al número de apariciones. Seguida de una línea por cada aparición de la palabra donde se la muestre junto a su contexto. El contexto vendrá determinado por las posiciones a las que se haga referencia en el filtro. Esto es, si el filtro hace referencia a una palabra 3 posiciones por delante, entonces el listado deberá mostrar las tres palabras anteriores. Ejemplos:

niño 1
El niño salta


Gracias desde ya.Un saludo
__________________
·۰•●Pi®®ili●•۰· Lo esencial es invisible a los ojos
  #2 (permalink)  
Antiguo 22/11/2004, 07:27
 
Fecha de Ingreso: octubre-2003
Mensajes: 146
Antigüedad: 20 años, 6 meses
Puntos: 1
¿Nadie puede echarme una ayudita?¿Ni siquiera el moderador de este canal?

__________________
·۰•●Pi®®ili●•۰· Lo esencial es invisible a los ojos
  #3 (permalink)  
Antiguo 22/11/2004, 08:12
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
Hola, antes que nada aunque no lo creas no hay moderador en estos foros, yo soy el que más o menos hago las funciones del mismo y si bien ayer vi tu pregunta, preferí responderte hoy desde la oficina, que tengo banda ancha...


Lo primero que debes hacer es empaparte un poco sobre perl...En www.perlenespanol.com tienes una serie de tutoriales muy copados, te servirán seguro:

primeros pasos
http://perlenespanol.baboonsoftware....ut/000080.html
http://perlenespanol.baboonsoftware....ut/000088.html

Entrada de datos:
http://perlenespanol.baboonsoftware....ut/000032.html

maejo de archivos y arrays que necesitas para hacer el trabajo tienes mucha info en el FAQ de este foro

http://www.forosdelweb.com/f14/indice-tematico-perl-cgi-221142/

Ahora en este momento no puedo darte más ayuda que esta, pero mañana te tiro un script como para que vallas viendo como funciona...Mientras tanto andá mirando todo esto...

Saludos, y disculpa que ayer no te respondí, pero la conexión de mi casa es muy mala, y hoy para colmo tengo un parcial en la facultad así que no tengo mucho tiempo para responderte...

Saludos
PD: Es horrible que este foro no tenga moderador, si quieres quéjate en el foro de administración...
__________________
Esteban Quintana
  #4 (permalink)  
Antiguo 22/11/2004, 17:11
 
Fecha de Ingreso: octubre-2003
Mensajes: 146
Antigüedad: 20 años, 6 meses
Puntos: 1
Muchas gracias monoswin por tu ayuda altruista.Decirte que me estoy mirando cosillas de arrays y demas pero a ver si pudieras echarme una manecilla para plantear el ejercicio pq ando un poco perdido.Mirare los enlaces que me has dicho Gracias de nuevo compañero. Un saludo
__________________
·۰•●Pi®®ili●•۰· Lo esencial es invisible a los ojos
  #5 (permalink)  
Antiguo 23/11/2004, 05:25
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
Bueno, empecemos....Empecemos iniciando el script y entrando los datos...
Código:
#!/usr/bin/perl

#Flujo del script
my %input_data = &input_data(); 



#Funciones del script
sub input_data {

        my (@pairs,$buffer,$pair,$name,$value,%input_data);

        if ($ENV{'REQUEST_METHOD'} eq 'GET') {

                @pairs = split(/&/, $ENV{'QUERY_STRING'});

        }elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {

                read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
                @pairs = split(/&/, $buffer);

        }else {

                &error('leer','datos');

        }

        foreach $pair (@pairs) {
                ($name, $value) = split(/=/, $pair);

                $name =~ tr/+/ /;
                $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
                $name =~ tr/\0//d;

                $value =~ tr/+/ /;
                $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
                $value =~ tr/\0//d;
                $value =~ s/\n//g;

                $input_data{$name} = $value;
        }
        return(%input_data);
}
Bien, ahora tenemos todos los datos de entrada en un %hash para usarlo de la manera $input_data{'nombre'} eso colocará el valor que tenga el campo de formulario llamado nombre. con lo cual tenemos tres variables importantes pasadas por parámetros
$input_data{'concordancias'} $input_data{'filtro'} $input_data{'texto'}

Ahora bien dentro del flujo del script tenemos que abrir el archivo que nos pasaron por parámetro en $input_data{'texto'}

Código:
#Flujo del script
my %input_data = &input_data(); 

open (DATABASE, "<$input_data{'texto'}");
@registros = <DATABASE>;
close (DATABASE);
Ahora tenemos todos las líneas del archivo de texto, cada una en un elemento distinto del array, o sea que la línea número uno es $regitros[0], la línea número 2 es $registros[1] y así...Esto lo usas para ver la ubicación de la palabra en el texto...con

$numero_elementos = @registros;

tomamos el número de elementos que tiene el array con lo cual puedes hacer un for que valla desde 0 hasta $numero_elementos y vas evaluando el array y ya tenés ahí el número de ubicación...

Bueno, espero que te sirva...
__________________
Esteban Quintana
  #6 (permalink)  
Antiguo 23/11/2004, 06:22
 
Fecha de Ingreso: octubre-2003
Mensajes: 146
Antigüedad: 20 años, 6 meses
Puntos: 1
Hola monoswin,gracias por tu respuesta.He estado mirando tu script y te comento:

Los datos de entrada no se hacen a través de un formulario,sino que se hace directamente en el shell de unix,es una llamada a un script concordancias que le pasamos un fichero filtro que debe de estar creado a mano y otro fichero texto que también debe de estar creado,es decir,hay que suponer que el formato de los ficheros que le pasamos ya están como dice el enunciado.

En clase hemos puesto énfasis en expresiones regulares y por ahí pueden estar los tiros pero lo que pasa es que no entiendo el enunciado correctamente,sobre todo la parte del filtro,¿tú la entiendes?..Supongo que será más fácil de lo que nos imaginamos.Este script no tiene nada que ver con internet,como estamos ahora viendo en clase el sistema operativo unix pues el profesor nos mando este ejercicio para que lo entregáramos este viernes.La verdad es que con los conocimientos no entiendo del todo tú código,no sé,lo mismo quitando la parte que pone GET,POST esté casi listo.A ver que me dices.Espero tu respuesta.Un saludo y gracias por todo
__________________
·۰•●Pi®®ili●•۰· Lo esencial es invisible a los ojos
  #7 (permalink)  
Antiguo 23/11/2004, 08:07
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
mira, yo tampoco entiendo mucho el enunciado, sobretodo como hay que hacer las búsquedas...Lo de expresioner regulares te va a servir para realizar las búsquedas, cuando tengas todo cargado en variables, ahí vas a usar una expresión regular para ver si tu patrón de búsqueda está en la línea que tienes...

Para aprender más sobre expresiones regulares visitá

http://perlenespanol.baboonsoftware....ut/000072.html
http://perlenespanol.baboonsoftware....ut/000074.html

Con lo de la shell de unix me parece que los datos entran de todas maneras como si fuera get, pero no estoy seguro, la verdad es que nunca la usé...

Saludos
__________________
Esteban Quintana
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:50.