G.Bordel >Docencia >TAP Técnicas Actuales de Programación (curso 2010-2011)
desprotegido Intro. desprotegido Temario desprotegido Calendario desprotegido RPF desprotegido Recursos protegido Práctica protegido Gest. Alum.

Ejercicios posteriores al apartado 9.4
Creación de nuevas clases de E/S

N-Gramas

Este ejercicio se va a dar resuelto. Se propone al alumno que piense previamente en cual sería el mejor modo de solucionarlo y a continuación se muestran tres versiones que se van aproximando a una solución "elegante" basada en la extensión de clases de entrada-salida.

Enunciado: Se trata de obtener listados de cadenas de palabras extraidas de un texto con su frecuencia de aparición. Por ejemplo, para longitud=1, se tratara de una lista de todas las palabras en el texto con la cuenta del número de veces que aparece asociada; para longitud=2, la lista es de pares de palabras con sus frecuencias; y así sucesivamente.

Texto L=1 L=2 L=3
Llegó con tres heridas: 
la del amor, 
la de la muerte, 
la de la vida. 
Llegó con tres heridas: 
la del amor, 
la de la muerte, 
la de la vida. 
Llegó con tres heridas: 
la del amor, 
la de la muerte, 
la del amor. 
Llegó con tres heridas: 
la del amor, 
la de la muerte, 
la del amor. 
Con tres heridas viene: 
la de la vida, 
la del amor, 
la de la muerte. 
Con tres heridas viene: 
la de la vida, 
la del amor, 
la de la muerte. 
Con tres heridas viene: 
la de la vida, 
la de la muerte, 
la del amor. 
Con tres heridas yo: 
la de la vida, 
la de la muerte, 
la del amor. 
Con tres heridas yo: 
la de la vida, 
la de la muerte, 
la del amor.
43      la
16      de
11      amor
11      del
9       con
9       heridas
9       muerte
9       tres
7       vida
4       llegó
3       viene
2       yo
16      de la
16      la de
11      del amor
11      la del
9       con tres
9       la muerte
9       tres heridas
7       la vida
7       muerte la
6       amor la
5       vida la
4       heridas la
4       llegó con
3       amor con
3       heridas viene
3       viene la
2       heridas yo
2       muerte con
2       vida llegó
2       yo la
1       amor llegó
16      la de la
11      la del amor
9       con tres heridas
9       de la muerte
7       de la vida
7       la muerte la
6       amor la de
6       del amor la
5       la vida la
5       muerte la del
4       heridas la del
4       llegó con tres
4       tres heridas la
3       amor con tres
3       del amor con
3       heridas viene la
3       tres heridas viene
3       vida la de
3       viene la de
2       heridas yo la
2       la muerte con
2       la vida llegó
2       muerte con tres
2       muerte la de
2       tres heridas yo
2       vida la del
2       vida llegó con
2       yo la de
1       amor llegó con
1       del amor llegó

Como se trata de leer siempre de palabra en palabra, o cadenas de ellas, es razonable que esta capacidad nos venga dada por una clase de I/O específica.

NOTA: Este tipo de datos (denominados n-gramas, donde la n representa la longitud de la cadena -lo que hasta ahora hemos enominado como L-) son los más utilizados en sistemas de tratamiento automático de textos (escritos o hablados) para capturar la sintáxis y buena parte de la semántica. Ya Shannon los utilizó como ejemplos de la estructura estadística del lenguaje en su artículo "A Mathematical Theory of Communication"


Una variante de la tercera solución se aplica en el siguiente Applet:
Podeis introducir el texto que deseeis. Por si no teneis nada a mano os proporciono algunos:

Plataforma de soporte a curso y contenidos (c) German Bordel 2005.