curso de procesamiento del lenguaje natural -...

36
César Antonio Aguilar Facultad de Lenguas y Letras 18/04/2013 Curso de procesamiento del lenguaje natural [email protected]

Upload: votram

Post on 30-Aug-2018

243 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

César Antonio Aguilar

Facultad de Lenguas y Letras

18/04/2013

Curso de procesamiento del

lenguaje natural

[email protected]

Page 2: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Para convertir nuestros archivos en cadenas, listas y textos, empleamos algunos caracteres y métodos propios del uso de expresiones regulares (o Regexp). Pregunta: ¿qué son las expresiones regulares?:

Una expresión regular es un tipo de patrón o estructura que describe un conjunto de cadenas sin enumerar sus elementos.

Es “regular porque su codificación tiende a ser repetitiva (de hecho, se pueden considerar una especie de “rutina” para comunicar cierta información).

Expresiones regulares (1)

Page 3: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Esto equivale a decir algo: “una cadena formada por los caracteres 'H', las opciones 'a', o 'ä', o 'ae', 'n', 'd', 'e' y 'l'”. Recuerden: no estamos trabajando con una palabra en sí, sino con una secuencia de signos.

H(a|ä|ae)ndel

¿Y para qué queremos usar expresiones regulares? Veamos el siguiente ejemplo: supongamos que queremos hacer búsquedas con el nombre Händel, y tenemos que lidiar con dos variantes de éste: Handel y Haendel.

Para resolver este problema, podríamos agrupar estas tres variantes bajo una estructura regular del tipo:

Expresiones regulares (2)

Page 4: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Las expresiones regulares son

bastante útiles para muchísimas

cosas: hacer búsquedas de

palabras, tareas de procesamiento

de textos, creación de gramáticas

formales, generación de

textos, etc.

Expresiones regulares (3)

Page 5: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Expresiones regulares (4)

http://bwananet.iula.upf.edu/

Page 6: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Python, como muchos lenguajes de programación, cuenta con métodos y colecciones de expresiones regulares. En este caso, se agrupan en el módulo re. Veamos algunas de las más conocidas:

Negaciones

Operaciones con conjuntos

Expresiones regulares (5)

Page 7: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Operaciones con cadenas

Expresiones regulares (6)

Page 8: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Expresiones regulares en Python (1)

Retomando nuestra explicación sobre Python , se trata de un lenguaje de programación interpretado, esto es, cuenta con un módulo que se encarga de leer y ejecutar los programas al vuelo, lo que se traduce en un ahorro de tiempo a la hora de evaluar un programa. Una de las ventajas de Python es su funcionalidad y gran compatibilidad con otros lenguajes, p. e., Jython, es una implementación de Python compatible con Java (www.jython.org/Project/).

Page 9: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Dadas estas características de Python, tres lingüistas computacionales: Steven Bird (University of Melbourne), Edward Klein (University of Edinburgh) y Edward Loper (University of Pennsylvania), desarrollaron un conjunto de herramientas para tratamiento de lenguaje natural llamado Natural Language Tool-Kit (NLTK).

Para mayores datos sobre NLTK, pueden ver:

www.nltk.org

Expresiones regulares en Python (2)

Page 10: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

La lista completa de meta-caracteres en Pyhon es la siguiente:

import re

Python maneja un módulo específico para realizar operaciones con expresiones regulares. La instrucción para “importarlo” es:

. ^ $ * + ? { [ ] \ | ( )

Para mayores datos sobre expresiones regulares en Python, pueden ver:

www.amk.ca/python/howto/regex/

Expresiones regulares en Python (3)

Page 11: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Usando métodos con Regexp (1)

Vamos a realizar algunas operaciones empleando expresiones regulares. Veamos:

2. Una vez que hayan creado su cadena, vamos a aplicar los siguientes procesos:

2.1. capitalize() : devuelve una copia de la cadena con el primer carácter en mayúscula. Escriban entonces: “Nombre_de_su_cadena”.capitalize()

1. Escribamos la siguiente cadena: “Python es un lenguaje interpretado, orientado a objetos, para fines generales. Python resulta muy adecuado para manipular archivos de texto”.

Page 12: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

2.2. count (sub[, start[, end]]) : devuelve cuántas veces aparece subcadena en la cadena principal o S [start:end]. Los argumentos opcionales start y end se interpretan según la notación de corte. Escriban: “Nombre_de_su_cadena”.count(‘de’).

2.3. replace (old, new[, maxsplit]) : devuelve una copia de la cadena en la que se han sustituido todas las apariciones de old por new. Si se proporciona el argumento opcional maxsplit, sólo se sustituyen las primeras maxsplit apariciones. Escriban: “Nombre_de_su_cadena”.replace(‘de’,’del’)

2.4. find (sub[, start[, end]]) : devuelve el menor índice de la cadena para el que sub se encuentre, de tal modo que sub quede contenido en el rango [start, end). Los argumentos opcionales start y end se interpretan según la notación de corte. Devuelve -1 si no se halla sub. Escriban: “Nombre_de_su_cadena”.find(‘de’).

Usando métodos con Regexp (2)

Page 13: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

2.5. split ([sep [,maxsplit]]) : devuelve una lista de las palabras de la cadena, usando sep como delimitador de palabras. Si se indica maxsplit, se devolverán como mucho maxsplit valores (el último elemento contendrá el resto de la cadena). Si no se especifica sep o es None, cualquier espacio en blanco sirve de separador.

Escriban “Nombre_de_su_cadena”.split(), para generar un lista dividiendo la cadena en palabras (delimitadas por espacio).

Otro ejemplo: escriban “Nombre_de_su_cadena”.split(‘.’), para dividir la cadena en una lista de oraciones delimitadas por un punto.

Usando métodos con Regexp (3)

Page 14: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

2.6. endswith (suffix[, start[, end]]) : devuelve verdadero si la cadena finaliza con el sufijo suffix especificado, en caso contrario es falso. Si se da valor al parámetro opcional start, la comprobación empieza en esa posición. Si se da valor al parámetro opcional end, la comprobación finaliza en esa posición.

2.7. startswith (prefix[, start[, end]]) : devuelve verdadero si la cadena comienza por prefix, en caso contrario, devuelve falso. Si se proporciona el parámetro opcional start, se comprueba la cadena que empieza en esa posición. Si se proporciona el parámetro opcional end, se comprueba la cadena hasta esa posición.

Usando métodos con Regexp (4)

Page 15: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

3. Ahora, para terminar, vamos a implementar dos métodos más o menos complejos para hacer dos tareas: encontrar y enlistar objetos (o findall) y substracción de objetos (o sub) dentro de una cadena, esto es:

3.1. re.findall(r'\b[p|P][a-z]*', Cadena01)

3.2. re.sub(r'(\b[a-z]+) \1', r'\1', Cadena01)

¿Qué nos arroja como resultado? Veamos:

Usando métodos con Regexp (5)

Page 16: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

re.findall(r'\b[p|P][a-z]*', Cadena01)

Usando métodos con Regexp (6)

Page 17: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

re.sub(r'(\b[a-z]+) \1', r'\1', Cadena01)

Usando métodos con Regexp (7)

Page 18: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Como hemos visto, una forma de hacer análisis en documentos es empleando métodos de carácter simbólico, los cuales son ayudan a desarrollar diferentes tareas en varios niveles. Hasta el momento, hemos visto dos clase de métodos: el diseño e implementación de autómatas, y el uso de expresiones regulares.

Hacia el uso de métodos híbridos (1)

Page 19: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Ahora, otra vía paralela es usar métodos estadísticos para hacer análisis y predicciones en distintos niveles del lenguaje.

Hacia el uso de métodos híbridos (2)

Page 20: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

El uso de estadísticas no es algo exclusivo al PLN. Los lingüistas los hemos empleado por lo menos desde el S. XIX. Algunos de los Junggrammatiker (o neogramáticos) ya pensaban en sistemas combinatorios que ayudaban a explicar cambios lingüísticos entre las lenguas indoeuropeas.

Alrededor de los 50 y los 60, un filosofo matemático estadounidense, Richard

Montague (1930-1971) propuso algunos trabajos de lógica aplicados al ingles, p. e., analizo el comportamiento semántico

de los cuantificadores.

Montague fue quizá el primero en plantear el uso de teoría de conjuntos y lógica modal para explicar la sintaxis y la semántica de las lenguas naturales.

Richard Montague

Hacia el uso de métodos híbridos (3)

Page 21: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Lo que viene es un ejercicio. Si seguimos a Montague, suponemos viable describir un comportamiento sintáctico usando una lógica de conjuntos. Si esto es posible, incluso podemos modelar un autómata capaz de entender y reproducir este comportamiento.

Un autómata que sabe agrupar (1)

Page 22: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Un autómata que sabe agrupar (2)

Para que nuestro autómata entienda como se construye una buena frase nominal en inglés y en español, necesitamos buenos y malos ejemplos:

Page 23: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Un autómata que sabe agrupar (3)

Page 24: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Un autómata que sabe agrupar (4)

Page 25: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Un autómata que sabe agrupar (5)

Page 26: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Un autómata que sabe agrupar (6)

Page 27: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Un autómata que sabe agrupar (7)

Page 28: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Un autómata que sabe agrupar (8)

Page 29: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Un autómata que sabe agrupar (9)

Page 30: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Un autómata que sabe agrupar (10)

Page 31: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Un autómata que sabe agrupar (11)

Page 32: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Un autómata que sabe agrupar (12)

Page 33: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Un autómata que sabe agrupar (13)

Page 34: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Un autómata que sabe agrupar (14)

Page 35: Curso de procesamiento del lenguaje natural - Iniciocesaraguilar.weebly.com/uploads/2/7/7/5/2775690/pln_uc_05.pdf · Expresiones regulares en Python (1) Retomando nuestra explicación

Empleando las proposiciones que hemos hecho, podemos diseñar un autómata que sea capaz de generar secuencias de frases nominales que correspondan con los patrones del inglés y el español. Tendríamos algo como:

Un autómata que sabe agrupar (15)

Pregunta: este autómata por lo menos nos ayuda a resolver el caso del español, considerando que el adjetivo va en posición post-nominal. Si quisiéramos que este mismo autómata analizara el inglés, ¿qué tendríamos que modificar?