() translation by (you can also view the original English article)
Procesamiento natural del lenguaje (PNL) es el procesamiento automático o semi-automático del lenguaje humano. PNL está estrechamente relacionado a la lingüística y tiene enlaces a investigación en ciencia cognitiva, psicología, fisiología, y matemáticas. En el dominio de las ciencias de la computación en particular, PNL está relacionado a técnicas de compilador, teoría de lenguaje formal, interacción humano-computadora, aprendizaje automático, y comprobación de teoremas. Esta pregunta de Quora muestra diferentes ventajas de PNL.
En este tutorial voy a guiarte a través de una interesante plataforma Python para PNL llamada Natural Language Toolkit (NLTK). Antes de que veamos cómo trabajar con esta plataforma, primero déjame decirte qué es NLTK.
¿Qué es NLTK?
El Natural Language Toolkit (NLTK) es una plataforma usada para construir programas para análisis de texto. La plataforma fue liberada originalmente para análisis de texto. La plataforma fue liberada originalmente por Steven Bird y Edward Loper en conjunto con un curso de lingüística computacional en la Universidad de Pennsylvania en 2001. Hay un libro de acompañamiento para la plataforma llamado Procesamiento de Lenguaje Natural con Python.
Instalando NLTK
Ahora instalemos NLTK para comenzar a experimentar con procesamiento de lenguaje natural. ¡Será divertido!
Instalar NLTK es muy sencillo. Estoy usando WIndows 10, así que en mi Símbolo del Sistema (MS-DOS
) tecleo el siguiente comando:
1 |
pip install nltk
|
Si estás usando Ubuntu o macOS, ejecutas el comando desde la Terminal
. Más información sobre instalar NLTK sobre diferentes plataformas puede ser encontrada en la documentación.
Si te estás preguntando qué es pip
, es un sistema de administración de paquetes usado para instalar y administrar paquetes de software escrito en Python. Si estás usando Python 2 >=2.7.9 o Python 3 >=3.4, ¡ya tienes pip
instalado! Para revisar tu versión de Python, simplemente teclea el siguiente comando en tu símbolo del sistema:
1 |
python --version
|
Continuemos y revisemos si hemos instalado NLTK exitosamente. Para hacer eso, abre IDLE de Python y teclea las dos líneas mostradas en la figura de abajo:
Si te es devuelta la versión de tu NLTK, entonces felicidades, ¡has instalado NLTK exitósamente!
Así que lo que hemos hecho en el paso de arriba es que instalamos NLTK desde el índice de Paquete Python (pip) localmente a nuestro entorno virtual.
Nota que podrías tener una versión diferente de NLTK dependiendo de cuándo instalaste la plataforma, pero eso no debería causar un problema.
Trabajando Con NLTK
La primera cosa que necesitamos hacer para trabajar con NLTK es descargar lo que se llama el corpora NLTK. Voy a descargar todo el corpora. Se que es muy grande (10.9 GB), pero vamos a hacerlo solo una vez. Si sabes cuál corpora necesitas, no necesitas descargar todo el corpora.
En el IDLE de tu Python, teclea lo siguiente:
1 |
import nltk |
2 |
nltk.download() |
En este caso, obtendrás un GUI desde el cuál puedes especificar el destino y qué descargar, como se muestra en la figura de abajo:



Voy a descargar todo en este punto. Da clic al botón Descargar en la parte inferior izquierda de la ventana, y espera un poco hasta que todo se descargue a tu directorio de destino.
Antes de continuar, podrías estarte preguntando qué es un corpus (singular de corpora). Un corpus puede ser definido como sigue:
Corpus, plural corpora; Una colección de datos lingüísticos, ya sea compilados como textos escritos o como una transcripción de habla grabada. El propósito principal de un corpus es verificar una hipótesis sobre lenguaje - por ejemplo, para determinar cómo el uso de un sonido, palabra o construcción sintáctica particular varía. La lingüística corpus lidia con los principios y práctica de usar corpora en el estudio del lenguaje. Un corpus computadora es un gran cuerpo de textos legibles para una máquina.
( Crystal, David. 1992. An Encyclopedic Dictionary of Language and Languages. Oxford: Blackwell.)
Un corpus de texto es entonces simplemente cualquier cuerpo grande de texto.
Palabras Tope
Algunas veces necesitamos filtrar información inútil para hacer los datos más comprensibles para la computadora. El el procesamiento natural de lenguaje (NLP), tales datos inservibles (palabras) son llamadas palabras de parada. Así qué, estas palabras no tienen significado para nosotros, y nos gustaría quitarlas.
NLTK nos proporciona algunas palabras de parada con las que iniciar. Para ver esas palabras, usa el siguiente script:
1 |
from nltk.corpus import stopwords |
2 |
print(set(stopwords.words('English'))) |
En cuyo caso obtendrás la siguiente salida:



Lo que hicimos es que imprimimos un conjunto (colección desordenada de elementos) de palabras de parada del lenguaje Inglés.
¿Cómo podemos remover las palabras de parada de nuestro propio texto? El ejemplo de abajo muestra cómo podemos realizar esta tarea:
1 |
from nltk.corpus import stopwords |
2 |
from nltk.tokenize import word_tokenize |
3 |
|
4 |
text = 'In this tutorial, I\'m learning NLTK. It is an interesting platform.' |
5 |
stop_words = set(stopwords.words('english')) |
6 |
words = word_tokenize(text) |
7 |
|
8 |
new_sentence = [] |
9 |
|
10 |
for word in words: |
11 |
if word not in stop_words: |
12 |
new_sentence.append(word) |
13 |
|
14 |
print(new_sentence) |
La salida del script de arriba es:



Tokenización, como se define en Wikipedia, es:
El proceso de romper un flujo de texto en palabras, frases, símbolos, y otros elementos significativos llamados tokens.
Así que lo que la función word_tokenize()
hace es:
'Tokeniza' una cadena para partir otra puntuación además de puntos
Buscando
Digamos que tenemos el siguiente archivo de texto (descarga el archivo de texto desde Dropbox). Nos gustaría buscar la palabra language
. Podemos hacer esto simplemente usando la plataforma NLTK como sigue:
1 |
import nltk |
2 |
|
3 |
file = open('NLTK.txt', 'r') |
4 |
read_file = file.read() |
5 |
text = nltk.Text(nltk.word_tokenize(read_file)) |
6 |
|
7 |
match = text.concordance('language') |
En cuyo caso obtendrás la siguiente salida:



Nota que concordance()
devuelve toda ocurrencia de la palabra language
, en adición a algún contexto. Antes de eso, como se muestra en el script de arriba, 'tokenizamos' el archivo de lectura y después lo convertimos en un objeto nltk.Text
.
Solo quiero notar que la primera vez que ejecuté el programa, obtuve el siguiente error, el cuál parece estar relacionado con la codificación que usa la consola:
1 |
File "test.py", line 7, in <module> |
2 |
match = text.concordance('language').decode('utf-8') |
3 |
File "C:\Python35\lib\site-packages\nltk\text.py", line 334, in concordance |
4 |
self._concordance_index.print_concordance(word, width, lines) |
5 |
File "C:\Python35\lib\site-packages\nltk\text.py", line 200, in print_concordance |
6 |
print(left, self._tokens[i], right) |
7 |
File "C:\Python35\lib\encodings\cp437.py", line 19, in encode |
8 |
return codecs.charmap_encode(input,self.errors,encoding_map)[0] |
9 |
UnicodeEncodeError: 'charmap' codec can't encode character '\u2014' in position 11: character maps to <undefined> |
Lo que hice simplemente para resolver este asunto es ejecutar este comando en mi consola antes de ejecutar el programa: chcp 65001
.
El Gutenberg Corpus
Como se menciona en Wikipedia:
El Project Gutenberg (PG) es un esfuerzo voluntario para digitalizar y archivar trabajos culturales, para "motivar la creación y distribución de eBooks". Fue fundado en 1971 por Michael S. Hart y es la biblioteca digital más antigua. La mayoría de los elementos en su colección son los textos completos de libros de dominio público. El proyecto trata de hacer estos tan gratuitamente como sea posible, en formatos de larga duración que pueden ser usados en casi cualquier computadora. Hasta el 3 de Octubre de 2015, Project Gutenberg alcanzó 50,000 elementos en su colección.
NLTK contiene una pequeña selección de textos de Project Gutenberg. Para ver los archivos incluidos de Project Gutenberg, hacemos lo siguiente:
1 |
import nltk |
2 |
|
3 |
gutenberg_files = nltk.corpus.gutenberg.fileids() |
4 |
print(gutenberg_files) |
La salida del script de arriba será como sigue:



Si queremos encontrar el número de palabras para el archivo de texto bryant-stories.txt
por ejemplo, podemos hacer lo siguiente:
1 |
import nltk |
2 |
|
3 |
bryant_words = nltk.corpus.gutenberg.words('bryant-stories.txt') |
4 |
print(len(bryant_words)) |
El script de arriba debería devolver el siguiente número de palabras: 55563
.
Conclusión
Como hemos visto en este tutorial, la plataforma NLTK nos proporciona una poderosa herramienta para trabajar con procesamiento natural de lenguaje (NLP). Solo he rascado la superficie en este tutorial. Si quisieran adentrarte más en usar NLTK para diferentes tareas NLP, puedes referirte al libro de acompañamiento de NLTK: Procesamiento Natural de Lenguaje con Python.