Curso de procesamiento del lenguaje natural

Documentos relacionados
Introducción a la lingüística computacional

Curso de procesamiento del lenguaje natural

Curso de procesamiento del lenguaje natural

Curso de procesamiento del lenguaje natural

Introducción a la lingüística computacional

Curso de procesamiento del lenguaje natural

Curso de procesamiento del lenguaje natural

Seminario de análisis del discurso

Raúl

Introducción a la lingüística computacional

Seminario de análisis del discurso

Aprendizaje de etiquetas basado en transformaciones

Curso de procesamiento del lenguaje natural

Curso de procesamiento del lenguaje natural

Seminario de análisis del discurso

Curso de traducción automática de lenguas naturales

Curso de procesamiento del lenguaje natural

Curso de traducción automática de lenguas naturales

Curso de traducción automática de lenguas naturales

Curso de procesamiento del lenguaje natural

Semántica española. César Antonio Aguilar Facultad de Lenguas y Letras 06/04/2016.

Semántica española. César Antonio Aguilar Facultad de Lenguas y Letras 17/04/2017.

Curso de traducción automática de lenguas naturales

César Antonio Aguilar Facultad de Lenguas y Letras 16/10/2017

Curso de procesamiento del lenguaje natural

Las humanidades digitales

Repaso NLTK similar() Esta es otra de las funciones que brinda NLTK con su Text. Obtiene las palabras similares (dentro del Text a la palabra que se d

César Antonio Aguilar Facultad de Lenguas y Letras 10/06/2013

Semántica española. César Antonio Aguilar Facultad de Lenguas y Letras 10/04/2017.

Seminario de análisis del discurso

UNIVERSIDAD DE LOS ANDES FACULTAD DE INGENIERÍA DIVISIÓN DE ESTUDIOS DE POSTGRADO POSTGRADO EN COMPUTACIÓN

Diccionario inteligente TERMInológico para el sector TURístico

César Antonio Aguilar Facultad de Lenguas y Letras 22/04/2013

César Antonio Aguilar Facultad de Lenguas y Letras 12/06/2012 Cesar.Aguilar72@gmail.com

SKETCH ENGINE. Seminario de Traducción Automática Magíster en Traducción Pontificia Universidad Católica de Chile

Un lematizador desambiguado con R

1. Conocer los orígenes de las lenguas habladas en España, clasificarlas y localizarlas en un mapa.

3. ESTRUCTURA DE UN CONVERSOR TEXTO-VOZ

ply Teoría de Lenguajes Ramiro Camino Junio 2015 Universidad de Buenos Aires

César Antonio Aguilar Facultad de Lenguas y Letras 03/11/2016

Profesor de Español para Extranjeros ELE

AREA/MATERIA: Griego II (LOMCE) (00,07,50,01,21,20,02,51,90,40,30) CURSO: 2º ETAPA: Bachillerato de Humanidades y Ciencias Sociales

Universidad Fermín Toro. Cabudare Lara

Introducción a la lingüística computacional

Semántica española. César Antonio Aguilar Facultad de Lenguas y Letras 21/03/2016.

Semántica española. César Antonio Aguilar Facultad de Lenguas y Letras 06/03/2017.

Bloques Contenidos Criterios de evaluación Estándares Instrumentos Valor máx. estándar

Introducción al Diseño de Compiladores. Año

Semántica española. César Antonio Aguilar Facultad de Lenguas y Letras 14/03/2016.

Introducción al Procesamiento de Lenguaje Natural. Grupo PLN - InCo

Tema: Análisis Léxico

Introducción a la Programación

3. Comprender el concepto de declinación/flexión verbal.

TÉCNICO SUPERIOR UNIVERSITARIO EN TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN

SYLLABUS de la Asignatura. Programación INF1201

Semántica española. César Antonio Aguilar Facultad de Lenguas y Letras 13/03/2017.

Analizador Sintáctico Ascendente

Curso de procesamiento del lenguaje natural

Departamento: Ingeniería en Sistemas de Información. Carrera: Tecnicatura Superior en Programación. Cátedra: Inglés I Primer año.

ANEXO 1: DOCUMENTO ICONIX. Nº Requisito Funcional Prioridad 1 La aplicación será desarrollada en lenguaje JAVA. NF 1

Técnicas de Programación

Contenido. Prefacio Orígenes de la programación orientada a objetos... 1

Entrenamiento de nombres propios Identificación de nombres propios

Seminario de análisis del discurso

Enju. A fast, accurate, and deep parser for English

Los criterios de evaluación y los estándares de aprendizaje de la asignatura Latín I para el curso 2015/2016 son los siguientes:

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE INGENIERÍA CICLO BÁSICO DEPARTAMENTO DE ENSEÑANZAS GENERALES

Profesor de Español para Extranjeros ELE (Online)

Instituto José Manuel Estrada - Villa de Soto. Asignatura: Desarrollo de Soluciones Informáticas. Curso: 5to I. Docente: Contreras, María Elena

Profesor de Español para Extranjeros ELE (Online) Titulación certificada por EUROINNOVA BUSINESS SCHOOL

Que es PHP? Que se puede hacer con PHP? Sintaxis del lenguaje. Variables. Operadores básicos. Condicionales. Ciclos.

Semántica española. César Antonio Aguilar Facultad de Lenguas y Letras 03/05/2017.

Algoritmos y Programación Orientada a Objetos I. Contenedoras de tamaño fijo

Las Etapas de la Compilación

CURSO: 1º LENGUA Y LITERATURA

CRITERIOS DE EVALUACIÓN

Profesor de Español para Extranjeros ELE

Diccionario de verbos ingleses para hispanohablantes: con ayuda para

GUÍA DE USO DE LA APLICACIÓN DE CONSULTA DE LA NGLE

Evolución del software y su situación actual

MATERIALES DEL MODELO EDUCATIVO

Pontificia Universidad Católica del Ecuador

Identificar cuál es la estructura de una página Web y sus principales secciones. Desarrollar una página Web en un editor.

APUNTES DE CATEDRA: SISTEMAS DE NUMERACION - REPRESENTACION INTERNA DE NUMEROS Y CARACTERES

Introducción a los Algoritmos. Mtro. Manuel Suárez Gutiérrez

César Antonio Aguilar Facultad de Lenguas y Letras 29/04/2013

TDD desde Cero. Cucumber para BDD con Java.

Desambigüación del sentido de las palabras (WSD)

Análisis léxico. Formalización y desarrollo. Procesadores de Lenguajes. Ingeniería Técnica superior de Ingeniería Informática

Variables, expresiones y sentencias

1ª ACTIVIDAD: Creación de Blogs en Blogger 1

Retículos y Álgebras de Boole

Introducción al procesamiento del lenguaje natural (PLN)

Curso de procesamiento del lenguaje natural

CONCRECIÓN CURRICULAR NOMBRE DEL ÁREA O MATERIA CURSO: 3º DE LA ESO RELACIÓN ENTRE LOS ELEMENTOS DE LA PROGRAMACIÓN CULTURA CLÁSICA

Profesor de Español para Extranjeros ELE (Online)

Curso Completo de Electrónica Digital

Elementos para el estudio de los compiladores

Universidad Simón Bolívar Departamento de Computación y Tecnología de la Información Organización del Computador CI-3815

Transcripción:

Curso de procesamiento del lenguaje natural César Antonio Aguilar Facultad de Lenguas y Letras 13/09/2017 Cesar.Aguilar72@gmail.com

Buscando nuevos textos (1) Una de las tareas que más nos interesa resolver en este curso es la búsqueda y recolección de documentos. Así, vamos a ver la siguiente instrucción que nos permite importar textos desde el siguiente sitio: www.gutenberg.org Para los que lo conozcan, el Proyecto Gutenberg consiste en una biblioteca digital que ofrece acceso gratuito a una colección de aproximadamente 42.000 volúmenes en distintas lenguas.

Buscando nuevos textos (2) Para empezar a trabajar con nuestro intérprete de Python, vamos a importar los siguientes módulos: import nltk, re, urllib Una vez hecho esto, vamos a emplear una nueva instrucción, la cual nos permite acceder a archivos asociados a una URL. Veamos: from urllib import request

Buscando nuevos textos (3) Vamos a descargar un libro del Proyecto Gutenberg, en este caso, una novela de John William Polidori, A Vampire. Usemos las siguientes líneas: url01 = http://www.gutenberg.org/cache/epub/6087/pg6087.txt html01 = request.urlopen(url01).read().decode('utf8') Ocupemos de nuevo Beautiful Soup para trasnformar nuestra secuencia de bytes en una cadena de caracteres: from bs4 import BeautifulSoup

Buscando nuevos textos (4) Hagamos nuestra transformación: Cadena_Polidori01 = BeautifulSoup(html02).get_text() Resultado: type(cadena_polidori01) len (Cadena_Polidori01) 5

Buscando nuevos textos (5) Una vez que hemos hecho esto, la novela de Dostoevsky se ha convertido en una cadena de caracteres. Para transformarla en una lista de palabras, requerimos las siguientes instrucciones: from nltk import word_tokenize Tokens_Polidori01 = nltk.word_tokenize(cadena_polidori01) Corroboramos: type(tokens_polidori01) len(tokens_polidori01)

Generando un corpus (1) Pasemos ahora a procesar un texto propio. Para ello, necesitamos importar las siguientes librerías: import nltk, re, os Ahora, importemos nuestro texto: Cadena_Ariel01 = open( c://anaconda3/corpus_pruebas/ariel01.txt, ru ).read()

Generando un corpus (2) La siguiente parte, consiste en convertir nuestra cadena en una lista de palabras, para lo cual podemos ocupar las siguientes líneas: 1. Tokens_Ariel01 = re.split(r \W+, Cadena_Ariel01) 2. Tokens_Ariel02 = nltk.word_tokenize(cadena_ariel01) Veamos los resultados: type(tokens_ariel01) len(tokens_ariel01) type(tokens_ariel02) len(tokens_ariel02)

Primeras exploraciones (1) Qué podemos hacer con nuestro documento convertido en una lista de tokens? De entrada, una primera tarea sería hacer algunos cálculos que nos permitan reconocer algunas propiedades respecto al vocabulario que contienen. Para esto, podemos ocupar el módulo FreqDist, el cual incorpora diferentes funciones que nos permiten analizar el vocabulario de cada Texto, así como la frecuencia de aparición de algún elemento (en orden decreciente), en concreto, cualquier palabra posible. Vamos a probar este módulo usando la siguiente instrucción: fdist01 = nltk.freqdist(tokens_ariel01)

Primeras exploraciones (2) Algunas funciones que podemos ocupar para identificar frecuencias de distribución en nuestros textos son las siguientes: Ejemplo fdist[ Palabra'] fdist.freq( Palabra ) fdist.n() fdist.most_common(número) fdist.max() fdist.plot(número) fdist.plot(número, cumulative=true) Descripción count of the number of times a given sample occurred frequency of a given sample total number of samples the n most common samples and their frequencies sample with the greatest count graphical plot of the frequency distribution cumulative plot of the frequency distribution

Identificando raíces y lemas (1) Otra tarea que podemos realizar con nuestros documentos antes de etiquetarlos, es reconocer raíces de palabras, con miras a concretar una tarea que se conoce como lematización, es decir: identificar las formas canónicas de las palabras conforme a su registro en el diccionario. Esta tarea ha tenido un avance considerable a partir de la implementación del algoritmo de Porter. http://tartarus.org/~martin/porterstemmer/def.txt

Identificando raíces y lemas (2) Para ahorrarnos unas palabras, veamos la explicación que da de este algortimo Dan Jurafsky en su curso:

Identificando raíces y lemas (3) Las reglas que aplica Porter son las siguientes:

Identificando raíces y lemas (4) El algoritmo permite trabajar con palabras que tengan flexión regular o irregular:

Identificando raíces y lemas (5) Finalmente, este algoritmo nos permite hacer un análisis morfológico bastante eficaz, incluso adaptándolo a otras lenguas.

Identificando raíces y lemas (6) http://snowball.tartarus.org/algorithms/spanish/stemmer.html

El algoritmo de Brill (1) Otro algoritmo útil en esta clase de procesamiento al nivel de palabra es el que desarrolló Eric Brill, el cual reconoce formas de palabras, asociándolas posteriormente a una etiqueta sintáctica. Al respecto pueden ver el siguiente sitio WEB: http://en.wikipedia.org/wiki/ Brill_tagger Eric Brill

El algoritmo de Brill (2) El algoritmo de Brill se fundamenta en el aprendizaje basado en transformaciones y dirigido por el error. Este algoritmo consta de los siguientes módulos:

El algoritmo de Brill (3) El etiquetador léxico funciona del siguiente modo:

El algoritmo de Brill (4) Por su parte, el etiquetador de palabras desconocidas intenta adivinar una etiqueta para una palabra desconocida en función de sus afijos (sufijos o prefijos), y de otras propiedades relevantes similares

El algoritmo de Brill (5) El algoritmo de Brill cuenta también con una plantilla genérica de transformaciones léxicas, esto es:

El algoritmo de Brill (6) El etiquetador contextual actúa justo después del etiquetador de palabras desconocidas, ya que aplica en orden una secuencia de reglas contextuales que han sido aprendidas de manera automática a partir del corpus de entrenamiento. Un ejemplo es:

El algoritmo de Brill (7) Veamos un caso aplicado al inglés. Supongamos que queremos aplicar un proceso de etiquetado basados en el Corpus Brown:

El algoritmo de Brill (8) Aplicamos nuestro etiquetador, y obtenemos oraciones anotadas como:

El algoritmo de Brill (9) Si aplicamos el algoritmo de Brill, el módulo de etiquetado contextual podría aplicar las siguientes reglas:

El algoritmo de Brill (10) Aplicando la segunda regla obtenemos: Para mayores detalles, pueden consultar la siguiente página, la cual es una explicación que dan Miguel Alonso, Jorge Graña y Jesús Virales, de la Universidad de La Coruña (España): http://www.grupolys.org/docencia/ln/biblioteca/traspas_brill.pdf

El algoritmo de Porter en NLTK (1) NLTK nos permite lematizar usando dos algoritmos: el de Porter, que ya vimos, y el algoritmo Lancaster. En el primer caso, la instrucción para importarlo es: porter = nltk.porterstemmer() Para usar el otro, la instrucción es: lancaster = nltk.lancasterstemmer()

El algoritmo de Porter en NLTK (2) Apliquemos entonces el algoritmo de Porter con la siguiente instrucción: Lemma01 = [porter.stem(t) for t in Tokens_Ariel01] Parte del resultado lo podemos ver en la siguiente lámina:

El algoritmo de Porter en NLTK (3)

El algoritmo de Porter en NLTK (4) Ahora, usemos el algoritmo de Lancaster: Lemma02 = [lancaster.stem(t) for t in Tokens_Ariel01] El resultado lo podemos ver en la siguiente lámina:

El algoritmo de Porter en NLTK (5) Qué diferencias encuentran respecto a los resultados arrojados por el algoritmo de Porter?

Etiquetado sintáctico (1) Finalmente, vamos a convertir nuestra lista de tokens en un conjunto de palabras etiquetadas, esto es: Tagged_Ariel01 = nltk.pos_tag(tokens_ariel01) Comprobamos: type(tagged_ariel01) len(tagged_ariel01) Tagged_Ariel01[0:200]

Etiquetado sintáctico (2) Ahora, generemos un nuevo archivo con extensión TXT que contenga nuestro texto etiquetado: Final_Ariel01 = open( c://anaconda3/corpus_pruebas/results_ariel01.txt, w ) for elem in Tagged_Ariel01: Final_Ariel01.write(str(elem)+" ") Final_Ariel01.close()

Etiquetado sintáctico (3) Resultado:

Gracias por su atención Blog del curso: http://cesaraguilar.weebly.com/curso-deprocesamiento-del-lenguaje-natural.html