¿Qué es el procesamiento fragmentado en lenguaje natural?

Nodo de origen: 1878431

Queridos lectores,

En este blog, discutiré la fragmentación tanto teórica como prácticamente en Python.

Vamos a empezar…

NOTA: Para la implementación, es mejor usar Python IDLE ya que la salida es un dibujo de un árbol que aparece en una ventana separada.

Agenda

  • ¿Qué es fragmentar?
  • ¿Dónde se utiliza la fragmentación?
  • Tipos de fragmentación
  • Implementación de fragmentación en Python
  • Resultados

¿Qué es fragmentar?

La fragmentación se define como el proceso de procesamiento del lenguaje natural utilizado para identificar partes del discurso y frases cortas presentes en una oración determinada.

Recordando nuestras buenas y antiguas clases de gramática inglesa en la escuela, tenga en cuenta que hay ocho partes del discurso, a saber, el sustantivo, el verbo, el adjetivo, el adverbio, la preposición, la conjunción, el pronombre y la interjección. Además, en la definición anterior de fragmentación, las frases cortas se refieren a las frases formadas al incluir cualquiera de estas partes del discurso.

Por ejemplo, la fragmentación se puede realizar para identificar y, por lo tanto, agrupar frases nominales o sustantivos solos, adjetivos o frases adjetivas, etc. Considere la siguiente oración:

Desayuné hamburguesas y pasteles.

En este caso, si deseamos agrupar o trocear frases nominales, obtendremos “hamburguesas”, “pasteles” y “almuerzo” que son los sustantivos o grupos nominales de la oración.

¿Dónde se utiliza la fragmentación?

¿Por qué querríamos aprender algo sin saber dónde se usa ampliamente? ¡Mirar las aplicaciones discutidas en esta sección del blog lo ayudará a mantener la curiosidad hasta el final!

La fragmentación se usa para obtener las frases requeridas de una oración dada. Sin embargo, el etiquetado POS solo se puede usar para detectar las partes del discurso a las que pertenece cada palabra de la oración.

Cuando tenemos un montón de descripciones o modificaciones alrededor de una palabra en particular o la frase de nuestro interés, usamos la fragmentación para agarrar la frase requerida sola, ignorando el resto a su alrededor. Por lo tanto, fragmentar allana el camino para agrupar las frases requeridas y excluir todos los modificadores a su alrededor que no son necesarios para nuestro análisis. En resumen, fragmentar nos ayuda a extraer solo las palabras importantes de descripciones extensas. Por lo tanto, la fragmentación es un paso en la extracción de información.

Curiosamente, este proceso de fragmentación en NLP se extiende a varias otras aplicaciones; por ejemplo, para agrupar frutas de una categoría específica, digamos, frutas ricas en proteínas como grupo, frutas ricas en vitaminas como otro grupo, y así sucesivamente. Además, la fragmentación también se puede usar para agrupar autos similares, por ejemplo, autos que admiten cambios automáticos en un grupo y otros que admiten cambios manuales en otro grupo, y así sucesivamente.

Tipos de fragmentación

Hay, en términos generales, dos tipos de fragmentación:

  • fragmentando
  • fragmentando

fragmentando:

Aquí, no profundizamos; en cambio, estamos contentos con solo una descripción general de la información. Simplemente nos ayuda a tener una breve idea de los datos dados.

Fragmentando:

A diferencia del tipo anterior de fragmentación, la fragmentación nos ayuda a obtener información detallada.

Entonces, si solo desea una idea, considere "fragmentar"; de lo contrario, prefiera "fragmentar".

Implementación de fragmentación en Python

Imagine una situación en la que desea extraer todos los verbos del texto dado para su análisis. Por lo tanto, en este caso, debemos considerar la fragmentación de las frases verbales. Esto se debe a que nuestro objetivo es extraer todas las frases verbales del fragmento de texto dado. La fragmentación se realiza con la ayuda de expresiones regulares.

No se preocupe si es la primera vez que se encuentra con el término "expresiones regulares". La siguiente tabla está aquí, a su rescate:

Símbolo

Sentido

Ejemplo

*

El carácter anterior puede aparecer cero o más veces, lo que significa que el carácter anterior puede estar allí o no.

ab* coincide con todas las entradas que comienzan con ab y luego siguen cero o más números de b. El patrón coincidirá con ab, abb, abbb, etc.

+

El carácter anterior debe aparecer al menos una vez.

a+ coincide con a, aa, aaa y así sucesivamente.

?

El carácter anterior puede no aparecer en absoluto o aparecer solo una vez, lo que significa que el carácter anterior es opcional.

¿ab? coincide con ab,abb pero no con abbb y así sucesivamente.

La tabla anterior incluye las expresiones regulares más comunes utilizadas. Las expresiones regulares son muy útiles en la línea de comandos, especialmente al eliminar, ubicar, cambiar el nombre o mover archivos.

De todos modos, para esta implementación, solo usaremos archivos *. ¡Siéntase libre de mirar la tabla de arriba para familiarizarse con el símbolo!

Realizaremos fragmentación utilizando nltk, la biblioteca NLP más popular. Entonces, primero importémoslo.

importar nltk

Consideremos el siguiente texto de muestra que creé por mi cuenta. ¡Siéntase libre de reemplazar el texto a continuación con cualquier texto de muestra que desee implementar fragmentación!

sample_text=""" Rama mató a Ravana para salvar a Sita de Lanka. La leyenda del Ramayán es la epopeya india más popular. Ya se han filmado muchas películas y series en varios idiomas aquí en la India basadas en el Ramayana. """

Claramente, los datos tienen que ser tokenizados por oraciones y luego tokenizados por palabras antes de continuar. La tokenización no es más que el proceso de dividir el texto dado en unidades más pequeñas, como oraciones, en el caso de la tokenización de oraciones y palabras, en el caso de la tokenización de palabras.

Seguido de la tokenización, se realiza el etiquetado POS (parte del discurso) para cada palabra, en el que se identificará la parte del discurso de cada palabra. Ahora, solo nos interesa la parte gramatical del verbo y deseamos extraerla.

Por lo tanto, especifique la parte del discurso de nuestro interés usando la expresión regular requerida de la siguiente manera:

V.B.: {}

tokenizado=nltk.sent_tokenize(texto_de_muestra) para i en tokenizado: palabras=nltk.word_tokenize(i) # print(words) tagged_words=nltk.pos_tag(words) # print(tagged_words) chunkGram=r"""VB: {}" "" chunkParser=nltk.RegexpParser(chunkGram) chunked=chunkParser.parse(tagged_words) chunked.draw()

La expresión regular (RE) está encerrada entre corchetes angulares () que a su vez están encerrados entre corchetes ({ y }).

NOTA: Especificar el RE de acuerdo al POS requerido

VB significa el verbo POS. El punto que sigue a VB significa que coincide con cualquier carácter que sigue a VB. El signo de interrogación después del punto especifica que cualquier carácter después de B debe aparecer solo una vez o no debe aparecer en absoluto. Sin embargo, de la tabla que vimos anteriormente, este carácter es opcional. Hemos enmarcado la expresión regular de esta manera porque, en NLTK, las frases verbales incluyen las siguientes etiquetas POS:

POS

Sentido

VB

Verbo en su forma base

VBD

verbo en su tiempo pasado

JBV

verbo en su tiempo presente

VBN

verbo en su forma de participio pasado

VBP

Verbo en presente pero no en tercera persona del singular

VBZ

Verbo en presente y en tercera persona del singular

Así, las frases verbales pueden pertenecer a cualquiera de los POS anteriores. Es por eso que la expresión regular se enmarca como VB.? que incluye todas las categorías anteriores. El paquete RegexpParser se usa para verificar si un POS cumple con nuestro patrón requerido que hemos mencionado anteriormente usando el RE.

El código completo se puede ver de la siguiente manera:

import nltk nltk.download('averaged_perceptron_tagger') sample_text=""" Rama mató a Ravana para salvar a Sita de Lanka. La leyenda del Ramayan es la epopeya india más popular. Ya se han filmado muchas películas y series en varios idiomas aquí en India basado en el Ramayana. """ tokenized=nltk.sent_tokenize(sample_text) for i in tokenized: words=nltk.word_tokenize(i) # print(words) tagged_words=nltk.pos_tag(words) # print(tagged_words) chunkGram =r"""VB: {}""" chunkParser=nltk.RegexpParser(chunkGram) chunked=chunkParser.parse(tagged_words) chunked.draw()

Resultados

resultado de fragmentación
resultado de fragmentación

Finalmente, obtenemos una forma de árbol del POS de las palabras junto con las palabras cuyo POS coincide con el RE dado. La instantánea de la salida obtenida para el texto de muestra que pasamos se puede ver en las figuras anteriores.

Observe que las palabras que satisfacen nuestro RE solo para frases verbales están claramente resaltadas en la salida. Por lo tanto, la fragmentación de frases verbales se ha realizado con éxito.

Espero que hayas encontrado útil mi artículo.

¡Gracias!

Referencias

1. Implementando fragmentación en Python

2. Teoría detrás de la fragmentación

3. Lista completa de POS disponibles en NLP

Acerca de mí

Soy Nithyashree V, estudiante de último año de Ingeniería y Ciencias de la Computación de BTech. Me encanta aprender tecnologías tan interesantes y ponerlas en práctica, especialmente observando cómo nos ayudan a resolver los desafiantes problemas de la sociedad. Mis áreas de interés incluyen inteligencia artificial, ciencia de datos y procesamiento del lenguaje natural.

Aquí está mi perfil de LinkedIn: mi LinkedIn

Puede leer mis otros artículos sobre Analytics Vidhya en esta página.

Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.

Fuente: https://www.analyticsvidhya.com/blog/2021/10/what-is-chunking-in-natural-language-processing/

Sello de tiempo:

Mas de Analítica Vidhya