Pitón

Cómo extraer oraciones de texto usando el módulo Python de NLTK

Cómo extraer oraciones de texto usando el módulo Python de NLTK
El kit de herramientas de lenguaje natural (NLTK) es un módulo de procesamiento de texto y lenguaje para Python. NLTK puede analizar, procesar y tokenizar texto disponible en muchos idiomas diferentes utilizando su biblioteca incorporada de corpus y un gran conjunto 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 de lenguajes, 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 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 siguiente comando:

$ sudo apt install python3-nltk

Los paquetes NLTK están disponibles en 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 siguiente comando:

$ pip install --user -U nltk

Tenga en cuenta que primero tendrá que instalar pip desde su administrador de paquetes para que funcione el comando anterior. En algunas distribuciones, puede llamarse pip3. También puede seguir las instrucciones de instalación detalladas disponibles en el página web oficial de NLTK.

Extraer oraciones de un párrafo usando NLTK

Para párrafos sin espacios y puntuaciones complejas, puede usar el tokenizador de oraciones NLTK integrado, llamado "tokenizador Punkt", que viene con un modelo previamente entrenado. También puede usar sus propios modelos de datos entrenados para convertir el texto en oraciones. Los modelos de datos personalizados están fuera del alcance de este artículo, por lo que el siguiente código utilizará el tokenizador Punkt English integrado. Para descargar el archivo de recursos de Punkt, ejecute los siguientes tres comandos en sucesión y espere a que finalice la descarga:

$ python3
$ import nltk
$ nltk.descargar ('punkt')

Se utilizará un párrafo de "Las aventuras de Alicia en el país de las maravillas" en el siguiente ejemplo de código:

importar nltk
para = "O el pozo era muy profundo, o cayó muy lentamente, porque había
mucho tiempo mientras bajaba para mirar a su alrededor y preguntarse qué estaba pasando
para suceder a continuación. Primero, trató de mirar hacia abajo y distinguir a qué se dirigía,
pero estaba demasiado oscuro para ver nada; luego miró a los lados del pozo, y
notó que estaban llenos de alacenas y estanterías para libros; aquí y allá ella
vi mapas e imágenes colgadas de clavijas. Ella tomó un frasco de uno de los estantes
mientras pasaba; estaba etiquetado como 'MERMELADA DE NARANJA', pero para su gran decepción
estaba vacío: no le gustaba dejar caer el frasco por miedo a matar a alguien, así que se las arregló para
para ponerlo en uno de los armarios cuando ella pasó junto a él."
tokens = nltk.sent_tokenize (para)
para t en tokens:
imprimir (t, "\ n")

Ejecutar el código anterior le dará el siguiente resultado:

O el pozo era muy profundo, o cayó muy lentamente, porque tenía mucho tiempo
bajó para mirar a su alrededor y preguntarse qué iba a pasar después.
Primero, trató de mirar hacia abajo y distinguir a qué se dirigía, pero estaba demasiado oscuro
para ver cualquier cosa; luego miró a los lados del pozo y notó que estaban
lleno de alacenas y estanterías para libros; aquí y allá vio mapas y fotografías colgadas
sobre clavijas.
Cogió un frasco de uno de los estantes al pasar; estaba etiquetado como 'ORANGEMARMALADE',
pero para su gran decepción estaba vacío: no le gustaba dejar caer el frasco por miedo a
matando a alguien, así que logró ponerlo en uno de los armarios cuando ella pasó junto a él.

El tokenizador de oraciones 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, es posible que el tokenizador de oraciones de Punkt no detecte correctamente las oraciones cuando hay un párrafo complejo que contiene muchos signos de puntuación, exclamación, abreviaturas o símbolos repetitivos. No es posible definir una forma estándar de superar estos problemas. Tendrá que escribir código personalizado para abordar estos problemas utilizando expresiones regulares, manipulación de cadenas o entrenando su propio modelo de datos en lugar de utilizar el modelo de datos Punkt integrado.

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

de nltk.tokenizar.punkt import PunktSentenceTokenizer, PunktParameters
para = "O el pozo era muy profundo, o cayó muy lentamente, porque tenía mucho
tiempo mientras bajaba para mirar a su alrededor y preguntarse qué iba a pasar
Siguiente. Primero, trató de mirar hacia abajo y distinguir a qué se dirigía, pero era
demasiado oscuro para ver nada; luego miró a los lados del pozo y notó
que estaban llenos de alacenas y estanterías para libros; aquí y allá vio mapas
y cuadros colgados de clavijas. Tomó un frasco de uno de los estantes mientras
aprobado; estaba etiquetado como 'MERMELADA DE NARANJA', pero para su gran decepción fue
vacío: a ella no le gustaba dejar caer el frasco por miedo a matar a alguien, así que se las arregló para
lo puso en uno de los armarios cuando pasó junto a él."
punkt_params = PunktParameters ()
punkt_params.abbrev_types = set (['Señor', 'Señora', 'LLC'])
tokenizer = PunktSentenceTokenizer (punkt_params)
tokens = tokenizador.tokenizar (para)
para t en tokens:
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 integrados 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 van seguidas de puntuación, no se dividirán en una nueva oración. El comportamiento normal es usar un punto o un punto como 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 entrenados pueden no funcionar al 100% con diferentes tipos de textos. Es posible que deba mejorar los modelos existentes, capacitar y suministrar los suyos propios o escribir su propio código para corregir anomalías.

Tutorial de Battle for Wesnoth
The Battle for Wesnoth es uno de los juegos de estrategia de código abierto más populares que puedes jugar en este momento. Este juego no solo ha esta...
0 A.D. Tutorial
De los muchos juegos de estrategia que existen, 0 A.D. logra destacarse como un título completo y un juego táctico muy profundo a pesar de ser de códi...
Tutorial de Unity3D
Introducción a Unity 3D Unity 3D es un potente motor de desarrollo de juegos. Es multiplataforma, es decir, te permite crear juegos para dispositivos ...