Prerrequisito: Introducción a la PNL , Preprocesamiento de texto en Python | Serie 1
En la publicación anterior , vimos los pasos básicos de preprocesamiento cuando se trabaja con datos textuales. En este artículo, veremos algunas técnicas de preprocesamiento de texto más avanzadas. Podemos usar estas técnicas para obtener más información sobre los datos que tenemos.
Importemos las bibliotecas necesarias.
# import the necessary libraries import nltk import string import re
Etiquetado de parte del discurso:
La parte del discurso explica cómo se usa una palabra en una oración. En una oración, una palabra puede tener diferentes contextos y significados semánticos. Los modelos básicos de procesamiento del lenguaje natural, como la bolsa de palabras, no logran identificar estas relaciones entre palabras. Por lo tanto, usamos el etiquetado de parte del discurso para marcar una palabra en su etiqueta de parte del discurso en función de su contexto en los datos. También se utiliza para extraer relaciones entre palabras.
from nltk.tokenize import word_tokenize from nltk import pos_tag # convert text into word_tokens with their tags def pos_tagging(text): word_tokens = word_tokenize(text) return pos_tag(word_tokens) pos_tagging('You just gave me a scare')
Ejemplo:
Entrada: ‘Me acabas de dar un susto’
Salida: [(‘Tú’, ‘PRP’), (‘solo’, ‘RB’), (‘me diste’, ‘VBD’), (‘yo’, ‘PRP ‘),
(‘a’, ‘DT’), (‘susto’, ‘NN’)]
En el ejemplo dado, PRP significa pronombre personal, RB para adverbio, VBD para verbo en pasado, DT para determinante y NN para sustantivo. Podemos obtener los detalles de todas las etiquetas de parte del discurso utilizando el conjunto de etiquetas de Penn Treebank.
# download the tagset nltk.download('tagsets') # extract information about the tag nltk.help.upenn_tagset('NN')
Ejemplo:
Entrada: ‘NN’
Salida: NN: sustantivo, común, singular o masa
común-carrier col knuckle-duster Casino afgano cobertizo termostato
inversión diapositiva humor caída resbaladizo viento hiena anular subhumanidad
maquinista…
fragmentación:
La fragmentación es el proceso de extraer frases de un texto no estructurado y darle más estructura. También se conoce como análisis superficial. Se realiza sobre el etiquetado de parte del discurso. Agrupa palabras en “trozos”, principalmente de sintagmas nominales. La fragmentación se realiza mediante expresiones regulares.
from nltk.tokenize import word_tokenize from nltk import pos_tag # define chunking function with text and regular # expression representing grammar as parameter def chunking(text, grammar): word_tokens = word_tokenize(text) # label words with part of speech word_pos = pos_tag(word_tokens) # create a chunk parser using grammar chunkParser = nltk.RegexpParser(grammar) # test it on the list of word tokens with tagged pos tree = chunkParser.parse(word_pos) for subtree in tree.subtrees(): print(subtree) tree.draw() sentence = 'the little yellow bird is flying in the sky' grammar = "NP: {<DT>?<JJ>*<NN>}" chunking(sentence, grammar)
En el ejemplo dado, la gramática, que se define mediante una regla de expresión regular simple. Esta regla dice que se debe formar un fragmento NP (Noun Phrase) siempre que el chunker encuentre un determinante opcional (DT) seguido de cualquier número de adjetivos (JJ) y luego un sustantivo (NN).
Las bibliotecas como spaCy y Textblob son más adecuadas para la fragmentación.
Ejemplo:
Entrada: ‘el pajarito amarillo está volando en el cielo’
Salida:
(S
(NP el/DT pequeño/JJ amarillo/JJ pájaro/NN)
es/VBZ
volando/VBG
en/IN
(NP el/DT cielo/NN) )
(NP el/DT chiquito/JJ amarillo/JJ pájaro/NN)
(NP el/DT cielo/NN)
Reconocimiento de entidad nombrada:
El reconocimiento de entidad nombrada se utiliza para extraer información de texto no estructurado. Se utiliza para clasificar entidades presentes en un texto en categorías como persona, organización, evento, lugares, etc. Nos brinda un conocimiento detallado sobre el texto y las relaciones entre las diferentes entidades.
from nltk.tokenize import word_tokenize from nltk import pos_tag, ne_chunk def named_entity_recognition(text): # tokenize the text word_tokens = word_tokenize(text) # part of speech tagging of words word_pos = pos_tag(word_tokens) # tree of word entities print(ne_chunk(word_pos)) text = 'Bill works for GeeksforGeeks so he went to Delhi for a meetup.' named_entity_recognition(text)
Ejemplo:
Entrada: «Bill trabaja para GeeksforGeeks, así que fue a Delhi para una reunión».
Salida:
(S
(PERSONA Factura/NNP)
trabaja/VBZ
para/EN
(ORGANIZACIÓN GeeksforGeeks/NNP)
entonces/RB
él/PRP
fue/VBD
a/TO
(GPE Delhi/NNP)
para/EN
una/DT
meetup/NN
. /.)
Publicación traducida automáticamente
Artículo escrito por jacobperalta y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA