View
120
Download
0
Category
Preview:
Citation preview
Computación con el lenguaje 4
Día 25, 17 mar 14
Cultura computacional en españolSPAN 4350
Harry HowardTulane 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
Repaso
19-mar-14 SPAN 4350 - Harry Howard - Tulane University 3
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
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?
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
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
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
Distribución de frecuencia condicionada
NLPP 2.2
19-mar-14 SPAN 4350 - Harry Howard - Tulane University 9
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.
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).
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.
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', ...]
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).
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)
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)
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', ...]
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
Recommended