Download handout - Unican
Document related concepts
no text concepts found
Transcript
Procesadores de Lenguaje Procesamiento de Lenguaje Natural Cristina Tı̂rnăucă Dept. Matesco, Universidad de Cantabria Fac. Ciencias – Ing. Informática – Primavera de 2012 Una muy breve introducción a Python I fue creado a finales de los ochenta por Guido van Rossum y debe su nombre a los los humoristas británicos Monty Python (página oficial: http://www.python.org/) I Tutorial: http://docs.python.org/tutorial/ I es un lenguaje de programación interpretado con una sintaxis muy limpia I es un lenguaje multiparadigma: soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. I usa tipado dinámico; no hay que declarar variables! I modo interactivo (se escriben las instrucciones en una especie de intérprete de comandos) I el contenido de los bloques de código (bucles, funciones, clases, etc.) es declarado mediante espacios o tabuladores (indentación) Una muy breve introducción a Python (II) I comentarios: se inician con el sı́mbolo #, y se extienden hasta el final de la lı́nea I variables: se definen de forma dinámica; se usa el sı́mbolo = para asignar valores I tipos de datos (mutables e inmutables): Tipo Clase Notas Ejemplo str Cadena Inmutable ’Hola’ list Secuencia Mutable, puede contener objetos de diversos tipos [4.0, ’Hola’, True] tuple Secuencia Inmutable, puede contener objetos de diversos tipos (4.0, ’Hola’, True) set Conjunto Mutable, sin orden, no contiene duplicados set([4.0, ’Hola’, True]) frozenset Conjunto Inmutable, sin orden, no contiene duplicados frozenset([4.0, ’Hola’, True]) dict Mapping Grupo de pares clave:valor ’key1’: 1.0, ’key2’: False int Número entero Precisión fija, convertido en long en caso de overflow 42 long Número entero Precisión arbitraria 42L ó 456966786151987643L float Número decimal Coma flotante de doble precisión 3.1415927 bool Booleano Valor booleano verdadero o falso True o False Una muy breve introducción a Python (III) I Listas por comprensión: squares = [x**2 for x in range(10)] I Programación funcional: filter(), map(), reduce() I Funciones I Condicionales I Bucle for I Bucle while I Módulos Natural Language Toolkit (NLTK) I I NLTK: http://www.nltk.org/download Instalar el software: I Python (2.4.*, 2.5.*, 2.6.*) http://www.python.org/ftp/python/2.6.4/python-2.6.4.msi I PyYAML http://pyyaml.org/download/pyyaml/PyYAML-3.09.win32-py2.6.exe I NLTK http://nltk.googlecode.com/files/nltk-2.0b8.win32.msi I Importar el paquete: >>> import nltk >>> nltk.download() I Testear: >>> from nltk.corpus import brown >>> brown.words() NLTK Herramientas para procesar el texto I I I I I I I I I I I I I I >>> from nltk.book import * text3 text1.concordance(“monstrous”) text1.similar(“monstrous”), text2.similar(“monstrous”) text2.common contexts([“monstrous”, “very”]) text3.generate() len(text3), sorted(set(text3)), len(set(text3)) text3.count(“earth”) sent1, sent2,..., sent9 sent1+sent2 sent1.append(“Some”) text4[173], text4.index(’awaken’), text6[1600:1625] sent3[:3], sent3[3:], sent3[:-4] ’ ’.join([’Monty’, ’Python’]), ’Monty Python’.split() Herramientas para procesar el texto Tareas a desarollar I Encontrar el número total de palabras en el texto 2. I Encontrar el número total de palabras únicas en el texto 2. I Imprimir las últimas 20 palabras del texto 2. Indicar cuantas de esas son únicas. I Imprimir las últimas 20 palabras del texto 2 ordenado. I Imprimir las últimas 20 palabras únicas del texto 2 ordenado. Diccionario de frecuencias fdist = FreqDist(text1) fdist.keys() fdist.items() fdist.max() fdist.freq(‘and’) fdist.N() Diccionario de frecuencias Tareas a desarollar I Imprimir las 20 palabras más utilizadas en el texto 1. I Imprimir todas las palabras con más de 10 letras del texto 1. I Imprimir todas las palabras frecuentes (que aparecen al menos 20 veces) del texto 1 con más de 10 letras. Operadores para los “strings” s.startswith(t) s.endswith(t) s.islower() s.isupper() s.isalpha() s.isalnum() s.isdigit() s.istitle() Operadores para los “strings” Tareas a desarollar Utilizando el texto 4, imprimir: I la lista de palabras (únicas) que acaban en -ableness; I la lista de palabras (únicas) que contienen gnt; Utilizando el texto 8, encontrar: I el número de palabras que empiezan con mayúscula; I el número de palabras compuestas enteramente por dı́gitos. Expresiones regulares import re [w for w in text1 if re.search(‘ned$’, w)] [w for w in text1 if re.search(‘ˆ..j..t..$’, w)] [w for w in text1 if re.search(‘ˆ[ghi][mno][jlk][def]$’, w)] [w for w in text5 if re.search(‘ˆm+i+n+e+$’, w)] [w for w in text5 if re.search(‘ˆ[0-9]+\.[0-9]+$’, w)] [w for w in text1 if re.search(‘ˆ[0-9]4$’, w)] len(set([w for w in text1 if re.search(‘ (ed|ing)$’, w)])) Earley parser import nltk from nltk.book import * productions = ””” S −> S ”+” M | M M −> M ”∗” T | T T − > ”a” ””” grammar = nltk.parse cfg(productions) parser = nltk.EarleyChartParser(grammar, trace=2) sent = ”a + a ∗ a”.split() trees = parser.parse(sent) trees = parser.nbest parse(sent) trees = parser.iter parse(sent) Earley parser (II) productions = ””” E − > E OP E | N OP − > ” + ” | ”x” N − > ”a” ””” grammar = nltk.parse cfg(productions) parser = nltk.EarleyChartParser(grammar, trace=2) sent = ”a + a ∗ a”.split() trees = parser.nbest parse(sent,2) for tree in trees: print trees