Commit d1563097 authored by geobumac's avatar geobumac

Merge branch 'master' into gaspar

parents f3632a7e 07f2a28f
......@@ -4,7 +4,135 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# Examen Unidad 2"
"# Examen 2\n",
"\n",
"Responda a las siguentes preguntas. Tiene 24 horas para entregar la solución de todo el examen en formato de notebook, en su propia rama. Pasadas las 24 horas se descontará 1 punto por hora extra hasta un máximo de 5 horas.\n",
"\n",
"Los criterios para la evaluación de cada pregunta incluyen:\n",
"\n",
"* 80% de la puntuación si cumple cabalmente con la consigna y funciona;\n",
"* 20% de la puntuación si la solución cumple el paradigma orientado a objetos, la lógica es puntual, con buen estilo e incluye docstring."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## I. Matriz Documento-Término\n",
"\n",
"Una colección de $n$ documentos indexados por $m$ términos puede ser representada por una matriz $M_{[n x m]}$ conocida como matriz documento-término donde el valor de cada elemento $a_{ij}$ define la importancia del término $j$ en el documento $i$.\n",
"\n",
"La figura 1 muestra una matriz documento-término muy simple, donde cada columna representa un término en la colección, cada renglón un documento y cada celda o elemento de la matriz la ocurrencia del término en el documento. En ella podemos ver que el término 1 aparece en el documento 1 y 3, pero no en los otros dos documentos.\n",
"\n",
"\n",
" Término1 Término 2 Término 3\n",
" Documento1 1 0 0\n",
" Documento2 0 0 1\n",
" Documento3 1 1 1\n",
" Documento4 0 1 0\n",
"\n",
" Figura 1 – Matriz documento-termino simple.\n",
"\n",
"\n",
"### (4 puntos)\n",
"\n",
"* Defina la clase MatrizDT( ) cuyo constructor recibe una lista de documentos ([texto1, texto2, ...]) y tiene los siguientes métodos:\n",
"\n",
" * tf( ) que calcula una matriz documento-término donde cada celda $a_{ij}$ tiene el valor de la frecuencia de término : $ 1+ \\log Count(t_j, d_i) $ si $Count(t_j, d_i) > 0$; ó $0$ cuando el término $t_j$ no aparece en el documento $i$.\n",
"\n",
" * idf( ) que calcula una matriz documento-término donde cada celda $a_{ij}$ tiene el valor de la frecuencia inversa del término : $ \\log (\\frac{n}{df_t}) $ en donde $n$ es el número total de documentos y df_t es el número de textos en los cuales aparece el término $t$.\n",
"\n",
" * tf-idf( ) que calcula una matriz documento-término donde cada celda $a_{ij}$ tiene el producto de la frecuencia de término y de la frecuencia inversa del término. Es decir, el producto, por elemento, de las matrices anteriores.\n",
"\n",
"\n",
"\n",
"#### Observaciones\n",
"\n",
"* Utilice numpy y pandas para manipular los datos mediante estructuras de arregos y arreglos de arreglos;\n",
"\n",
"\n",
"* Utilice pandas para mostrar las matrices en el notebook;\n",
"\n",
"* No utilice modulos que generen directamente la matriz documento-término ni reutilice código que no haya sido programado por usted y que no sea capaz de explicar.\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## II. Nubes de palabras\n",
"\n",
"Una nube de palabras o nube de etiquetas es una representación visual de las palabras que conforman un documento o una colección de documentos, en donde el tamaño es mayor para las palabras que son más \"importantes\" según un criterio dado. Son muy útiles para visualizar las palabras clave del contenido o para visualizar las ideas principales de un tema. La figura 2 muestra un ejemplo de nube de palabras extraida de \"Don Quijote\" es el sguiente:\n",
"\n",
"\n",
"<img crossorigin=\"anonymous\" src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Nube_de_etiquetas_-_Don_Quijote_de_la_Mancha.png/320px-Nube_de_etiquetas_-_Don_Quijote_de_la_Mancha.png\" class=\"png mw-mmv-dialog-is-open\" width=\"245\" height=\"145\">\n",
"\n",
" Figura 2 – Nube de etiquetas para el primer capítulo de Don Quijote de la Mancha.\n",
"\n",
"\n",
"\n",
"### (4 puntos)\n",
"\n",
"* Defina la clase NubePalabras() cuyo constructor recibe un diccionario cuyas llaves son palabras y cuyos valores son de tipo numérico y representan la \"importancia de la palabras\" e incluya el método plot_cloud() para generar la visualización utilizando Matplotlib tanto para controlar los aspectos visuales de la nube de palabras como para generar la figura.\n",
"\n",
"* Defina el método store_cloud('/algun/nombre/archivo.jpg') para guardar la figura en un archivo .jpg.\n",
"\n",
"* Modifique el constructor para aceptar un argumento opcional llamado \"stopwords\" que es una lista de palabras que no deben considerarse para la visuación. Si \"stopwords\" no es proporcionado al constructor, utilice por defaul una lista con las preposiciones y los verbos más comunes en español.\n",
"\n",
"\n",
"#### Observaciones\n",
"\n",
"* Las palabras deben de mostrarse en horizontal;\n",
"\n",
"* el tamaño de la letra debe refleja la importancia;\n",
"\n",
"* La disposición de las palabras puede se aleatoria pero las palabras más importantes deberían ocupar lugares centrales de la figura resultante;\n",
"\n",
"* El color de las palabras puede se aleatorio pero se aprecia una paleta de colores que se vean bien juntos;\n",
"\n",
"* El tamaño de la figura resultante debe ser apropiado para un monitor promedio, ni muy grande ni muy pequeño;\n",
"\n",
"* No utilice modulos de nubes de palabras ni reutilice código que no haya sido programado por usted y que no sea capaz de explicar.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## III. La ley de Zipf\n",
"\n",
"La ley de Zipf establece que la frecuencia de una palabra (para casi todos los idiomas) es inversamente proporcional a su posición $r$ en un ranking estadístico. De hecho para el idioma inglés se estableció que:\n",
"\n",
"<img src=\"http://mathworld.wolfram.com/images/equations/ZipfsLaw/NumberedEquation1.gif\" class=\"numberedequation\" width=\"116\" height=\"37\" border=\"0\" alt=\" P(r) approx 1/(rln(1.78R)), \">\n",
"\n",
"\n",
"donde $R$ es el número de palabras distintas.\n",
"\n",
"\n",
"### (2 puntos)\n",
"\n",
"Utilice los datos proporcionados en el repositorio para generar una distribución de probabilidad de Zipf utilizando $ln(rank)$ como la variable aleatoria ($xk$) y el $ln$(frecuency) como la distribución asociada a la variable ($pk$).\n",
"\n",
"* Datos\n",
"\n",
"./data/named_entity_recognition_sp_MX_locations.JSON\n",
"\n",
"\n",
"* graficar la función de densidad de probabilidades\n",
"* mostrar con evidencia experimental, con ayuda de scipy.stats, si el coeficiente $1.78R$ aplica también para español, y en caso de que no sea así, diga cuál es el valor del coeficiente correspondiente para español?\n",
"\n",
"\n",
"#### Observaciones\n",
"\n",
"* Báse su respuesta en el ejemplo de la distribución custom (rv_histogram) visto en clase;\n",
"* Ignore las etiquetas ``<START:location>`` y ``<END>`` para la generación de la distribución.\n",
"\n",
"\n",
"#### Referencias:\n",
"\n",
"* https://es.wikipedia.org/wiki/Ley_de_Zipf\n",
"* http://mathworld.wolfram.com/ZipfsLaw.html"
]
},
{
......@@ -31,7 +159,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.8rc1"
"version": "3.7.1"
}
},
"nbformat": 4,
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment