Procesamiento de texto en Python 2019

Herramientas para el procesamiento de textos en Python

1- Titular y colaboradores:

Titular

Catalina Rubio y Fernando Schiaffino

Colaboradores

Macarena Fernández Urquiza y Pablo Ceballos


2- Fundamentación y descripción del programa

En las ciencias humanas y sociales, una de las fuentes de información más importante disponible al investigador son los textos. La dificultad que presenta recabar información de grandes volúmenes de textos es que estos constituyen una fuente de datos no estructurada. Por esta razón, la extracción de información relevante y de calidad de estas fuentes es una tarea que implica complicaciones para nada menores. Tradicionalmente, los investigadores revisaban y manipulaban los textos manualmente, invirtiendo para ello una gran cantidad de tiempo. En los últimos años, las ciencias de la computación han desarrollado una vasta variedad de herramientas de gran utilidad para el procesamiento de datos, que se aplican tanto con fines comerciales como académicos en todas las áreas del conocimiento científico. Sin embargo, las ciencias humanas, que suelen ser más refractarias respecto de las innovaciones en este campo, a menudo quedan desactualizadas con respecto de estas nuevas herramientas, desaprovechando los recursos tecnológicos disponibles y, en muchas ocasiones, perdiendo una gran cantidad de tiempo haciendo de forma manual, como se hacía tradicionalmente, tareas que actualmente una computadora es capaz de hacer automáticamente.

En este seminario de extensión, buscamos introducir a los estudiantes de distintas disciplinas en el uso y teoría subyacente a una variedad de herramientas computacionales para el procesamiento de lenguaje natural. Para ello introduciremos nociones básicas de teoría de los lenguajes y de programación en Python (Unidad I), que será el lenguaje utilizado a lo largo de todo el curso. Ambas cuestiones resultan necesarias para poner en perspectiva la clase de retos que plantean los textos y las limitaciones que atañen a sus posibles soluciones. Se presentará sucesivamente el estado de arte general de los tipos de algoritmos y herramientas computacionales que se utilizan para resolver problemas lingüísticos que atañen a los niveles del léxico y la morfología (Unidad II), de la sintaxis (Unidad III) y de la semántica o interpretación de los textos (Unidad IV). El recorrido no pretende ser exhaustivo sino dar una introducción general al uso de algunos de estos recursos computacionales. Si bien trabajaremos cada problema desde el punto de vista teórico, pondremos especial foco en la parte práctica y de implementación, ya que durante las clases se explorarán y correrán diversas aplicaciones computacionales concretas, todas usando Python como lenguaje de programación de cabecera. Para facilitar la instalación de los programas y herramientas utilizadas a lo largo del curso, se utilizará una máquina virtual.


Puesto que se trata de un curso práctico en el que los distintos estudiantes correrán en sus respectivas computadoras las herramientas que se verán en clase, se vuelve sumamente necesario disponer de colaboradores durante la cursada que asistan en la instalación y en los posibles errores que puedan aparecer en las distintas computadoras. Debe, además, tenerse en cuenta que cada computadora cuenta con sistemas operativos, entornos y configuraciones que pueden diferir de una computadora a otra, por lo que, cuando en una computadora surgen errores al ejecutar un comando, la ayuda que se requiere es usualmente demasiado personalizada y requiere de un tiempo que vuelve prohibitivo que un mismo docente pueda hacerse cargo de todos los problemas que puedan surgir simultáneamente mientras dicta la clase. Por el contrario, la presencia de colaboradores permite ir resolviendo los problemas que se pudieran presentar en cada computadora a la vez que la clase avanza.


3- Objetivos

De la justificación del programa se desprenden los siguientes objetivos del curso:

  • Introducir a los estudiantes de la Facultad y a la comunidad en general en el uso de herramientas computacionales para el procesamiento de información textual.
  • Demostrar las posibilidades del análisis computacional en relevamiento y análisis de datos textuales para estudios en el campo de las humanidades
  • Demostrar la utilidad de las herramientas disponibles para la exploración de bibliografía.
  • Comprender la base lingüística y/o computacional subyacentes a cada herramienta.
  • Brindar una introducción al mundo de la programación en Python.
  • Ofrecer un espacio de práctica supervisada para el empleo de las diferentes herramientas.
  • Mostrar casos de uso real.
  • Presentar diferentes recursos digitales disponibles para la realización de investigaciones y trabajos que involucren el procesamiento de textos.


4- Contenidos y Bibliografía


Contenidos:


Unidad I: Nociones básicas de algoritmos y programación

Algoritmos. Introducción a Python: variables, objetos, operadores, funciones, clases. NLTK (Natural Language Toolkit).

Jerarquía de Chomsky. Costo computacional. Nociones básicas de tratabilidad y decidibilidad.


Unidad II: Problemas de morfología y léxico

Escritura y reconocimiento de expresiones regulares. Preprocesamiento y normalización de textos. Tokenización (separación de oraciones y palabras). Lematización (reconocimiento de lexemas) y Stemming (reconocimiento de raíces).


Unidad III: Cómo se combinan las palabras

POS Tagging. Gramáticas formales. Parsing (etiquetadores sintácticos). Parsers de Dependencias (Spacy, Malt Parser, Dependency Parser de NLTK), parsers basados en Constituyentes (NLTK) y Parsers Categoriales (OpenCCG parser). Algoritmos básicos de parsing: recursive descent parser, shift-reduce parser, left corner parser, chart parser. Parsing probabilístico (bllip parser, Maltparser, Spacy). PennTreebank.


Unidad IV: La interpretación de los textos

Modelos de bolsa de palabras. Eliminación de stopwords. Clustering. Clasificación de textos.


5- Bibliografía por unidad


Unidad I: Nociones básicas

  • Bird, S., Klein, E., & Loper, E. (2009). “Cap 1: Language Processing and Python”. Natural language processing with Python: analyzing text with the natural language toolkit. California: O'Reilly Media. Disponible en https://www.nltk.org/book/
  • Hopcroft, John, Rajeev Motwani & Jeffrey D. Ullman (2001). Capítulo 1 “Automata: The Methods and the madness“. Introduction to Automata Theory, Languages and Computation. Massachusetts: Addison-Wesley. pp. 1-35.
  • Partee, Barbara, Alice ter Meulen y Robert Wall (1993). Capítulo 16: “Basic Concepts”. Mathematical Methods in Linguistics. Dordrecht: Kluwer Academic Publishers. pp 433-454.
  • Downey, Allen (2012). Cap 1: The way of the program” Think Python. Massachusetts: Green Tea Press. Pp. 1-10.
  • Downey, Allen (2012). Cap 2: Variables, expressions and statements” Think Python. Massachusetts: Green Tea Press. Pp. 11-18.
  • Downey, Allen (2012). Cap 3: Functions” Think Python. Massachusetts: Green Tea Press. Pp. 19-30.



Unidad II: Problemas de morfología y Léxico

  • Jurafsky, Daniel y Christopher Martin (2000) Capítulo 2 "Regular expressions and automata". Speech and language processing. New Jersey: Prentice-Hall, 21-56.
  • Bird, Steven, Ewan Klein y Edward Loper (2009). Capítulo 5: “Categorizing and Tagging Words”. Natural language processing with Python: analyzing text with the natural language toolkit. California: O'Reilly Media.



Unidad III: Cómo se combinan las palabras

  • Russell, Stuart J. y Peter Norvig (1995). Capítulo 23: “Practical Natural Language Processing”. Artificial Intelligence: a modern approach. New Jersey: Prentice Hall.
  • Bird, Steven, Ewan Klein y Edward Loper (2009). Capítulo 8: “Analyzing Sentence Structure”. Natural language processing with Python: analyzing text with the natural language toolkit. California: O'Reilly Media.
  • Mc.Gee Wood, Mary. 1993. Cap. 3: Classical categorial Grammar: The Lambek Calculus”. Categorial Grammars. London: Routledge. Pp. 34-50.



Unidad IV: La interpretación de los textos


6- Bibliografía General


  • Baldridge, Jason. Lexically Specified Derivational Control in Combinatory Categorial Grammar. Disponible en https://www.era.lib.ed.ac.uk/bitstream/handle/1842/562/IP020026.pdf?sequence=2&isAllowed=y
  • Baker, Collin F. y Christiane Fellbaum (2009, August). WordNet and FrameNet as complementary resources for annotation. In Proceedings of the Third Linguistic Annotation Workshop (pp. 125-129). Association for Computational Linguistics..
  • Bolshakov, Igor A. y Alexander Gelbukh (2004). Computational Linguistics: model, resources, applications. México: UNAM.
  • Carnie, Andrew (2010). Capítulo 9 “Dependency and Constituency”. Constituent Structure. Oxford/New York: Oxford University Press, pp. 168-188.
  • Clark, Alexander (2003, March). Pre-processing very noisy text. In Proc. of Workshop on Shallow Processing of Large Corpora (pp. 12-22).
  • Clark, Eleanor y Kenji Araki (2011). Text normalization in social media: progress, problems and applications for a pre-processing system of casual English. Procedia-Social and Behavioral Sciences, 27, 2-11.
  • Davis, Helen, Marx Weyuker y Sylvia Weyuker (1994). Computability, Complexity and Languages. San Diego: Academic Press.
  • Debusmann, Ralph (2000). An introduction to dependency grammar. Hausarbeit fur das Hauptseminar Dependenzgrammatik SoSe, 99, 1-16. Disponible en http://www.ps.uni-saarland.de/~rade/papers/dg.pdf.
  • Dougherty, Dale y Arnold Robbins (1997). sed & awk: UNIX Power Tools. California. O'Reilly
  • Downey, Allen (2012). Think Python. Massachusetts: Green Tea Press.
  • Feldman, Ronen y James Sanger (2007). The text mining handbook: advanced approaches in analyzing unstructured data. Cambridge university press. Cap. I “Introduction to Text Mining”; cap V “Clustering”; cap. VII “Probabilistic Models for Information Extraction”.
  • Fernández Montraveta, Ana y Glòria Vázquez García (2010). “La construcción del wordnet 3.0 en espanol”. En La lexicografía en su dimensión teórica (pp. 201-220). Disponible en http://s3.amazonaws.com/academia.edu.documents/5944423/creacion_wordnet_malaga.pdf?AWSAccessKeyId=AKIAIWOWYYGZ2Y53UL3A&Expires=1495819135&Signature=fKkAaRA8wQftr3t0WE4QWm0vNz0%3D&response-content-disposition=inline%3B%20filename%3DLa_construccion_del_WordNet_3.0_en_espan.pdf.
  • Fitzgerald, Michael (2012). Introducing Regular Expressions. California: O’Reilly.
  • Gilly, Daniel (1998). UNIX in a Nutshell: System V Edition.
  • Grune, Dick y Ceriel Jacobs (2008). Parsing Techniques. A practical guide. Amsterdam: Springer.
  • Hopcroft, John, Rajeev Motwani y Jeffrey D. Ullman (2001). Introduction to Automata Theory, Languages and Computation. Massachusetts: Addison-Wesley.
  • Jiang, Jay J. y David W. Conrath (1997). Semantic similarity based on corpus statistics and lexical taxonomy. Disponible en https://arxiv.org/pdf/cmp-lg/9709008.
  • Liang, Percy (2013). Lambda dependency-based compositional semantics. Disponible en https://arxiv.org/pdf/1309.4408.pdf.
  • Liang, Percy, Michael I. Jordan y Dan Klein (2011). “Learning dependency-based compositional semantics”. En Proceedings of the 49th Annual Meeting of the Association for Computational Linguistics: Human Language Technologies-Volume 1 (pp. 590-599). Association for Computational Linguistics. Disponible en https://arxiv.org/pdf/1109.6841.
  • Manning, Christopher y Hinrich Schütze (1999). Foundations of Statistical Natural Language Processing. Cambridge/Massachusetts: The MIT Press.
  • Mc.Gee Wood, Mary. 1993. Categorial Grammars. London: Routledge.
  • Mohammad, Saif M. , Svetlana Kiritchenko y Xiaodan Zhu (2013). NRC-Canada: Building the state-of-the-art in sentiment analysis of tweets. arXiv preprint arXiv:1308.6242.
  • Mohammad, Saif M., Svetlana Kiritchenko y Xiaodan Zhu (2014, August). Nrc-canada-2014: Recent improvements in the sentiment analysis of tweets. In Proceedings of the 8th international workshop on semantic evaluation (SemEval 2014) (pp. 443-447).
  • Mohammad, Saif M. , Svetlana Kiritchenko y Xiaodan Zhu (2014). Sentiment analysis of short informal texts. Journal of Artificial Intelligence Research, 50, 723-762.
  • Moreno Sandoval, Antonio (2001). Gramáticas de Unificación y rasgos. Madrid: A. Machado Libros, pp. 227-256.
  • Moreno Sandoval, Antonio (1998). Introducción a la lingüística computacional. Introducción a los modelos simbólicos, estadísticos y biológicos. Madrid: Síntesis.
  • Partee, Barbara, Alice ter Meulen y Robert Wall (1993). Mathematical Methods in Linguistics. Dordrecht: Kluwer Academic Publishers.
  • Peregrín Otero, Carlos (1970). Introducción a la lingüística transformacional. Madrid: Siglo XXI. 1973.
  • Petruck, Miriam R. L (1996). “Frame semantics”. Handbook of pragmatics. 1–13.
  • Roark, Brian y Richard Sproat (2007). Computational Approaches to Morphology and Syntax. Oxford: Oxford University Press.
  • Sag, Ivan, Thomas Wasow y Emily Bender (1999), Capítulo 2 “Some Simple Theories of Grammar”. Syntactic Theory: A Formal Introduction. Stanford: CSLI, pp. 21-48.
  • Steyvers, Mark y Thomas Griffiths (2007). Probabilistic topic models. Handbook of latent semantic analysis, 427(7), 424-440. Disponible en http://173.236.226.255/tom/papers/SteyversGriffiths.pdf.
  • Tan, Pang-Ning, Michael Steinbach y Vipin Kumar (2006). Introduction to Data Mining. Boston: Pearson Education.
  • Taulé, Mariona, Martí, M. Antonia, Bies, Ann, Nofre, Montserrat, Garí, Aina, Song, Zhiyi, ... y Joe Ellis (2015, June). Spanish Treebank Annotation of Informal Non-standard Web Text. In International Conference on Web Engineering (pp. 15-27). Springer International Publishing. Disponible en https://www.ldc.upenn.edu/sites/www.ldc.upenn.edu/files/nlpit2015-spanish-treebank-annotation.pdf.
  • van Vugt, Sander (2015). Red Hat RHCSA/RHCE 7 Cert Guide: Red Hat Enterprise Linux 7 (EX200 y EX300). Pearson IT Certification.
  • Wall, Robert (1972). Introduction to mathematical linguistics. New Jersey: Prentice Hall.
  • Watt, Andrew (2005). Beginning Regular Expressions. Indianapolis: Wiley Publishing.


7. Destinatarios

Los destinatarios del presente seminario son alumnos y graduados de carreras humanísticas y afines con interés en el manejo de fuentes de datos no estructuradas, particularmente, textos.


8. Carga horaria

El seminario cuenta con una carga horaria total de 32 horas repartidas en 8 clases de 4hs cada una a razón de una clase por semana.


9. Condiciones de cursada y requisitos de aprobación.

Para la cursada del presente seminario se recomienda llevar computadora portátil. Es requisito para la aprobación cumplir con una asistencia mínima al 75% de las clases y aprobar una serie de trabajos prácticos a especificar durante la cursada.


10. Resumen para difusión


En este curso se verán algunas de las herramientas de distribución libre útiles para la manipulación de grandes volúmenes de textos. Presentaremos una introducción a la sintaxis básica de un lenguaje de programación, que será la base para abordar los principales problemas y dificultades del Procesamiento del Lenguaje Natural.