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 | Significado |
---|---|
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) |
Plasma Rico en Plaquetas (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, la fragmentación es un proceso que consiste en tomar pequeñas porciones de información y agruparlas en unidades más grandes. El uso principal de la fragmentación es crear grupos de "sintagmas nominales". Se utiliza para agregar estructura a la oración siguiendo el etiquetado POS combinado con expresiones regulares. El grupo de palabras resultante se denomina "fragmentos". También se denomina 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:{***?}
La siguiente tabla muestra el significado de los distintos símbolos:
Nombre del símbolo | Descripción original |
---|---|
. | 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 etiquetado de la parte del discurso anterior Python ejemplo: “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
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 la sección anterior, en este tutorial en particular, estudiarás cómo contar estas etiquetas. Contar etiquetas es crucial para la clasificación de texto, así como para preparar las características para las operaciones basadas en lenguaje natural. Hablaré contigo sobre el enfoque que siguió guru99 al preparar el código, junto con una discusión sobre el resultado. Espero que esto te ayude.
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.
- Para contar las etiquetas, puedes usar el paquete Counter del módulo de la colección. Un contador es una subclase del 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 conteo es su valor.
- Importe nltk que contiene módulos para tokenizar el texto.
- Escribe el texto cuyo pos_tag quieres contar.
- 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.
- Pase las palabras a través de word_tokenize de nltk.
- 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')]
- 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.
- 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.
- 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()
Explicación del código:
- Importar módulo nltk.
- Escribe el texto cuya distribución de palabras necesitas encontrar.
- Tokenice cada palabra en el texto que sirve como entrada al módulo FreqDist de nltk.
- Aplique cada palabra a nlk.FreqDist en forma de lista
- Traza las palabras en el gráfico usando plot()
Por favor visualice el gráfico para una mejor comprensión del texto escrito.
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 tokenizar, se comprueba cada palabra en un párrafo o documento de texto determinado para determinar la cantidad de veces que apareció. No necesita el kit de herramientas NLTK para esto. También puede hacerlo con sus 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 muy útil. En su lugar, 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 características del lenguaje natural que se pueden introducir en la máquina. A continuación, encontrará los detalles.
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'), ('.', '.')]
Explicación del código:
- Código para importar nltk (kit de herramientas de lenguaje natural que contiene submódulos como tokenize de oraciones y tokenize de palabras).
- Texto cuyas etiquetas se van a imprimir.
- Tokenización de oraciones
- 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 la información contextual. Esto se hace comprobando o analizando el significado de la palabra anterior o posterior. La información se analiza desde el entorno de la palabra o desde dentro de ella misma. Por lo tanto, las palabras se etiquetan según las reglas gramaticales de un idioma en particular, como la capitalización 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.
Resum
- 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.