PDF de programación - Curso de procesamiento del lenguaje natural

Imágen de pdf Curso de procesamiento del lenguaje natural

Curso de procesamiento del lenguaje naturalgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 16 de Marzo del 2018)
930 visualizaciones desde el 16 de Marzo del 2018
1,3 MB
36 paginas
Creado hace 11a (18/04/2013)
Curso de procesamiento del

lenguaje natural

César Antonio Aguilar

Facultad de Lenguas y Letras

18/04/2013

[email protected]

Expresiones regulares (1)

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 (2)

¿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:

H(a|ä|ae)ndel

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.

Expresiones regulares (3)

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 (4)

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

Expresiones regulares (5)

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:

Operaciones con conjuntos

Negaciones

Expresiones regulares (6)

Operaciones con cadenas

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/).

Expresiones regulares en Python (2)

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 (3)

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

import re

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

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

Para mayores datos sobre expresiones regulares en Python,

pueden ver:



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

Usando métodos con Regexp (1)

Vamos a realizar algunas operaciones empleando expresiones
regulares. Veamos:

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”.

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()

Usando métodos con Regexp (2)

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 (3)

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 (4)

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 (5)

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 (6)

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

Usando métodos con Regexp (7)

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

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

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 (2)

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 (3)

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

Un autómata que sabe agrupar (1)

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 (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:

Un autómata que sabe agrupar (3)

Un autómata que sabe agrupar (4)

Un autómata que sabe agrupar (5)

Un autómata que sabe agrupar (6)

Un autómata que sabe agrupar (7)

Un autómata que sabe agrupar (8)

Un autómata que sabe agrupar (9)

Un autómata que sabe agrupar (10)

Un autómata que sabe agrupar (11)

Un autómata que sabe agrupar (12)

Un autómata que sabe agrupar (13)

Un autómata que sabe agrupar (14)

Un autómata que sabe agrupar (15)

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:

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?

Gracias por su atención

Blog del curso:

http://cesaraguilar.weebly.com/curso-de-
procesamiento-del-lenguaje-natural.html
  • Links de descarga
http://lwp-l.com/pdf9598

Comentarios de: Curso de procesamiento del lenguaje natural (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad