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