Procesamiento de lenguaje natural - Python
En este capítulo, aprenderemos sobre el procesamiento del lenguaje usando Python.
Las siguientes características hacen que Python sea diferente de otros lenguajes:
Python is interpreted - No necesitamos compilar nuestro programa Python antes de ejecutarlo porque el intérprete procesa Python en tiempo de ejecución.
Interactive - Podemos interactuar directamente con el intérprete para escribir nuestros programas en Python.
Object-oriented - Python es de naturaleza orientada a objetos y hace que este lenguaje sea más fácil de escribir programas porque con la ayuda de esta técnica de programación encapsula el código dentro de los objetos.
Beginner can easily learn - Python también se llama lenguaje para principiantes porque es muy fácil de entender y admite el desarrollo de una amplia gama de aplicaciones.
Prerrequisitos
La última versión de Python 3 lanzada es Python 3.7.1 está disponible para Windows, Mac OS y la mayoría de las versiones de Linux OS.
Para Windows, podemos ir al enlace www.python.org/downloads/windows/ para descargar e instalar Python.
Para MAC OS, podemos usar el enlace www.python.org/downloads/mac-osx/ .
En el caso de Linux, diferentes versiones de Linux utilizan diferentes administradores de paquetes para la instalación de nuevos paquetes.
Por ejemplo, para instalar Python 3 en Ubuntu Linux, podemos usar el siguiente comando desde la terminal:
$sudo apt-get install python3-minimal
Para estudiar más sobre la programación de Python, lea el tutorial básico de Python 3 - Python 3
Introducción a NLTK
Usaremos la biblioteca Python NLTK (Natural Language Toolkit) para realizar análisis de texto en idioma inglés. El kit de herramientas de lenguaje natural (NLTK) es una colección de bibliotecas de Python diseñadas especialmente para identificar y etiquetar partes del habla que se encuentran en el texto del lenguaje natural como el inglés.
Instalación de NLTK
Antes de comenzar a usar NLTK, necesitamos instalarlo. Con la ayuda del siguiente comando, podemos instalarlo en nuestro entorno Python:
pip install nltk
Si estamos usando Anaconda, entonces se puede construir un paquete Conda para NLTK usando el siguiente comando:
conda install -c anaconda nltk
Descarga de datos de NLTK
Después de instalar NLTK, otra tarea importante es descargar sus repositorios de texto preestablecidos para que pueda usarse fácilmente. Sin embargo, antes de eso, necesitamos importar NLTK de la misma manera que importamos cualquier otro módulo de Python. El siguiente comando nos ayudará a importar NLTK:
import nltk
Ahora, descargue datos NLTK con la ayuda del siguiente comando:
nltk.download()
Llevará algún tiempo instalar todos los paquetes disponibles de NLTK.
Otros paquetes necesarios
Algunos otros paquetes de Python como gensim y patterntambién son muy necesarios para el análisis de texto, así como para la creación de aplicaciones de procesamiento de lenguaje natural utilizando NLTK. los paquetes se pueden instalar como se muestra a continuación:
gensim
gensim es una biblioteca robusta de modelado semántico que se puede utilizar para muchas aplicaciones. Podemos instalarlo siguiendo el comando:
pip install gensim
patrón
Puede usarse para hacer gensimel paquete funciona correctamente. El siguiente comando ayuda a instalar el patrón:
pip install pattern
Tokenización
La tokenización puede definirse como el proceso de dividir el texto dado en unidades más pequeñas llamadas tokens. Las palabras, los números o los signos de puntuación pueden ser símbolos. También se le puede llamar segmentación de palabras.
Ejemplo
Input - La cama y la silla son tipos de muebles.
Tenemos diferentes paquetes de tokenización proporcionados por NLTK. Podemos utilizar estos paquetes según nuestros requisitos. Los paquetes y los detalles de su instalación son los siguientes:
paquete sent_tokenize
Este paquete se puede utilizar para dividir el texto de entrada en oraciones. Podemos importarlo usando el siguiente comando:
from nltk.tokenize import sent_tokenize
paquete word_tokenize
Este paquete se puede utilizar para dividir el texto de entrada en palabras. Podemos importarlo usando el siguiente comando:
from nltk.tokenize import word_tokenize
Paquete WordPunctTokenizer
Este paquete se puede utilizar para dividir el texto de entrada en palabras y signos de puntuación. Podemos importarlo usando el siguiente comando:
from nltk.tokenize import WordPuncttokenizer
Derivado
Debido a razones gramaticales, el lenguaje incluye muchas variaciones. Variaciones en el sentido de que el idioma, el inglés y otros idiomas también, tienen diferentes formas de una palabra. Por ejemplo, las palabras comodemocracy, democraticy democratization. Para los proyectos de aprendizaje automático, es muy importante que las máquinas comprendan que estas palabras diferentes, como las anteriores, tienen la misma forma básica. Por eso es muy útil extraer las formas base de las palabras mientras se analiza el texto.
La derivación es un proceso heurístico que ayuda a extraer las formas básicas de las palabras cortando sus extremos.
Los diferentes paquetes de derivación proporcionados por el módulo NLTK son los siguientes:
Paquete PorterStemmer
Este paquete de derivación utiliza el algoritmo de Porter para extraer la forma base de las palabras. Con la ayuda del siguiente comando, podemos importar este paquete:
from nltk.stem.porter import PorterStemmer
Por ejemplo, ‘write’ sería la salida de la palabra ‘writing’ dado como entrada a este lematizador.
Paquete LancasterStemmer
Este paquete de derivación utiliza el algoritmo de Lancaster para extraer la forma base de las palabras. Con la ayuda del siguiente comando, podemos importar este paquete:
from nltk.stem.lancaster import LancasterStemmer
Por ejemplo, ‘writ’ sería la salida de la palabra ‘writing’ dado como entrada a este lematizador.
Paquete SnowballStemmer
Este paquete de derivación utiliza el algoritmo de Snowball para extraer la forma base de las palabras. Con la ayuda del siguiente comando, podemos importar este paquete:
from nltk.stem.snowball import SnowballStemmer
Por ejemplo, ‘write’ sería la salida de la palabra ‘writing’ dado como entrada a este lematizador.
Lematización
Es otra forma de extraer la forma básica de las palabras, normalmente con el objetivo de eliminar las terminaciones flexivas mediante el uso de vocabulario y análisis morfológico. Después de la lematización, la forma básica de cualquier palabra se llama lema.
El módulo NLTK proporciona el siguiente paquete para lematización:
Paquete WordNetLemmatizer
Este paquete extraerá la forma base de la palabra dependiendo de si se usa como sustantivo o como verbo. El siguiente comando se puede utilizar para importar este paquete:
from nltk.stem import WordNetLemmatizer
Recuento de etiquetas POS: fragmentación
La identificación de las partes del habla (POS) y frases cortas se puede hacer con la ayuda de fragmentos. Es uno de los procesos importantes en el procesamiento del lenguaje natural. Como sabemos sobre el proceso de tokenización para la creación de tokens, fragmentar en realidad consiste en etiquetar esos tokens. En otras palabras, podemos decir que podemos obtener la estructura de la oración con la ayuda del proceso de fragmentación.
Ejemplo
En el siguiente ejemplo, implementaremos fragmentación de frase sustantiva, una categoría de fragmentación que encontrará los fragmentos de frase nominal en la oración, mediante el uso del módulo NLTK Python.
Considere los siguientes pasos para implementar la fragmentación de frases nominales:
Step 1: Chunk grammar definition
En este paso, necesitamos definir la gramática para fragmentar. Consistiría en las reglas que debemos seguir.
Step 2: Chunk parser creation
A continuación, necesitamos crear un analizador de fragmentos. Analizaría la gramática y daría la salida.
Step 3: The Output
En este paso, obtendremos la salida en formato de árbol.
Ejecución del script de PNL
Comience importando el paquete NLTK -
import nltk
Ahora, necesitamos definir la oración.
Aquí,
DT es el determinante
VBP es el verbo
JJ es el adjetivo
IN es la preposición
NN es el sustantivo
sentence = [("a", "DT"),("clever","JJ"),("fox","NN"),("was","VBP"),
("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]
A continuación, la gramática se debe dar en forma de expresión regular.
grammar = "NP:{<DT>?<JJ>*<NN>}"
Ahora, necesitamos definir un analizador para analizar la gramática.
parser_chunking = nltk.RegexpParser(grammar)
Ahora, el analizador analizará la oración de la siguiente manera:
parser_chunking.parse(sentence)
A continuación, la salida estará en la variable de la siguiente manera: -
Output = parser_chunking.parse(sentence)
Ahora, el siguiente código le ayudará a dibujar su salida en forma de árbol.
output.draw()