Materia
Ejercicios


Tarea 3: WhatsAppy

Objetivos de aprendizaje

Después de resolver la tarea 3, usted será capaz de:

  • Manipular archivos de texto con una estructura pre-definida de datos,
  • Realizar procesamiento de texto sobre datos con un formato específico,
  • Guardar y leer datos en un archivo.
  • Conocer código html para el desarrollo de una página web,

Enunciado

Los usuarios de WhatsApp generalmente tienen la curiosidad de los datos estadísticos que se pueden obtener de sus conversaciones, por ejemplo saber quien manda más mensajes o que palabra es la que más usan. Para resolver estas y otras incógnitas llega WhatsAppy, un programa Web al cual deberán implementar las siguientes funcionalidades:

  • Listar participantes de un chat de grupo.
  • Top-N palabras de las palabras más usadas en un chat de grupo.
  • Mensajes por participante, indicando la cantidad de mensajes enviados por cada participante en un chat de grupo.
  • Censurar una palabra en un chat de grupo.
  • Filtrar a un participante de un chat de grupo.

Para permitir que el sitio web cumpla con las funciones anteriores, se les entregará un conjunto de archivos que les proveerá de algunas funciones ya implementadas y otras que ustedes deben implementar con su equipo para el correcto funcionamiento.

Archivos

Los archivos que se le entregarán los puede descargar acá. A continuación se mencionan los distintos archivos y la función que cumplen dentro del sistema.

  • main.py: archivo principal del sistema, es el encargado de levantar el servidor que permite ver el sitio.
  • funciones.py: archivo que contiene las funciones que deberán implementar junto a su equipo de trabajo, para el correcto funcionamiento del sitio.
  • definiciones.py: archivo que contiene algunas definiciones de nombres e íconos que utiliza el sitio.
  • complemento.py: archivo contiene una función que permite decodificar un archivo chat de WhatsApp.
  • chat.txt: archivo de chat de WhatsApp base para que pruebe sus funcionalidades.

Además pueden obtener su propio archivo de chat de WhatsApp siguiendo los siguientes pasos en su celular:

  1. Ir a una conversación de whatsapp
  2. Opciones
  3. Enviar por Email
  4. No adjuntar multimedia
  5. Esperar unos minutos (dependiendo del largo de la conversación)
  6. Enviar al correo y obtener el archivo .txt
  7. Mover el archivo a la carpeta donde ubica el main.py (si el nombre tiene emoticones, es mejor cambiar el nombre)

Funcionamiento

Una vez descargado el archivo para comenzar la tarea, descomprímalo y ejecute el archivo main.py. Se abrirá una ventana como la que se muestra a continuación:

# Iniciando WhatsAppy en http://localhost:8080

Este mensaje indica que el servidor web que contiene el sitio se está ejecutando de manera local. Abra su navegador preferido (chrome, internet explorer, safari u otro) y escriba la dirección http://localhost:8080/, se debería mostrar la página Web principal.

El sitio se divide en las siguientes secciones:

  • Página Principal: se muestra al escribir la dirección http://localhost:8080. Esta página da la bienvenida al usuario y presenta el menú principal del sitio.
../../_images/2015-2_Home.png ../../_images/2015-2_topn.png
  • Por Mensajes: en esta página se muestran los usuarios en el chat con la cantidad de mensajes que ha enviado cada uno.
  • Censurar: en esta sección es posible ingresar la palabra a censurar.
../../_images/2015-2_censurar.png
  • Filtrar: en esta sección se indica el usuario a filtrar.
../../_images/2015-2_filtrar.png

El sitio cuenta con una barra de navegación que permite entrar a cada uno de los sitios mostrados anteriormente.

Representación

Cada línea de un archivo de chat de WhatsApp puede ser de dos tipos. Que sea el envió de un mensaje por parte de un integrante, donde la estructura es:

# dia/mes/año, hr:mm - usuario: mensaje

O puede ser una acción del tipo participante abandona grupo, cambiar foto de grupo, cambiar nombre de grupo, etc. y la estructura es:

# dia/mes/año, hr:mm - usuario acción_realizada

Qué hay que implementar

Las funciones que usted debe implementar con su equipo de trabajo son las siguientes:

  • listar_integrantes(nomarch): esta función recibe como parámetro el nombre del archivo de chat (sin .txt) y debe retornar un conjunto con los participantes del grupo.

  • topN_palabras(nomarch, N): esta función recibe como parámetro el nombre del archivo de chat (sin .txt) y debe retornar una lista ordenada de mayor a menor (según cantidad de apariciones) de las N palabras más usadas en el grupo. Esta lista debe estar compuesta por tuplas que contienen:

    (palabra, cant. de apariciones, prob. de encontrar la palabra en un mensaje)

    La probabilidad de encontrar una palabra en un mensaje está dado por el cuociente entre la cantidad de mensajes en los que aparece la palabra y la cantidad total de mensajes en el chat.

  • listar_por_mensaje(nomarch): esta función recibe como parámetro el nombre del archivo chat (sin .txt) y debe retornar una lista con tuplas, donde cada tupla está compuesta por el nombre de un participante y el número de mensajes que ha escrito dicho participante en el grupo. La lista debe estar ordenada por número de mensajes.

  • chat_censurar(nomarch, palabra): esta función debe modificar el archivo de chat que recibe, censurando todas las apariciones de palabra, reemplazando estas por un caracter de censura (ej: #) según el largo de la palabra. Por ejemplo si se reemplaza la palabra tarea en la frase hice la tarea de progra, debería quedar como hice la ##### de progra.

  • chat_filtrar(nomarch, usuario): esta función, a partir del archivo chat que recibe, debe crear un nuevo archivo quitando las intervenciones de usuario del chat. El nuevo archivo debe ser nombrado siguiendo las siguientes reglas, si nomarch es MiGrupo_OK y se elimina al participante Esteban, el nuevo archivo debe llamarse MiGrupo_OK_sin_Esteban.txt.

Consideraciones

  • En la página principal se debe poner el nombre del archivo chat sin .txt para que sea procesado y limpiado de carácteres inválidos.
  • Filtrar participantes sólo funcionará si la función de listar participantes está implementada correctamente.
  • Se recomienda eliminar parte de los chats SPAM o mensaje cadena, estas tienen saltos de línea que no son limpiados y pueden alternar el funcionamiento correcto del programa.
  • Puede implementar otras funciones, además de las que se solicitan para pasos intermedios que le permitan obtener la información solicitada en las funciones.
  • Puede crear archivos intermedios que le permitan realizar lo solicitado en el enunciado (archivos temporales). No debe preocuparse de borrarlos, pero puede hacerlo si gusta.

Entrega

La tarea debe ser resuelta en equipos de dos o tres personas.

Sólo uno de los integrantes del equipo debe subir la tarea en la sección Tareas de la plataforma Aula, en el ramo de Programación IWI131.

Se debe entregar un archivo comprimido (.zip) que debe contener todos los archivos para hacer funcionar la tarea con el nombre tarea-3-RUT.zip, reemplazando RUT con el RUT del integrante que subirá la tarea. Sólo debe ir la parte del RUT hasta antes de la raya. Por ejemplo: tarea-3-18000123.zip.

Al principio del archivo funciones.py se debe poner un comentario indicando los RUT de los integrantes del equipo como en el siguiente ejemplo:

# Integrantes:
# 18000123-0 Perico Los Palotes
# 18000456-7 Fulanita de Tal
# 18000890-k Federico Santa Maria

No se puede subir ningún archivo adicional.

Revise la fecha de entrega en Aula. Evite dejar para última hora la entrega de la tarea. Cerca del plazo final, la plataforma seguramente estará sobrecargada.

Las tareas atrasadas (máximo un día de retraso) tendrán el descuento especificado en la rúbrica de corrección. NO se recibirán tareas por por correo electrónico.

Los equipos de trabajo pueden ser los mismos de la tarea anterior, pero recuerde que deben ser de 2 ó 3 personas.

Políticas de copia

Usted puede discutir la tarea con compañeros de otros grupos, pero bajo ningún motivo puede compartir o copiar el código de su tarea. Cada equipo debe escribir su propio código.

Las políticas de copia de la asignatura rigen para la tarea.

En caso de tener problemas con el desarrollo de la tarea, asista a las ayudantías o consulte en el grupo de facebook.