Code Monkey home page Code Monkey logo

contexto's Introduction

ConTexto - Librería de procesamiento y análisis de textos

screenshot

PyPI version fury.io PyPI pyversions PyPI license Downloads GitHub forks

Descripción

La librería de procesamiento y análisis de texto, ConTexto, tiene como objetivo principal proporcionar herramientas que simplifiquen las tareas y proyectos que involucren procesamiento y análisis de texto. La librería fue desarrollada en el lenguaje de programación de Python y contiene un conjunto de funciones que permiten realizar transformaciones y análisis de textos de forma simple, utilizando diferentes técnicas para lectura y escritura de archivos de texto, incluyendo reconocimiento óptico de caracteres (OCR), limpieza de textos y remoción de palabras no deseadas para el análisis (stop words), traducción y corrección de textos, generación de nubes de palabras, cálculo de similitudes entre textos, entre otras.

La librería surge como solución a tres principales aspectos. En primer lugar, la necesidad de integrar todos los esfuerzos y desarrollos que ha hecho la Unidad de Científicos de Datos (UCD) del DNP, en proyectos relacionados con la analítica de texto; en segundo lugar, evitar reprocesos en la construcción de scripts para estas tareas, y finalmente, aumentar la cantidad de librerías enfocadas en el análisis de texto en español que existen actualmente.

Prerrequisitos

Antes de proceder con la instalación de ConTexto asegúrese de tener instalado (Estos dos paquetes son necesarios para utilizar el reconocimiento óptico de caracteres (OCR) de ConTexto):

  • Tesseract
  • Poppler v0.68.0

Para mayor información consultar la sección de instalación

Instalación

Se sugiere antes de la instalación crear un entorno virtual que permita aislar las librerías y evitar conflictos de versiones con el entorno de desarrollo base del computador. Se debe mencionar que se requiere hacer instalaciones adicionales para el correcto funcionamiento de algunos módulos de la librería. Para más información, consultar la sección de instalación en la página de documentación.

Para realizar la instalación por medio del gestor de paquetes pip utilizar los siguientes comandos:

python -m pip install --upgrade pip
pip install contexto

Para realizar la instalación por medio de Conda utilizar el siguiente comando:

pip install --extra-index-url https://pypi.org/simple/ contexto

Documentación

La librería cuenta con una documentación que detalla las funciones que la conforman, al igual que ejemplos de uso y demás información de interés relacionada con esta. Para acceder a la documentación, siga el siguiente enlace:

Documentación - ConTexto - Librería de procesamiento y análisis de textos.

Ejemplo

En esta sección nos enfocaremos en presentar unos cortos ejemplos de uso de algunas funciones de la librería teniendo dos enfoques en particular: la limpieza de textos y la visualización de textos. Para mayor información y detalle sobre ejemplos de estas y otras funciones de la librería, se puede consultar la sección de ejemplos de la documentación.

Ejemplo - Limpieza de textos

Para este ejemplo utilizaremos el siguiente texto de prueba.

texto_prueba = '''hola, esto es una prueba para verificar que la limpieza
sea hecha con precisión, empeño y calidad! Esperamos que esté todo de 10.

Desde Amazonas hasta la Guajira y san andrés, desde John y María hasta Ernesto,
esperamos       que todo funcione de manera correcta.'''

Se debe importar el módulo de limpieza.

from contexto.limpieza import *

La librería cuenta con varias funciones de limpieza como son limpieza_basica, limpieza_texto, remover_acentos, remover_palabras_cortas y otras.

  • La función limpieza_texto permite realizar una limpieza más completa del texto. La función permite:

    • Pasar todo el texto a minúsculas
    • Quitar signos de puntuación
    • Quitar stopwords (palabras y/o expresiones). Para esto, se pueden pasar directamente las listas de palabras y expresiones a quitar, o se puede pasar un archivo que contenga esta información. (configurable)
    • Quitar palabras de una longitud menor a n caracteres (configurable)
    • Quitar números (configurable)
    • Quitar acentos (configurable)
limpio_completo = limpieza_texto(texto_prueba, n_min=3, quitar_acentos=True, 
	lista_palabras = ['esto','sea', 'con', 'que', 'para', 'este', 'una'])

print(limpio_completo)
hola prueba verificar limpieza hecha precision empeno calidad esperamos todo desde amazonas hasta guajira san andres desde john maria hasta ernesto esperamos todo funcione manera correcta

Ejemplo - Visualización de textos

Para este ejemplo, se va a trabajar con el texto de la novela "Don Quijote de la Mancha", escrita por Miguel de Cervantes Saavedra. El texto completo de esta novela está en la carpeta de ejemplos/entrada del repositorio, y fue descargado desde la página del Proyecto Gutenberg, que tiene a su disposición miles de libros de forma gratuita.

Procedemos a importar los módulos necesarios.

from contexto.lectura import leer_texto
from contexto.limpieza import limpieza_texto, lista_stopwords, remover_stopwords
from contexto.exploracion import grafica_barchart_frecuencias
from contexto.exploracion import obtener_ngramas, par_nubes

La función leer_texto del módulo lectura es utilizada para extraer el texto del archivo que contiene la novela. Luego, se realiza una limpieza estándar del texto, para que esté mejor adecuado para su exploración. Para esto, se utilizan las funciones limpieza_texto y lista_stopwords, del módulo limpieza.

Finalmente, en el texto aparece en varias ocasiones la expresión "project gutenberg", el nombre del proyecto que pone a disposición la novela. Como esta información no está directamente relacionada al texto que nos interesa, se va a remover utilizando la función remover_stopwords.

  • Cargar y limpiar texto de prueba
ruta_cuento = 'entrada/cervantes_don_quijote.txt'

texto_prueba = leer_texto(ruta_cuento)
texto = limpieza_texto(texto_prueba, quitar_numeros=False, n_min=3, lista_palabras=lista_stopwords())
texto = remover_stopwords(texto, lista_expresiones=['project gutenberg'])

Una vez limpio el texto, procedemos a utilizar la función obtener_ngramas que permite encontrar n-gramas, o conjuntos de n palabras seguidas, donde n es un número entero mayor a cero. Por ejemplo, si n=1 o n=2, la función obtendrá las palabras o los bigramas del texto, respectivamente.Con esta información se puede obtener la frecuencia de cada n-grama, y así conocer cuáles son los más mencionados en el texto.

Esto puede ser graficado de varias maneras, como por ejemplo mediante nubes de palabras, en las cuales el tamaño de un término es proporcional a su frecuencia de aparición.

  • Obtener listas de palabras y bigramas más frecuentes
unigramas = obtener_ngramas(texto, 1)
bigramas = obtener_ngramas(texto, 2)

bigramas[98:105]
['ingenioso hidalgo',
 'hidalgo mancha',
 'mancha compuesto',
 'compuesto miguel',
 'miguel cervantes',
 'cervantes saavedra',
 'saavedra tasaron']
  • Graficar y guardar nubes de palabras y bigramas

Si se utiliza el parámetro "ubicacion_archivo", la imagen generada se guardará en la ubicación especificada.

La función par_nubes permite generar un par de nubes de palabras (una junto a otra).

par_nubes(texto, n1=1, n2=2, ubicacion_archivo='salida/nube_uni_bi.jpg')

screenshot

  • Gráficas de barras con las frecuencias

Los n-gramas más frecuentes también se pueden visualizar mediante gráficas más estándar como, por ejemplo, gráficos de barras que muestren los términos más frecuentes. La función grafica_barchart_frecuencias permite obtener estas gráficas.

grafica_barchart_frecuencias(texto, ubicacion_archivo='salida/barras_palabras.jpg', 
                             titulo='Frecuencias de palabras', dim_figura=(7,4))

screenshot

Control de cambios

Para ver todos los cambios en las versiones de ConTexto ver el archivo changelog

Contribuciones a ConTexto

Todas las contribuciones, reportes de errores, corrección de errores, las mejoras de la documentación y las ideas son bienvenidas.

Puede encontrar una descripción detallada de cómo contribuir en la Wiki de ConTexto

También lo invitamos a revisar el 📆 Tablero TODO de ConTexto, donde hay una serie de temas listados en los que el equipo UCD se encuentra trabajando.

Licencia MIT license

MIT License

La librería ConTexto - Librería de procesamiento y análisis de textos se encuentra publicada bajo la licencia MIT
Copyleft (c) 2020 Departamento Nacional de Planeación - DNP Colombia

Para mayor información puede consultar el archivo de Licencia

📞 Contacto

Para comunicarse con la Unidad de Científicos de Datos (UCD) de la Dirección de Desarrollo Digital (DDD) del DNP, lo puede hacer mediante el correo electrónico [email protected]

contexto's People

Contributors

baldesco avatar davidinsuasty avatar drambaut avatar jairoruizsaenz avatar pablomonhel avatar sergiomora03 avatar ucd-dnp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

contexto's Issues

Módulo de NER

Luego de finalizar el piloto de Named Entity Recognition (Issue #9), se debe formalizar el código, adaptando esta funcionalidad a la estructura de ConTexto y escribiendo la documentación necesaria.

  • Desarrollar módulo en Python que se integre de manera armoniosa a la librería
  • Documentar todas las clases, funciones, variables y demás código de manera adecuada
  • Escribir casos de ejemplo para probar el funcionamiento del módulo y mostrar cómo se utiliza

Opción para que las gráficas sean interactivas

Se desea probar si es posible tener la opción de realizar visualizaciones de textos más interactivas, que permitan hacer énfasis en una sola palabra o grupo de palabras, mostrar o quitar términos y contar con un zoom adaptivo, entre otras características. Para esto, se planea probar librerías alternativas a Matplotlib, como por ejemplo Plotly o Bokeh.

Mejora de estética en grafos de coocurrencia (estáticos)

Sintonizar la forma en la que el grosor de las líneas del grafo y el tamaño de los círculos varían de acuerdo a la matriz de coocurrencias de forma más estética e informativa, produciendo una mejor gráfica al final. También se debe buscar la forma de producir líneas curvas en el grafo resultante.

  • Mejora de estética grado (grosor y tamaño de elementos)
  • Posibilidad de líneas curvas en grafo
  • Posibilidad de que usuario pase una lista con los términos que desea visualizar en el grafo (probablemente, esta funcionalidad se deba incluir en la función que genera la matriz de coocurrencias)

Añadir opciones de personalización para nubes de palabras

Las siguientes acciones van encaminadas a dar más posibilidades para personalizar la estética de una nube de palabras.

  • Modificar función nube_palabras para permitir hacer nubes en diferentes formas, poder cambiar el color de fondo y poder dibujar el contorno de la forma de la nube, configurando el color y grosor de dicho contorno.

  • Hacer las modificaciones necesarias a la documentación de la función nube_palabras para que tenga en cuenta las adiciones realizadas al código.

  • Incluir ejemplo de uso de las nuevas características en los cuadernos de Jupyter y la página de documentación.

Pilotos de uso de técnicas de NLP

Desarrollar funciones y/o clases adicionales para aplicar métodos de Named Entity Recognition (NER) y Part of Speech (POS) a textos en diferentes idiomas. Desarrollar código que permita realizar pilotos y pruebas con estas funcionalidades; aún no tiene que ser el código final.

  • Piloto de NER
  • Piloto de POS

Añadir Portugués a Lenguajes Soportados

Hola,

Estoy utilizando esta librería para un proyecto! Creo que abstrae y unificamuchas funciones para procesamiento de texto, muchas gracias. En este proyecto, requiero soportar también el idioma portugués, por lo que sería muy bueno tenerlo dentro de los lenguajes soportados.

Un saludo.

Realizar pruebas automáticas de código

Realizar scripts que permitan ejecutar pruebas automáticas para validar el funcionamiento de los diferentes módulos de ConTexto ante diversos escenarios, incluyendo algunos casos extremos.

Implementar *lexical dispersion plot* en ConTexto

Añadir al módulo exploracion de ConTexto una función que permita realizar la gráfica conocida como lexical dispersion plot. La función debe permitir generar esta gráfica para un texto de entrada, y tener parámetros que permitan personalizar aspectos de la figura resultante.

Módulo de POS

Luego de finalizar el piloto de Part of Speech (Issue #9), se debe formalizar el código, adaptando esta funcionalidad a la estructura de ConTexto y escribiendo la documentación necesaria.

  • Desarrollar módulo en Python que se integre de manera armoniosa a la librería
  • Documentar todas las clases, funciones, variables y demás código de manera adecuada
  • Escribir casos de ejemplo para probar el funcionamiento del módulo y mostrar cómo se utiliza

Primeras pruebas con librería `transformers`

Instalar la librería transformers de huggingface y probar su funcionamiento sobre textos de diferentes idiomas para realizar tareas como:

  • Análisis de sentimiento

  • Resúmenes automáticos (summarization)

  • Traducción de textos

  • Question answering

  • Instalar librería

  • Definir procedimiento para descarga de un nuevo transformador al computador local (y su correspondiente manejo de errores)

  • Pruebas funcionales

codigo en español

no deberian soportar codigo en español. es mala practica y de mucho desagrado. intenten cambiar todos sus modulos y submodulos como debe ser.

Redactar y publicar guías para colaboración de comunidad

Elaboración y publicación de documentos para dar lineamientos a la comunidad de ConTexto que faciliten la interacción y colaboración.

  • Redactar reglas de comunidad
  • Revisar y publicar reglas de comunidad en Wiki del repositorio
  • Redactar lineamientos para reportar errores y realizar preguntas/sugerencias por medio de un nuevo issue
  • Revisar y publicar lineamientos para reportar errores y realizar preguntas/sugerencias por medio de un nuevo issue en Wiki del repositorio
  • Redactar guía y lineamientos para enviar colaboraciones
  • Revisar y publicar guía y lineamientos para enviar colaboraciones en Wiki del repositorio
  • Publicar los enlaces a estos recursos en partes estratégicas del repositorio de ConTexto.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.