Etiquetado de POS con NLTK y fragmentación en NLP [EJEMPLOS]

Etiquetado POS

Etiquetado POS (Etiquetado de partes del discurso) es un proceso para marcar las palabras en formato de texto para una parte particular de un discurso según su definición y contexto. Se encarga de leer el texto en un idioma y de asignar algún token específico (Partes del discurso) a cada palabra. También se le llama etiquetado gramatical.

Aprendamos con un ejemplo de parte del discurso NLTK:

Entrada: Todo para permitirnos.

Salida: [(‘Todo’, NN),(‘a’, TO), (‘permiso’, VB), (‘nosotros’, PRP)]

Pasos involucrados en el ejemplo de etiquetado de POS

  • Tokenizar texto (word_tokenize)
  • aplique pos_tag al paso anterior que es nltk.pos_tag(tokenize_text)

Los ejemplos de etiquetas NLTK POS son los siguientes:

Abreviatura Sentido
CC conjunción de coordinación
CD dígito cardinal
DT determinante
EX existencial allí
FW palabra extranjera
IN preposición/conjunción subordinante
JJ Esta etiqueta NLTK POS es un adjetivo (grande)
JJR adjetivo, comparativo (más grande)
JJS adjetivo, superlativo (más grande)
LS lista de mercado
MD modal (podría, voluntad)
NN sustantivo, singular (gato, árbol)
NNS sustantivo plural (escritorios)
PNN nombre propio, singular (sarah)
NNPS nombre propio, plural (indios o americanos)
PDT predeterminador (todos, ambos, la mitad)
POS terminación posesiva (padre\ 's)
PRP pronombre personal (ella, ella, él, él mismo)
PPR$ pronombre posesivo (ella, su, mío, mi, nuestro)
RB adverbio (ocasionalmente, rápidamente)
RBR adverbio, comparativo (mayor)
RBS adverbio, superlativo (más grande)
RP partícula (sobre)
A marcador infinito (a)
UH interjección (adiós)
VB verbo (preguntar)
JBV verbo gerundio (juzgar)
VBD verbo en pasado (suplicó)
VBN verbo participio pasado (reunificado)
VBP verbo, tiempo presente, no tercera persona del singular (envoltura)
VBZ verbo, tiempo presente con 3ª persona del singular (bases)
WDT wh-determinante (eso, qué)
WP wh- pronombre (quién)
WRB wh- adverbio (cómo)

La lista de etiquetas NLTK POS anterior contiene todas las etiquetas NLTK POS. El etiquetador NLTK POS se utiliza para asignar información gramatical de cada palabra de la oración. La instalación, importación y descarga de todos los paquetes de POS NLTK está completa.

¿Qué es la fragmentación en PNL?

Chunking En PNL es un proceso para tomar pequeños fragmentos de información y agruparlos en unidades grandes. El uso principal de Chunking es crear grupos de "frases nominales". Se utiliza para agregar estructura a la oración siguiendowing Etiquetado POS combinado con expresiones regulares. El grupo de palabras resultante se denomina "fragmentos". También se le llama análisis superficial.

En el análisis superficial, hay como máximo un nivel entre las raíces y las hojas, mientras que el análisis profundo comprende más de un nivel. El análisis superficial también se denomina análisis ligero o fragmentación.

Reglas para fragmentar

No existen reglas predefinidas, pero puedes combinarlas según la necesidad y el requerimiento.

Por ejemplo, debe etiquetar el sustantivo, el verbo (tiempo pasado), el adjetivo y la unión coordinante de la oración. Puedes usar la regla como se muestra a continuación.

fragmento:{***?}

Following La tabla muestra lo que significan los distintos símbolos:

Nombre del símbolo Descripción
. Cualquier carácter excepto nueva línea
* Combina 0 o más repeticiones
? Combina 0 o 1 repeticiones

Ahora escribamos el código para comprender mejor la regla.

from nltk import pos_tag
from nltk import RegexpParser
text ="learn php from guru99 and make study easy".split()
print("After Split:",text)
tokens_tag = pos_tag(text)
print("After Token:",tokens_tag)
patterns= """mychunk:{<NN.?>*<VBD.?>*<JJ.?>*<CC>?}"""
chunker = RegexpParser(patterns)
print("After Regex:",chunker)
output = chunker.parse(tokens_tag)
print("After Chunking",output)

Salida:

After Split: ['learn', 'php', 'from', 'guru99', 'and', 'make', 'study', 'easy']
After Token: [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN'), ('and', 'CC'), ('make', 'VB'), ('study', 'NN'), ('easy', 'JJ')]
After Regex: chunk.RegexpParser with 1 stages:
RegexpChunkParser with 1 rules:
       <ChunkRule: '<NN.?>*<VBD.?>*<JJ.?>*<CC>?'>
After Chunking (S
  (mychunk learn/JJ)
  (mychunk php/NN)
  from/IN
  (mychunk guru99/NN and/CC)
  make/VB
  (mychunk study/NN easy/JJ))

La conclusión del ejemplo anterior de etiquetado de la parte del discurso en Python: "make" es un verbo que no está incluido en la regla, por lo que no está etiquetado como mychunk.

Caso de uso de fragmentación

La fragmentación se utiliza para la detección de entidades. Una entidad es esa parte de la oración mediante la cual la máquina obtiene el valor de cualquier intención.

Example: 
Temperature of New York. 
Here Temperature is the intention and New York is an entity. 

En otras palabras, la fragmentación se utiliza para seleccionar subconjuntos de tokens. Siga el código siguiente para comprender cómo se utiliza la fragmentación para seleccionar los tokens. En este ejemplo, verá el gráfico que corresponderá a una parte de una frase nominal. Escribiremos el código y dibujaremos el gráfico para una mejor comprensión.

Código para demostrar el caso de uso

 import nltk
text = "learn php from guru99"
tokens = nltk.word_tokenize(text)
print(tokens)
tag = nltk.pos_tag(tokens)
print(tag)
grammar = "NP: {<DT>?<JJ>*<NN>}"
cp  =nltk.RegexpParser(grammar)
result = cp.parse(tag)
print(result)
result.draw()    # It will draw the pattern graphically which can be seen in Noun Phrase chunking 

Salida:

['learn', 'php', 'from', 'guru99']  -- These are the tokens
[('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN')]   -- These are the pos_tag
(S (NP learn/JJ php/NN) from/IN (NP guru99/NN))        -- Noun Phrase Chunking

Gráfico

Gráfico de fragmentación de frases sustantivas
Gráfico de fragmentación de frases sustantivas

Del gráfico, podemos concluir que "aprender" y "guru99" son dos tokens diferentes pero están categorizados como frase nominal, mientras que el token "from" no pertenece a la frase nominal.

La fragmentación se utiliza para categorizar diferentes tokens en la misma porción. El resultado dependerá de la gramática que se haya seleccionado. Se utiliza NLTK para etiquetar patrones y explorar corpus de texto.

CONTAR ETIQUETAS POS

Hemos discutido varios pos_etiqueta en el apartado anterior. En este tutorial en particular, estudiará cómo contar estas etiquetas. El recuento de etiquetas es crucial para la clasificación del texto, así como para preparar las funciones para las operaciones basadas en lenguaje natural. Discutiré con usted el enfoque que siguió guru99 mientras preparaba el código junto con una discusión sobre el resultado. Espero que esto te ayudará.

Cómo contar etiquetas:

Aquí primero escribiremos el código de trabajo y luego escribiremos diferentes pasos para explicar el código.

from collections import Counter
import nltk
text = "Guru99 is one of the best sites to learn WEB, SAP, Ethical Hacking and much more online."
lower_case = text.lower()
tokens = nltk.word_tokenize(lower_case)
tags = nltk.pos_tag(tokens)
counts = Counter( tag for word,  tag in tags)
print(counts)

Salida:

Contador({'NN': 5, ',': 2, 'TO': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1 , 'DT': 1, 'JJS': 1, 'JJ': 1, 'JJR': 1, 'IN': 1, 'VB': 1, 'RB': 1})

Elaboración del código.

CONTAR ETIQUETAS POS

  1. Para contar las etiquetas, puedes usar el paquete Counter del módulo de la colección. Un contador es una subclase de diccionario que funciona según el principio de operación clave-valor. Es una colección desordenada donde los elementos se almacenan como una clave de diccionario mientras que el recuento es su valor.
  2. Importe nltk que contiene módulos para tokenizar el texto.
  3. Escribe el texto cuyo pos_tag quieres contar.
  4. Algunas palabras están en mayúsculas y otras en minúsculas, por lo que es apropiado transformar todas las palabras en minúsculas antes de aplicar la tokenización.
  5. Pase las palabras a través de word_tokenize de nltk.
  6. Calcular el pos_tag de cada token
    Output = [('guru99', 'NN'), ('is', 'VBZ'), ('one', 'CD'), ('of', 'IN'), ('the', 'DT'), ('best', 'JJS'), ('site', 'NN'), ('to', 'TO'), ('learn', 'VB'), ('web', 'NN'), (',', ','), ('sap', 'NN'), (',', ','), ('ethical', 'JJ'), ('hacking', 'NN'), ('and', 'CC'), ('much', 'RB'), ('more', 'JJR'), ('online', 'JJ')]
  7. Ahora viene el papel del contador de diccionario. Hemos importado en la línea de código 1. Las palabras son la clave y las etiquetas son el valor y el contador contará el recuento total de cada etiqueta presente en el texto.

Distribución de frecuencias

La distribución de frecuencia se conoce como el número de veces que ocurre un resultado de un experimento. Se utiliza para encontrar la frecuencia con la que aparece cada palabra en un documento. Usa claseDistfreq y definido por la probabilidad nltk módulo.

Por lo general, se crea una distribución de frecuencia contando las muestras de la ejecución repetida del experimento. El número de recuentos se incrementa en uno cada vez. P.ej.

freq_dist = DistFreq()

para el token en el documento:

freq_dist.inc(token.tipo())

Para cualquier palabra, podemos comprobar cuántas veces apareció en un documento en particular. P.ej.

  1. Método de conteo: freq_dist.count('y')Esta expresión devuelve el valor del número de veces que ocurrió 'y'. Se llama método de conteo.
  2. Método de frecuencia: freq_dist.freq('y')Esta expresión devuelve la frecuencia de una muestra determinada.

Escribiremos un pequeño programa y explicaremos su funcionamiento en detalle. Escribiremos un texto y calcularemos la distribución de frecuencia de cada palabra en el texto.

import nltk
a = "Guru99 is the site where you can find the best tutorials for Software Testing     Tutorial, SAP Course for Beginners. Java Tutorial for Beginners and much more. Please     visit the site guru99.com and much more."
words = nltk.tokenize.word_tokenize(a)
fd = nltk.FreqDist(words)
fd.plot()

Distribución de frecuencias

Explicación del código:

  1. Importar módulo nltk.
  2. Escribe el texto cuya distribución de palabras necesitas encontrar.
  3. Tokenice cada palabra en el texto que sirve como entrada al módulo FreqDist de nltk.
  4. Aplique cada palabra a nlk.FreqDist en forma de lista
  5. Traza las palabras en el gráfico usando plot()

Por favor visualice el gráfico para una mejor comprensión del texto escrito.

Distribución de frecuencia de cada palabra en el gráfico

Distribución de frecuencia de cada palabra en el gráfico.

NOTA: Es necesario tener instalado matplotlib para ver el gráfico anterior.

Observe el gráfico de arriba. Corresponde a contar la aparición de cada palabra en el texto. Ayuda en el estudio del texto y en la implementación del análisis sentimental basado en texto. En pocas palabras, se puede concluir que nltk tiene un módulo para contar la aparición de cada palabra en el texto que ayuda a preparar las estadísticas de las características del lenguaje natural. Desempeña un papel importante en la búsqueda de palabras clave en el texto. También puede extraer el texto del pdf usando bibliotecas como extract, PyPDF2 y alimentar el texto a nlk.FreqDist.

El término clave es "tokenizar". Después de la tokenización, busca cada palabra en un párrafo o documento de texto determinado para determinar la cantidad de veces que ocurrió. No necesita el kit de herramientas NLTK para esto. También puedes hacerlo con tus propias habilidades de programación en Python. El kit de herramientas NLTK solo proporciona un código listo para usar para las distintas operaciones.

Contar cada palabra puede no ser de mucha utilidad. En cambio, uno debería centrarse en la colocación y los bigramas, que se ocupan de muchas palabras en un par. Estos pares identifican palabras clave útiles para mejorar las funciones del lenguaje natural que se pueden enviar a la máquina. Por favor, mire a continuación para ver su details.

Colocaciones: bigramas y trigramas

¿Qué son las colocaciones?

Las colocaciones son pares de palabras que aparecen juntas muchas veces en un documento. Se calcula por el número de esos pares que aparecen juntos en el recuento total de palabras del documento.

Considere el espectro electromagnético con palabras como rayos ultravioleta, rayos infrarrojos.

Las palabras ultravioleta y rayos no se usan individualmente y, por lo tanto, pueden tratarse como colocación. Otro ejemplo es la tomografía computarizada. No decimos CT y Scan por separado y, por lo tanto, también se tratan como colocación.

Podemos decir que encontrar colocaciones requiere calcular las frecuencias de las palabras y su aparición en el contexto de otras palabras. Estas colecciones específicas de palabras requieren filtrado para conservar términos de contenido útiles. Luego, cada gramo de palabras puede calificarse de acuerdo con alguna medida de asociación, para determinar la probabilidad relativa de que cada Ingram sea una colocación.

La colocación se puede clasificar en dos tipos:

  • bigramas ccombinación de dos palabras
  • Trigramascombinación de tres palabras

Bigrams y Trigrams proporcionan funciones más significativas y útiles para la etapa de extracción de funciones. Son especialmente útiles en el análisis sentimental basado en texto.

Código de ejemplo de Bigram

import nltk

text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.bigrams(Tokens))
print(output)

Salida:

[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]

Código de ejemplo de trigramas

A veces resulta importante ver un par de tres palabras en la oración para el análisis estadístico y el recuento de frecuencia. Esto nuevamente juega un papel crucial en la formación PNL (funciones de procesamiento del lenguaje natural), así como predicción sentimental basada en texto.

Se ejecuta el mismo código para calcular los trigramas.

import nltk
text = “Guru99 is a totally new kind of learning experience.”
Tokens = nltk.word_tokenize(text)
output = list(nltk.trigrams(Tokens))
print(output)

Salida:

[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]   

Oraciones de etiquetado

Etiquetar oración en un sentido más amplio se refiere a la adición de etiquetas del verbo, sustantivo, etc., según el contexto de la oración. La identificación de etiquetas POS es un proceso complicado. Por lo tanto, el etiquetado genérico de POS no es posible manualmente, ya que algunas palabras pueden tener significados diferentes (ambiguos) según la estructura de la oración. La conversión de texto en forma de lista es un paso importante antes de etiquetar, ya que cada palabra de la lista se repite y se cuenta para una etiqueta particular. Consulte el siguiente código para comprenderlo mejor.

import nltk
text = "Hello Guru99, You have to build a very good site, and I love visiting your site."
sentence = nltk.sent_tokenize(text)
for sent in sentence:
	 print(nltk.pos_tag(nltk.word_tokenize(sent)))

Salida:

[('Hola', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('Tú', 'PRP'), ('tener', 'VBP') , ('compilación', 'VBN'), ('a', 'DT'), ('muy', 'RB'), ('buena', 'JJ'), ('sitio', 'NN') , ('y', 'CC'), ('Yo', 'PRP'), ('amor', 'VBP'), ('visitando', 'VBG'), ('tu', 'PRP$' ), ('sitio', 'NN'), ('.', '.')]

Oraciones de etiquetado

Explicación del código:

  1. Código para importar nltk (kit de herramientas de lenguaje natural que contiene submódulos como tokenize de oraciones y tokenize de palabras).
  2. Texto cuyas etiquetas se van a imprimir.
  3. Tokenización de oraciones
  4. Se implementa un bucle for donde las palabras se tokenizan a partir de la oración y la etiqueta de cada palabra se imprime como salida.

En Corpus existen dos tipos de etiquetadores de POS:

  • Basado en reglas
  • Etiquetadores POS estocásticos

1.Etiquetado de POS basado en reglas: Para las palabras que tienen un significado ambiguo, se aplica un enfoque basado en reglas basado en información contextual. Se hace comprobando o analizando el significado de lo anterior o lo siguiente.wing palabra. La información se analiza desde el entorno de la palabra o dentro de ella misma. Por lo tanto, las palabras se etiquetan según las reglas gramaticales de un idioma en particular, como las mayúsculas y la puntuación. por ejemplo, el etiquetador de Brill.

2.Etiquetado POS estocástico: En este método se aplican diferentes enfoques, como la frecuencia o la probabilidad. Si una palabra está etiquetada principalmente con una etiqueta particular en el conjunto de entrenamiento, entonces en la oración de prueba se le asigna esa etiqueta particular. La palabra etiqueta depende no sólo de su propia etiqueta sino también de la etiqueta anterior. Este método no siempre es exacto. Otra forma es calcular la probabilidad de que aparezca una etiqueta específica en una oración. Así, la etiqueta final se calcula comprobando la probabilidad más alta de que una palabra tenga una etiqueta particular.

Etiquetado de POS con modelo oculto de Markov

Los problemas de etiquetado también se pueden modelar utilizando HMM. Trata los tokens de entrada como una secuencia observable, mientras que las etiquetas se consideran estados ocultos y el objetivo es determinar la secuencia de estados ocultos. Por ejemplo x = x1,x2,…………,Xn donde x es una secuencia de tokens mientras y = y1,y2,y3,y4………ynes la secuencia oculta.

¿Cómo funciona el modelo oculto de Markov (HMM)?

HMM utiliza una distribución de unión que es P(x, y) donde x es la secuencia de entrada/secuencia de token e y es la secuencia de etiquetas.

La secuencia de etiquetas para x será argmaxy1….ynp(x1,x2,….xn,y1,y2,y3,…..). Hemos categorizado etiquetas a partir del texto, pero las estadísticas de dichas etiquetas son vitales. Entonces, la siguiente parte es contar estas etiquetas para un estudio estadístico.

Resumen

  • Etiquetado POS NLTK es un proceso para marcar las palabras en formato de texto para una parte particular de un discurso según su definición y contexto.
  • Algunos ejemplos de etiquetado NLTK POS son: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO, etc.
  • El etiquetador POS se utiliza para asignar información gramatical de cada palabra de la oración. La instalación, importación y descarga de todos los paquetes de etiquetado de Part of Speech con NLTK está completa.
  • La fragmentación en PNL es un proceso para tomar pequeños fragmentos de información y agruparlos en unidades grandes.
  • No existen reglas predefinidas, pero puedes combinarlas según la necesidad y el requerimiento.
  • La fragmentación se utiliza para la detección de entidades. Una entidad es esa parte de la oración mediante la cual la máquina obtiene el valor de cualquier intención.
  • La fragmentación se utiliza para categorizar diferentes tokens en la misma porción.