Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry...

27
Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University

Transcript of Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry...

Page 1: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

Computación con el lenguaje 5

Día 26, 21 mar 14

Cultura computacional en españolSPAN 4350

Harry HowardTulane University

Page 2: Computación con el lenguaje 5 Día 26, 21 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.

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

Page 3: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

Repaso

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

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

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

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 5: Computación con el lenguaje 5 Día 26, 21 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']

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

Page 6: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

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

Figura 2.4

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

Page 7: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

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

Un corpus con categorías

El Corpus de Brown tiene 15 categorías:>>> import nltk>>> 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 8: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

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

Como procesar por condición

>>> import nltk

>>> from nltk.corpus import brown

>>> from nltk.probability import ConditionalFreqDist

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

>>> genero_palabra = [(g, p)

for g in gen

for p in brown.words(categories=g)]>>> dfc = nltk.ConditionalFreqDist(genero_palabra)

Page 9: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

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

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 10: Computación con el lenguaje 5 Día 26, 21 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

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

Page 11: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

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

Tabular una distribución

can could may might must will

news 93 86 66 38 50 389

religion 82 59 78 12 54 71

hobbies 268 58 131 22 83 264

sci fi 16 49 4 12 8 16

romance 74 193 11 51 45 43

humor 16 30 8 8 9 13

Page 12: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

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

Como hacerlo

El objetivo es buscar los verbos modales indicados en los géneros indicados del corpus de Brown.

Es una distribución de frecuencia condicionada que toma los géneros como condiciones y los verbos modales como muestra.

Page 13: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

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

El planteamiento (seudo-código)

# Se crean listas con los géneros y las muestras de interés:>>> gen = ['news', 'religion', 'hobbies', 'science_fiction',

'romance', 'humor']>>> mod = ['can', 'could', 'may', 'might', 'must', 'will']

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

# … revisando cada género en la lista:for g in gen

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

# … si la palabra está en la lista de verbos modales:if p in mod]

# Se crea la distribución de la lista de pares:>>> dfc = ConditionalFreqDist(genero_palabra)

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

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

Lo anterior sin comentarios

>>> import nltk

>>> from nltk.corpus import brown

>>> from nltk.probability import ConditionalFreqDist>>> gen = ['news', 'religion', 'hobbies',

'science_fiction', 'romance', 'humor']

>>> mod = ['can', 'could', 'may', 'might', 'must', 'will']

>>> genero_palabra = [(g, p)for g in genfor p in brown.words(categories=g)if p in mod]

>>> dfc = ConditionalFreqDist(genero_palabra)

Page 15: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

Visualizar los resultados

En una tabla

>>> dfc.tabulate()En un gráfico

>>> dfc.plot()

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

Page 16: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

dfc.tabulate()

can could may might must will

news 93 86 66 38 50 389

religion 82 59 78 12 54 71

hobbies 268 58 131 22 83 264

science_fiction 16 49 4 12 8 16

romance 74 193 11 51 45 43

humor 16 30 8 8 9 13

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

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

dfc.plot()

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

Page 18: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

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

Otro ejemplo

El objetivo es encontrar la frecuencia de 'america' y 'citizen' en el corpus de discursos inaugurales que tiene NLTK.

Escogemos el corpus 'inaugural' y miramos sus títulos:>>> from nltk.corpus import inaugural>>> inaugural.fileids()

['1789-Washington.txt', '1793-Washington.txt', '1797-Adams.txt', ..., '2009-Obama.txt']

Page 19: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

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

El planteamiento (seudo-código)

# Las condiciones son las dos palabras claves:claves = ['america', 'citizen']

# Las muestras son los años, que se van a asignar en la travesía de los discursos.

# Se crea una lista de pares (palabra, año):palabra_anno = [(palabra, discurso[:4])

# … atravesando cada discurso inaugural (por su fileid):for discurso in inaugural.fileids()

# … atravesando cada palabra de cada discurso:for p in inaugural.words(discurso)

# … atravesando cada palabra clave:for palabra in claves

# … si una de las palabras clave empieza la palabra en minúscula:if p.lower().startswith(palabra)]

# Se crea la distribución de la lista de pares:>>> dfc2 = ConditionalFreqDist(palabra_anno)

Page 20: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

21-mar-14 SPAN 4350 - Harry Howard - Tulane University 20

Lo anterior sin comentarios

>>> import nltk

>>> from nltk.corpus import inaugural

>>> from nltk.probability import ConditionalFreqDist

>>> claves = ['america', 'citizen']

>>> palabra_anno = [(palabra, discurso[:4])

for discurso in inaugural.fileids()

for p in inaugural.words(discurso)

for palabra in claves

if p.lower().startswith(palabra)]

>>> dfc2 = ConditionalFreqDist(palabra_anno)

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

Visualizar los resultados

En una tabla

>>> dfc2.tabulate()En un gráfico

>>> dfc2.plot()

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

Page 22: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

dfc2.tabulate() no se puede leer

1789 1793 1797 1801 1805 1809 1813 1817 1821 1825 1829 1833 1837 1841 1845 1849 1853 1857 1861 1865 1869 1873 1877 1881 1885 1889 1893 1897 1901 1905 1909 1917 1921 1925 1929 1933 1937 1941 1945 1949 1953 1957 1961 1965 1969 1973 1977 1981 1985 1989 1993 1997 2001 2005 2009america 2 1 8 0 1 0 1 1 2 0 0 2 2 7 0 2 2 3 2 1 0 0 1 2 4 6 9 9 7 0 12 4 24 11 12 2 5 12 2 4 6 7 7 10 10 23 5 16 21 11 33 31 20 30 15citizen 5 1 6 7 10 1 4 14 15 3 2 3 7 38 11 2 4 7 7 0 5 3 9 9 13 12 10 10 2 1 6 3 6 5 12 1 2 1 1 1 7 0 5 4 1 1 0 3 6 3 2 10 11 7 221-mar-14 SPAN 4350 - Harry Howard - Tulane University 22

Page 23: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

Es algo así como …

1789 1793 1797 1801 1805…

america 2 1 8 0 1

citizen 5 1 9 7 10

21-mar-14 SPAN 4350 - Harry Howard - Tulane University 23

Page 24: Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University.

dfc2.tabulate() cambiando los ejes

21-mar-14 SPAN 4350 - Harry Howard - Tulane University 24

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

21-mar-14 SPAN 4350 - Harry Howard - Tulane University 25

dfc2.plot()

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

21-mar-14 SPAN 4350 - Harry Howard - Tulane University 26

Resumen de los métodos de ConditionalFreqDist()

dfc = ConditionalFreqDist(pares) crear una distribución de frecuencia condicionada de una lista de pares

dfc.conditions() alistar las condiciones en orden alfabético

dfc[condición] mostrar la distribución de frecuencia de esta condición

dfc[condición][muestra] mostrar la frecuencia de esta muestra por esta condición

dfc.tabulate() tabular la distribución

dfc.tabulate(condition=?, sample=?) tabular las condiciones ? y las muestras ?

dfc.plot() hacer un gráfico de la distribución

dfc.plot(condition=?, sample=?) hacer un gráfico de las condiciones ? y las muestras ?

Page 27: Computación con el lenguaje 5 Día 26, 21 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

21-mar-14 SPAN 4350 - Harry Howard - Tulane University 27