<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
Step1:  Mineria de Texto
Una brevísima introducción
Minería de Texto
Step2:  Visite https
Step3:  Conceptos Fundamentales de Mineria de Texto
<br/>
<dl>
  <dt>Vocabulario</dt>
  <dd>Conjunto de todos los tokens presentes en un _corpus_</dd>
  <dt>n-gram</dt>
  <dd>Secuencia continua de una o más partes de un documento, tipicamente tokens</dd>
</dl>
Step4:  Conceptos Fundamentales de Mineria de Texto
<br/>
<dl>
  <dt>Stopwords</dt>
  <dd>Palabras en un idioma particular que pueden eliminarse de los documentos durante preprocesamiento (palabras muy comunes, preposiciones, etc.)</dd>
  <dt>Stemming</dt>
  <dd>Proceso de extracción y sustitución de palabras por su _"raíz"_</dd>
</dl>
<ASSISTANT_TASK:>
Python Code:
# Funcion para quitar todo el texto que este entre parentesis, 
# lo que no sea letras y sustituir series de espacios en blanco por uno solo
def cleanup_str(raw):
    rs = re.sub("\\(.*?\\)|[^a-zA-Z\\s]"," ",raw)
    rs = re.sub("\\s+"," ",rs).strip().lower()
    return rs
my_str = 
Some people, when confronted with a problem, think 
“I know, I'll use regular expressions.”   Now they have two problems.
    -- Jamie Zawinsk (Usenet) 1997   o fue 1999??
print(cleanup_str(my_str))
Explanation: Mineria de Texto
Una brevísima introducción
Minería de Texto: una brevísima introducción
Qué es?
Y qué se hace con eso?
Qué no es?
Más o menos, cómo funciona?
Minería de Texto: una brevísima introducción
Temás prácticos:
Fuentes de texto
Datos estructurados, semi-estructurados y no estructurados
Mojibake!
RegEx: Cómo resolver un problema con otro problema
Minería de Texto: una brevísima introducción
Conceptos fundamentales
Representación del texto para análisis
bag of words
tf-idf
Similaridad entre documentos
Qué es Minería de Texto?
<br/><center><b>Destilar conocimiento a partir del texto</b></center>
Desde el punto de vista de el analisis de datos, el texto es un desorden. Las técnicas de analisis desde la más sencilla hasta la más avanzada esperan trabajar con datos de entrada con formato bien definido y fijo.
La minería de texto es la colección de métodos, algoritmos y prácticas utilizadas para ordenar este desorden y poder realizar análisis sobre grandes cuerpos de texto.
Y qué se hace con eso?
Búsqueda (Information Retrieval)
Clasificación de texto (SPAM! SPAM!)
Modelado de tópicos (temas)
Clustering
Analisis de sentimiento
etc... etc... etc...
Qué no es Minería de Texto?
Procesamiento de Lenguaje Natural o Natural Language Processing es un área de las ciencas computacionales que se ocupa de la interacción entre las computadoras y el lenguaje humano (natural).
Text Mining depende de muchas de las herramientas de NLP, de hecho en los ejemplos estaremos usando la librería NLTK - Natural Language ToolKit. Dos ejemplos famosos de NLP son: chatbots y Siri
Más o menos, cómo funciona?
<div align='center'>
    <img src="../images/text_mining_workflow.png" width="640px"/>
</div>
Temas prácticos - Fuentes de texto
Redes sociales (tweets, posts)
Articulos, libros, periódicos
Bases de datos
...
Temas Prácticos - Tipos de datos como fuentes de texto
<br/>
<div align='center'>
    <img src="../images/semi_un_structured_data.png" width="640px"/>
</div>
Temas Prácticos - Codificación de caracteres (encodings, encodings)
La codificación de caracteres determina cómo se convierten los bits en caracteres legibles y viceversa.
<div align='center'>
    <img src="../images/encoding.png" width="640px"/>
</div>
Se hace vital conocer la codificación usada durante la creación de un documento para poder incluirlo en un proceso de minería de texto.
Lamentablemente, no siempre se sabe esto. Pero, se puede adivinar con mucho exito y se puede convertir de una codificación a otra.
Temas Prácticos - Mojibakeeeee???
<br/>
<div align='center'>
    <img src="../images/mojibake1.gif" width="640px"/>
</div>
<br/>
<div align='center'>
    <img src="../images/mojibake2.gif" width="640px"/>
</div>
Esto le puede pasar a usted si procesa texto con la codificación de caracteres (character encoding) equivocada:
<br/>
<div align='center'>
    <img src="../images/Mojibakevector.png" width="800px"/>
</div>
Cómo salgo de un lío mojibake?
StackOverflow al rescate:
https://stackoverflow.com/questions/64860/best-way-to-convert-text-files-between-character-sets. En resumen: herramientas de línea de comando (*nix y Windows)
También su librería de R/Python para la manipulación de datos (tidyverse/Pandas) le permite especificar la codificación tanto de lectura como de escritura.
Si algún día se ve en la necesidad de adivinar, empiece por aquí:
https://readr.tidyverse.org/reference/encoding.html
Temas Prácticos - RegEx
Cómo resolver un problema con otro problema
En esencia las expresiones regulares permiten:
* Encontrar instancias de un término
* ...Aún cuando este escrito de formas ligeramente diferentes cada vez
* Convertirlo en otra cosa
* Convertir frases enteras en otras
* Hacer cambios a un documento de una sola vez
* ... lograr que estos cambios sean consistente y repetibles a otros documentos
Temas Prácticos - RegEx: Ejemplo
End of explanation
nltk.word_tokenize("conceptos fundamentales de mineria de texto")
Explanation: Visite https://regexr.com/ para aprender y practicar. Pero, recuerde:
Las expresiones regulares son una herramienta extremadamente poderosa, uselas con moderación y cuidado
Conceptos Fundamentales de Mineria de Texto
<br/>
<dl>
  <dt>Documento</dt>
  <dd>Unidad mínima de texto sobre la cual se quiere realizar analisis, inferencias y responder preguntas</dd>
  <dt>Corpus</dt>
  <dd>Conjunto de documentos que será minado (piense _training data_)</dd>
</dl>
Conceptos Fundamentales de Mineria de Texto
<br/>
<dl>
  <dt>Token</dt>
  <dd>Serie de caracteres de texto con significado propio, resultante de dividir un documento por un _separador_: tipicamente palabras.</dd>
  <dt>Separador</dt>
  <dd>Serie de caraceteres utilizadas para dividir un documento en _tokens_: tipicamente _whitespace_ ( )</dd>
</dl>
End of explanation
helpers.get_bigrams(nltk.word_tokenize("conceptos fundamentales de mineria de texto"))
Explanation: Conceptos Fundamentales de Mineria de Texto
<br/>
<dl>
  <dt>Vocabulario</dt>
  <dd>Conjunto de todos los tokens presentes en un _corpus_</dd>
  <dt>n-gram</dt>
  <dd>Secuencia continua de una o más partes de un documento, tipicamente tokens</dd>
</dl>
End of explanation
helpers.remove_stopwords("This is not the stopword")
helpers.stem("natural language processing and text mining")
Explanation: Conceptos Fundamentales de Mineria de Texto
<br/>
<dl>
  <dt>Stopwords</dt>
  <dd>Palabras en un idioma particular que pueden eliminarse de los documentos durante preprocesamiento (palabras muy comunes, preposiciones, etc.)</dd>
  <dt>Stemming</dt>
  <dd>Proceso de extracción y sustitución de palabras por su _"raíz"_</dd>
</dl>
End of explanation
<END_TASK>