pln con python - unam · pln con python author: alejandro pimentel created date: 8/16/2017 9:17:17...

21
Clase 8

Upload: others

Post on 10-Jul-2020

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

Clase 8

Page 2: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

RepasoNLTK

nltk NLTK es un módulo de Python que contiene muchasfunciones diseñadas para su uso en el análisislingüístico de documentos y en el procesamiento delenguaje natural. Para poder utilizar las funciones deeste módulo primero debemos importarlo conimport.

download() NLTK es un módulo muy grande, cuando lodescargan e instalan (si instalaron Anaconda, elpaquete lo hizo por ustedes) no se descarga NLTK ensu totalidad, también está modulado y las partes laspueden encontrar en línea. La función download()de nltk abrirá un pequeño navegador con el quepueden descargar módulos de NLTK.

Page 3: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

RepasoNLTK

punkt Uno de los módulos que vamos a utilizar (y queconseguimos con la función download() es punkt.Éste módulo contiene modelos para la tokenizaciónde textos.

word_tokenize() Tras descargar el módulo punkt se le agrega anltk la función word_tokenize. La función recibecomo parámetro el texto que se quiere tokenizar, ycomo un segundo parámetro opcional el idioma (hayidiomas que tienen diferentes reglas de tokenización),y regresa una lista con todos los tokens del texto.Algo muy similar a lo que logramos con nuestrotokenizador de expresiones regulares.

Page 4: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

RepasoConjuntos y conteo

set() Vimos también la función set() que convierte unalista en un conjunto (un set. Los conjuntos tienenpropiedades diferentes a las listas, NO estánordenados, pero sus elementos tampoco se puedenrepetir. Para los ejemplos que usamos en la clase, esapropiedad nos fue de utilidad para eliminar todos lostokens repetidos.

count() Ésta es una función de las listas. Nos permite sabercuántos elementos con un mismo valor contiene lalista, el valor se recibe como parámetro de la función.

Page 5: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

RepasoFunciones

def ... (): Para definir funciones en Python utilizamos lainstrucción def seguido del nombre de nuestrafunción y sus paréntesis, dentro de los paréntesispodemos poner el nombre de los parámetros queesperamos recibir y que se podrán usar en el cuerpode la función como variables, por último ponemosdos puntos para comenzar el bloque te código queserá el contenido de nuestra función.

return Si queremos que nuestra función regrese un valor (aligual otras funciones que hemos visto como read())es necesario que utilicemos la instrucción returnseguido del valor que queremos regresar. Con estopodemos asignar el resultado de nuestra función auna variable.

Page 6: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

Repasonltk.Text

Text() Con ésta función de nltk podemos convertir unalista de tokens en un Text de NLTK. Este es un tipode variable (como los hay listas, conjuntos, números,etc.), y como tal tiene funciones propias diseñadaspara el análisis de textos y el procesamiento delenguaje natural.

Page 7: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

RepasoExpresiones Regulares

{} Las llaves, una nueva herramienta para lasexpresiones regulares. Son repetidores (como el + oel *) la diferencia está en que dentro de las llavespodemos especificar la cantidad de veces quequeremos que algo se repita. Se establece con unnúmero, pero también podemos especificar rangos(entre 10 y 30, por ejemplo) si separamos losnúmeros con una coma dentro de las llaves.

Page 8: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

Repasonltk.Text

concordance() Esta es una función del Text de NLTK. Nospermite obtener las concordancias de una palabra, esdecir, la palabra en su contexto. La palabra se usacomo parámetro de la función. Además, tiene losparámetros opcionales width= y lines= paracambiar la cantidad de caracteres que se toman decada lado de la palabra y la cantidad máxima deresultados que muestra. Esta función es similar aprint() y NO devuelve ningún valor.

similar() Otra función del Text de NLTK. Nos permite obtenerlas palabras similares a una palabra que recibe comoparámetro. Para encontrar dichas palabras similares,compara los contextos de las palabras y regresa laque tienen los contextos más parecidos.

Page 9: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

Herramientas

http://www.corpus.unam.mx/geco

Page 10: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

Herramientas

Page 11: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

Herramientas

Page 12: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

Herramientas

Page 13: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

Herramientas

Page 14: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

Herramientas

Page 15: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

Ejercicio 17

Notarán que el texto, si bien es confiable en el contenido, su formatoes horrible. Además, se va mucha basura, en particular los númerosde página.

I Limpien el texto de los números de página, y de todos losespacios extras que hay entre las palabras.

I También tokenizen el texto y obtengan un Text de NLTKpara conseguir concordancias y palabras similares. Puedenelegir las palabras que quieran, sean creativos.

Page 16: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

NLTKPalabras similares

I Para este tipo de funciones, entre más texto se tenga para hacer elanálisis es mejor.

I Hasta ahora, hemos usado un texto corto para los ejemplos,probemos ahora con el conjunto de todos los que tenemos.

import nltk

carpeta_nombre="Documentos\\"archivo_nombre="DOF_P_IFT_291116_672_Acc.txt"

with open(carpeta_nombre+archivo_nombre,"r") as archivo:texto=archivo.read()

tokens=nltk.word_tokenize(texto,"spanish")

texto_nltk=nltk.Text(tokens)texto_nltk.similar("artículo")

Page 17: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

NLTKContextos comunes

I Por supuesto, podemos ver cuál es el contexto que compartenlas palabras similares.

tokens=nltk.word_tokenize(texto,"spanish")

texto_nltk=nltk.Text(tokens)texto_nltk.similar("artículo")print()texto_nltk.common_contexts(["artículo","instituto"])

I La función print() es para separar los resultados y que seamás claro el contenido de cada parte.

Page 18: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

NLTKDispersión

I Otra función muy interesante es dispersion_plot()I Esta función muestra una gráfica con la aparición de una lista

de palabras buscadas a lo largo de todo el texto.

tokens=nltk.word_tokenize(texto,"spanish")texto_nltk=nltk.Text(tokens)

lista_palabras=["Instituto","Ley","Elija","ley"]texto_nltk.dispersion_plot(lista_palabras)

Page 19: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

NLTKDistribución de frecuencias

import nltk

carpeta_nombre="Documentos\\"archivo_nombre="P_IFT_290216_73_Acc.txt"

with open(carpeta_nombre+archivo_nombre,"r") as archivo:texto=archivo.read()

tokens=nltk.word_tokenize(texto,"spanish")

texto_nltk=nltk.Text(tokens)

distribucion=nltk.FreqDist(texto_nltk)

lista_frecuencias=distribucion.most_common()print(lista_frecuencias)

Page 20: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

NLTKDistribución de frecuencias

I De la distribución de frecuencias también podemos obtener lafrecuencia de una palabra en particular.

I Como podrán ver, esto se logra de manera similar a los índices deuna lista, pero en lugar del índice (el número que indica la posicióndentro de la lista) se usa la palabra misma como texto.

# A esta altura ya tenemos la lista de tokens en "tokens".

texto_nltk=nltk.Text(tokens)

distribucion=nltk.FreqDist(texto_nltk)

print(distribucion["Instituto"])

Page 21: PLN con Python - UNAM · PLN con Python Author: Alejandro Pimentel Created Date: 8/16/2017 9:17:17 PM

Diccionariosen Python

I Esas "listas" que en lugar de usar índices usan palabras, sellaman diccionarios. Es otra herramienta que tiene Python.

I OJO, el resultado de la función FreqDist() de NLTK enrealidad no es un diccionario, ya que tiene funciones propiasde NLTK, pero se comporta como un diccionario para obtenersu contenido usando palabras.

info={"nombre":"Mi nombre","apellido":"Mi apellido"}info["edad"]=100info["curso"]="Python"

for dato in info:print(dato,":",info[dato])