Cómo extraer oraciones del texto utilizando el módulo NLTK Python

Cómo extraer oraciones del texto utilizando el módulo NLTK Python
El kit de herramientas de lenguaje natural (NLTK) es un módulo de procesamiento de lenguaje y texto para Python. NLTK puede analizar, procesar y tokenizar el texto disponible en muchos idiomas diferentes utilizando su biblioteca incorporada de corpus y un gran grupo de datos léxicos. Python es uno de los lenguajes de programación más populares utilizados en la ciencia de datos y el procesamiento del lenguaje, principalmente debido a la versatilidad del lenguaje y la disponibilidad de módulos útiles como NLTK. Este artículo explicará cómo extraer oraciones de los párrafos de texto usando NLTK. El código de esta guía ha sido probado con Python 3.8.2 y NLTK 3.4.5 en Ubuntu 20.04 LTS.

Instalación de NLTK en Linux

Para instalar NLTK en Ubuntu, ejecute el comando a continuación:

$ sudo apt install python3-nltk

Los paquetes NLTK están disponibles en todas las principales distribuciones de Linux. Busque la palabra clave "NLTK" en el Administrador de paquetes para instalar los paquetes. Si por alguna razón, NLTK no está disponible en los repositorios de su distribución, puede instalarlo desde el Administrador de paquetes PIP ejecutando el comando a continuación:

$ PIP Install -User -U NLTK

Tenga en cuenta que primero tendrá que instalar PIP desde su Administrador de paquetes para que el comando anterior funcione. En algunas distribuciones, se puede llamar PIP3. También puede seguir instrucciones de instalación detalladas disponibles en el sitio web oficial de NLTK.

Extraer oraciones de un párrafo usando NLTK

Para párrafos sin puntuaciones y espacios complejos, puede usar el tokenizador de oración NLTK incorporado, llamado "Tokenizer punkt", que viene con un modelo previamente capacitado. También puede usar sus propios modelos de datos capacitados para tokenizar el texto en oraciones. Los modelos de datos capacitados a medida están fuera del alcance de este artículo, por lo que el código a continuación utilizará el tokenizador de inglés punkt incorporado. Para descargar el archivo de recursos Punkt, ejecute los siguientes tres comandos en sucesión y espere a que finalice la descarga:

$ python3
$ import nltk
$ nltk.Descargar ('Punkt')

Un párrafo de "Alice's Adventures in Wonderland" se utilizará en la muestra de código a continuación:

importar nltk
para = "o el pozo era muy profundo, o cayó muy lentamente, porque ella había
Mucho tiempo mientras bajaba a mirar sobre ella y preguntarse qué estaba pasando
suceder a continuación. Primero, ella trató de mirar hacia abajo y distinguir a qué iba a llegar,
Pero estaba demasiado oscuro para ver cualquier cosa; Luego miró a los lados del pozo, y
notó que estaban llenos de armarios y capas de libros; aquí y allá ella
vio mapas e imágenes colgadas sobre clavijas. Ella sacó un frasco de uno de los estantes
Cuando pasó; Fue etiquetado como 'mermelada naranja', pero para su gran decepción
estaba vacía: no le gustaba dejar caer el frasco por temor a matar a alguien, así que se manejó
para ponerlo en uno de los armarios mientras ella cayó."
tokens = nltk.Sent_tokenize (para)
para t en fichas:
Imprimir (t, "\ n")

Ejecutar el código anterior le dará la siguiente salida:

El tokenizador de oración punkt incorporado funciona bien si desea tokenizar párrafos simples. Después de importar el módulo NLTK, todo lo que necesita hacer es usar el método "Sent_tokenize ()" en un corpus de texto grande. Sin embargo, el tokenizador de oraciones punkt puede no detectar correctamente las oraciones cuando hay un párrafo complejo que contiene muchos signos de puntuación, marcos de exclamación, abreviaturas o símbolos repetitivos. No es posible definir una forma estándar de superar estos problemas. Tendrá que escribir un código personalizado para abordar estos problemas utilizando regex, manipulación de cadenas o capacitando su propio modelo de datos en lugar de usar el modelo de datos Punkt incorporado.

También puede intentar ajustar el modelo PUNKT existente para corregir la tokenización incorrecta utilizando algunos parámetros adicionales. Para hacerlo, siga la documentación oficial de Tokenización Punkt disponible aquí. Para usar sus propios ajustes personalizados, se requiere un ligero cambio en el código:

de nltk.tokenizar.Punkt Importación PunktsentenceTokenizer, PunktParameters
para = "O el pozo era muy profundo, o cayó muy lentamente, porque tenía mucho
de tiempo mientras bajaba para mirar sobre ella y preguntarse qué iba a pasar
próximo. Primero, trató de mirar hacia abajo y distinguir a qué iba a llegar, pero fue
Demasiado oscuro para ver cualquier cosa; Luego miró a los lados del pozo y se dio cuenta
que estaban llenos de armarios y capas de libros; aquí y allá ella vio mapas
e imágenes colgadas sobre clavijas. Ella sacó un frasco de uno de los estantes mientras ella
aprobado; Fue etiquetado como 'mermelada naranja', pero para su gran decepción fue
Vacío: no le gustaba dejar caer el frasco por temor a matar a alguien, así que logró
Póntalo en uno de los armarios mientras ella cayó."
punkt_params = punktparameters ()
punkt_params.abrev_types = set (['Mr', 'MRS', 'LLC'])
Tokenizer = PunktsentenceTokenizer (punkt_params)
tokens = tokenizer.Tokenize (para)
para t en fichas:
Imprimir (t, "\ n")

El código anterior hace el mismo trabajo que el método "Sent_tokenize ()". Sin embargo, ahora puede definir sus propias reglas utilizando métodos incorporados y pasarlos como argumentos, como se describe en la documentación. Por ejemplo, se han agregado algunas abreviaturas al código anterior. Si estas abreviaturas son seguidas por puntuación, no se dividirán en una nueva oración. El comportamiento normal es usar un punto o período como una indicación del final de una oración.

Conclusión

NLTK y sus métodos de tokenización son bastante eficientes para tokenizar y procesar datos de texto. Sin embargo, los modelos previamente capacitados pueden no funcionar al 100% con diferentes tipos de textos. Es posible que deba mejorar los modelos existentes, entrenar y suministrar el suyo, o escribir su propio código para solucionar anomalías.