La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Computación con el lenguaje 5 Día 26, 21 mar 14 Cultura computacional en español SPAN 4350 Harry Howard Tulane University."— Transcripción de la presentación:

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

2 Organización del curso Las grabaciones y las presentaciones están disponibles en:http://www.tulane.edu/~howard/SPAN- NLP/http://www.tulane.edu/~howard/SPAN- NLP/ La versión en inglés del tema es http://www.tulane.edu/~howard/CompCult ES/control.html http://www.tulane.edu/~howard/CompCult ES/control.html Las notas están en el Gradebook de Blackboard. 21-mar-14SPAN 4350 - Harry Howard - Tulane University2

3 REPASO 21-mar-14SPAN 4350 - Harry Howard - Tulane University3

4 21-mar-14SPAN 4350 - Harry Howard - Tulane University4 Funciones para las distribuciones de frecuencia de NLTK df = 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 < df2 ocurren las muestras en df1 con menos frecuencia que en df2?

5 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-14SPAN 4350 - Harry Howard - Tulane University5

6 21-mar-14SPAN 4350 - Harry Howard - Tulane University6 Figura 2.4 Contar palabras que aparecen en una colección de textos (una distribución de frecuencia condicionada).

7 21-mar-14SPAN 4350 - Harry Howard - Tulane University7 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',...]

8 21-mar-14SPAN 4350 - Harry Howard - Tulane University8 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)

9 21-mar-14SPAN 4350 - Harry Howard - Tulane University9 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 >>> dfc.conditions() ['news', 'romance'] >>> dfc['news'] >>> dfc['romance'] >>> 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',...]

10 La computación con el lenguaje: La estadística http://nltk.org/book/ch01.htmlhttp://nltk.org/book/ch01.html, NLPP 1.3 21-mar-14SPAN 4350 - Harry Howard - Tulane University10

11 21-mar-14SPAN 4350 - Harry Howard - Tulane University11 Tabular una distribución cancouldmaymightmustwill news9386663850389 religion825978125471 hobbies268581312283264 sci fi1649412816 romance7419311514543 humor163088913

12 21-mar-14SPAN 4350 - Harry Howard - Tulane University12 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.

13 21-mar-14SPAN 4350 - Harry Howard - Tulane University13 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)

14 21-mar-14SPAN 4350 - Harry Howard - Tulane University14 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 gen for p in brown.words(categories= g ) if p in mod] >>> dfc = ConditionalFreqDist( genero_palabra)

15 Visualizar los resultados En una tabla >>> dfc.tabulate() En un gráfico >>> dfc.plot() 21-mar-14SPAN 4350 - Harry Howard - Tulane University15

16 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-14SPAN 4350 - Harry Howard - Tulane University16

17 dfc.plot() 21-mar-14SPAN 4350 - Harry Howard - Tulane University17

18 21-mar-14SPAN 4350 - Harry Howard - Tulane University18 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']

19 21-mar-14SPAN 4350 - Harry Howard - Tulane University19 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)

20 21-mar-14SPAN 4350 - Harry Howard - Tulane University20 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)

21 Visualizar los resultados En una tabla >>> dfc2.tabulate() En un gráfico >>> dfc2.plot() 21-mar-14SPAN 4350 - Harry Howard - Tulane University21

22 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 2009 america 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 15 citizen 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 2 21-mar-14SPAN 4350 - Harry Howard - Tulane University22

23 Es algo así como … 17891793179718011805… america21801 citizen519710 21-mar-14SPAN 4350 - Harry Howard - Tulane University23

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

25 21-mar-14SPAN 4350 - Harry Howard - Tulane University25 dfc2.plot()

26 21-mar-14SPAN 4350 - Harry Howard - Tulane University26 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 ?

27 El próximo día Tráete el portátil a clase. P6 Análisis de textos con NLTK 21-mar-14SPAN 4350 - Harry Howard - Tulane University27


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

Presentaciones similares


Anuncios Google