computación con el lenguaje 4 día 25, 17 mar 14 cultura computacional en español span 4350 harry...

18
Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

Upload: babieca-carmona

Post on 02-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

Computación con el lenguaje 4

Día 25, 17 mar 14

Cultura computacional en españolSPAN 4350

Harry HowardTulane University

Page 2: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

Organización del curso

Las grabaciones y las presentaciones están disponibles en:http://www.tulane.edu/~howard/SPAN-NLP/

La versión en inglés del tema es http://www.tulane.edu/~howard/CompCultES/control.html

Las notas están en el Gradebook de Blackboard.

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 2

Page 3: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

Repaso

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 3

Page 4: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

Convertir texto en Text

>>> import funciones

>>> texto = funciones.cargaTexto()

>>> len(texto)

14879

>>> import nltk

>>> from nltk.text import Text

>>> T = Text(texto)

>>> len(T)

14879

>>>

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 4

Page 5: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 5

Funciones para las distribuciones de frecuencia de NLTKdf = FreqDist(muestras) crear una distribución de frecuencias con 'muestras'

df.inc(muestra) incrementar el recuento de 'muestra' (ver siguiente)

df['amor'] mostrar el número de veces que ocurre 'amor'

df.freq('amor') la frecuencia de 'amor'

df.keys() ordenar las muestras en orden decreciente

for muestra in df: iterar sobre las muestras en orden decreciente

df.N() el número total de muestras

df.max() la muestra con el mayor recuento

df.tabulate(n,m) tabular la distribución de frecuencias

df.plot() cuadro de la distribución de frecuencias

df.plot(cumulative=True) cuadro acumulativa de la distribución de frecuencias

df1 < df2ocurren las muestras en df1 con menos frecuencia que en df2?

Page 6: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

La computación con el lenguaje: La estadística

http://nltk.org/book/ch01.html, NLPP 1.3

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 6

Page 7: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

Palabras vacías (stopwords)

Las palabras cortas suelen esconder la frecuencia de las palabras que nos interesan de un texto.

NLTK dispone de listas de estas palabras en varios idiomas.

Están en la carpeta 'stopwords' en la carpeta 'corpora'.

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 7

Page 8: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

Hay dos formas de acceder a ellas

>>> import nltk# La forma directa>>> temp = nltk.corpus.stopwords.words('spanish')# La forma indirecta>>> from nltk.corpus import stopwords>>> temp = stopwords.words('spanish')# El resultado es el mismo para las dos:>>> vacias[:50]['de', 'la', 'que', 'el', 'en', 'y', 'a', 'los', 'del', 'se', 'las', 'por', 'un', 'para', 'con', 'no', 'una', 'su', 'al', 'lo', 'como', 'm\xc3\xa1s', 'pero', 'sus', 'le', 'ya', 'o', 'este', 's\xc3\xad', 'porque', 'esta', 'entre', 'cuando', 'muy', 'sin', 'sobre', 'tambi\xc3\xa9n', 'me', 'hasta', 'hay', 'donde', 'quien', 'desde', 'todo', 'nos', 'durante', 'todos', 'uno', 'les', 'ni']>>> len(temp)313# Convertir a Unicode>>> vacias = [p.decode('utf8') for p in temp]>>> vacias[:50][u'de', u'la', u'que', u'el', u'en', u'y', u'a', u'los', u'del', u'se', u'las', u'por', u'un', u'para', u'con', u'no', u'una', u'su', u'al', u'lo', u'como', u'm\xe1s', u'pero', u'sus', u'le', u'ya', u'o', u'este', u's\xed', u'porque', u'esta', u'entre', u'cuando', u'muy', u'sin', u'sobre', u'tambi\xe9n', u'me', u'hasta', u'hay', u'donde', u'quien', u'desde', u'todo', u'nos', u'durante', u'todos', u'uno', u'les', u'ni']

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 8

Page 9: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

Distribución de frecuencia condicionada

NLPP 2.2

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 9

Page 10: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 10

Distribución de frecuencia condicionada Una distribución de frecuencia condicionada es

una colección de distribuciones de frecuencia, cada una para una condición diferente.

La condición suele ser la categoría del texto. La Figura 2.4 muestra un fragmento de una

distribución de frecuencia condicionada que tiene sólo dos condiciones, una para un texto de prensa y otra para un texto de novela románica.

Page 11: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 11

Figura 2.4

Contar palabras que aparecen en una colección de textos (una distribución de frecuencia condicionada).

Page 12: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 12

Emparejamiento de evento (muestra) y condiciónUna distribución de frecuencia cuenta eventos

observablesPara nosotros, un evento es la aparición de una palabra

en un texto.O sea, vamos a tomar una muestra (sample) de un

texto.Una distribución de frecuencia condicionada

empareja un evento con una condición. O sea, una muestra con una condición.

En lugar de procesar una secuencia de palabras, lo que se procesa es una secuencia de pares de palabra (muestra) y condición.

Page 13: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 13

Un corpus con categorías

El Corpus de Brown tiene 15 categorías:>>> from nltk.corpus import brown>>> brown.categories()['adventure', 'belles_lettres', 'editorial',

'fiction', 'government', 'hobbies','humor', 'learned', 'lore', 'mystery', 'news', 'religion', 'reviews', 'romance','science_fiction']

>>> brown.words(categories='news')['The', 'Fulton', 'County', 'Grand', 'Jury',

'said', ...]

Page 14: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 14

Muestra de emparejamiento

Los tokens de cada categoría están emparejados con la categoría, de esta forma:[( 'news', 'The' ), ('news', 'Fulton' ), ('news' , 'County' ), ...]

O sea, cada par tiene la forma (condición, muestra).

Si procesáramos el Corpus de Brown por género, habría 15 condiciones (una por género) y 1.161.192 muestras (una por palabra).

Page 15: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 15

Como procesar por condición

# Se crea una lista de dos géneros, para simplificar:>>> gen = ['news', 'romance']

# Se crea una lista de pares (género, palabra):>>> genero_palabra = [(g, p)

# … revisando cada género: for g in gen

# … revisando cada palabra del género: for p in brown.words(categories=g)]

# Se crea la distribución:>>> from nltk.probability import ConditionalFreqDist>>> dfc = nltk.ConditionalFreqDist(genero_palabra)

Page 16: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 16

Lo anterior sin comentarios

>>> gen = ['news', 'romance']

>>> genero_palabra = [(g, p)

for g in gen

for p in brown.words(categories=g)]

>>> from nltk.probability import ConditionalFreqDist>>> dfc = nltk.ConditionalFreqDist(genero_palabra)

Page 17: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 17

Comprobar el resultado

>>> len(genero_palabra)170576>>> genero_palabra[:4][('news', 'The'), ('news', 'Fulton'), ('news', 'County'), ('news',

'Grand')]>>> genero_palabra[-4:][('romance', 'afraid'), ('romance', 'not'), ('romance', "''"), ('romance',

'.')] >>> dfc<ConditionalFreqDist with 2 conditions>>>> dfc.conditions()['news', 'romance']>>> dfc['news']<FreqDist with 100554 outcomes>>>> dfc['romance']<FreqDist with 70022 outcomes>>>> dfc['romance']['could']193>>> list(dfc['romance'])[',', '.', 'the', 'and', 'to', 'a', 'of', '``', "''", 'was', 'with', 'you',

'for', 'at', 'He', 'on', 'him','said', '!' 'I', 'in', 'he', 'had','?', 'her', 'that', 'it', 'his', 'she', ...]

Page 18: Computación con el lenguaje 4 Día 25, 17 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

El próximo díaTráete el portátil a clase.

P6

Análisis de textos con NLTK

19-mar-14 SPAN 4350 - Harry Howard - Tulane University 18