Web Scraping de Python: tratamiento del texto
En el capítulo anterior, hemos visto cómo lidiar con videos e imágenes que obtenemos como parte del contenido de web scraping. En este capítulo trataremos el análisis de texto utilizando la biblioteca de Python y aprenderemos sobre esto en detalle.
Introducción
Puede realizar análisis de texto utilizando la biblioteca de Python llamada Kit de herramientas de lenguaje natural (NLTK). Antes de pasar a los conceptos de NLTK, comprendamos la relación entre el análisis de texto y el web scraping.
El análisis de las palabras del texto puede llevarnos a saber qué palabras son importantes, qué palabras son inusuales y cómo se agrupan las palabras. Este análisis facilita la tarea del web scraping.
Empezando con NLTK
El kit de herramientas de lenguaje natural (NLTK) es una colección de bibliotecas de Python que está diseñada especialmente para identificar y etiquetar partes del habla que se encuentran en el texto del lenguaje natural como el inglés.
Instalación de NLTK
Puede usar el siguiente comando para instalar NLTK en Python:
pip install nltk
Si está usando Anaconda, entonces se puede construir un paquete conda para NLTK usando el siguiente comando:
conda install -c anaconda nltk
Descarga de datos de NLTK
Después de instalar NLTK, tenemos que descargar repositorios de texto preestablecidos. Pero antes de descargar repositorios preestablecidos de texto, necesitamos importar NLTK con la ayuda deimport comando de la siguiente manera:
mport nltk
Ahora, con la ayuda del siguiente comando, se pueden descargar datos NLTK:
nltk.download()
La instalación de todos los paquetes disponibles de NLTK llevará algún tiempo, pero siempre se recomienda instalar todos los paquetes.
Instalación de otros paquetes necesarios
También necesitamos algunos otros paquetes de Python como gensim y pattern para realizar análisis de texto y para crear aplicaciones de procesamiento de lenguaje natural utilizando NLTK.
gensim- Una biblioteca robusta de modelado semántico que es útil para muchas aplicaciones. Se puede instalar con el siguiente comando:
pip install gensim
pattern - Solía hacer gensimel paquete funciona correctamente. Se puede instalar con el siguiente comando:
pip install pattern
Tokenización
El proceso de dividir el texto dado, en unidades más pequeñas llamadas tokens, se llama tokenización. Estos tokens pueden ser palabras, números o signos de puntuación. También es llamadoword segmentation.
Ejemplo
El módulo NLTK proporciona diferentes paquetes de tokenización. Podemos utilizar estos paquetes según nuestro requisito. Algunos de los paquetes se describen aquí:
sent_tokenize package- Este paquete dividirá el texto de entrada en oraciones. Puede usar el siguiente comando para importar este paquete:
from nltk.tokenize import sent_tokenize
word_tokenize package- Este paquete dividirá el texto de entrada en palabras. Puede utilizar el siguiente comando para importar este paquete:
from nltk.tokenize import word_tokenize
WordPunctTokenizer package- Este paquete dividirá el texto de entrada y los signos de puntuación en palabras. Puede usar el siguiente comando para importar este paquete:
from nltk.tokenize import WordPuncttokenizer
Derivado
En cualquier idioma, hay diferentes formas de palabras. Un idioma incluye muchas variaciones debido a razones gramaticales. Por ejemplo, considere las palabrasdemocracy, democraticy democratization. Tanto para el aprendizaje automático como para los proyectos de raspado web, es importante que las máquinas comprendan que estas palabras diferentes tienen la misma forma básica. De ahí que podamos decir que puede resultar útil extraer las formas base de las palabras mientras se analiza el texto.
Esto se puede lograr mediante la derivación, que puede definirse como el proceso heurístico de extraer las formas básicas de las palabras cortando los extremos de las palabras.
El módulo NLTK proporciona diferentes paquetes para derivar. Podemos utilizar estos paquetes según nuestro requisito. Algunos de estos paquetes se describen aquí:
PorterStemmer package- El algoritmo de Porter es utilizado por este paquete derivado de Python para extraer la forma base. Puede utilizar el siguiente comando para importar este paquete:
from nltk.stem.porter import PorterStemmer
Por ejemplo, después de dar la palabra ‘writing’ como entrada a este lematizador, la salida sería la palabra ‘write’ después de la derivación.
LancasterStemmer package- Este paquete derivado de Python utiliza el algoritmo de Lancaster para extraer la forma base. Puede utilizar el siguiente comando para importar este paquete:
from nltk.stem.lancaster import LancasterStemmer
Por ejemplo, después de dar la palabra ‘writing’ como entrada a este lematizador, la salida sería la palabra ‘writ’ después de la derivación.
SnowballStemmer package- El algoritmo de Snowball es utilizado por este paquete derivado de Python para extraer la forma base. Puede utilizar el siguiente comando para importar este paquete:
from nltk.stem.snowball import SnowballStemmer
Por ejemplo, después de dar la palabra "escritura" como entrada a esta lematización, la salida sería la palabra "escribir" después de la lematización.
Lematización
Otra forma de extraer la forma básica de las palabras es mediante la lematización, normalmente con el objetivo de eliminar las terminaciones flexivas mediante el uso de vocabulario y análisis morfológico. La forma básica de cualquier palabra después de la lematización se llama lema.
El módulo NLTK proporciona los siguientes paquetes para lematización:
WordNetLemmatizer package- Extraerá la forma base de la palabra dependiendo de si se usa como sustantivo o como verbo. Puede utilizar el siguiente comando para importar este paquete:
from nltk.stem import WordNetLemmatizer
Fragmentación
La fragmentación, que significa dividir los datos en pequeños fragmentos, es uno de los procesos importantes en el procesamiento del lenguaje natural para identificar las partes del habla y frases cortas como frases nominales. Chunking consiste en etiquetar los tokens. Podemos obtener la estructura de la oración con la ayuda del proceso de fragmentación.
Ejemplo
En este ejemplo, vamos a implementar la fragmentación de frases sustantivas mediante el módulo NLTK Python. NP chunking es una categoría de chunking que encontrará los fragmentos de frases nominales en la oración.
Pasos para implementar la fragmentación de frases nominales
Necesitamos seguir los pasos que se indican a continuación para implementar la fragmentación de frases nominales:
Paso 1 - Definición de gramática de fragmentos
En el primer paso, definiremos la gramática para fragmentar. Consistiría en las reglas que debemos seguir.
Paso 2: creación del analizador de fragmentos
Ahora, crearemos un analizador de fragmentos. Analizaría la gramática y daría la salida.
Paso 3 - La salida
En este último paso, la salida se produciría en formato de árbol.
Primero, necesitamos importar el paquete NLTK de la siguiente manera:
import nltk
A continuación, necesitamos definir la oración. Aquí DT: el determinante, VBP: el verbo, JJ: el adjetivo, IN: la preposición y NN: el sustantivo.
sentence = [("a", "DT"),("clever","JJ"),("fox","NN"),("was","VBP"),("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]
A continuación, le damos la gramática en forma de expresión regular.
grammar = "NP:{<DT>?<JJ>*<NN>}"
Ahora, la siguiente línea de código definirá un analizador para analizar la gramática.
parser_chunking = nltk.RegexpParser(grammar)
Ahora, el analizador analizará la oración.
parser_chunking.parse(sentence)
A continuación, damos nuestra salida en la variable.
Output = parser_chunking.parse(sentence)
Con la ayuda del siguiente código, podemos dibujar nuestra salida en forma de árbol como se muestra a continuación.
output.draw()
Modelo de bolsa de palabras (BoW) Extracción y conversión del texto en forma numérica
Bag of Word (BoW), un modelo útil en el procesamiento del lenguaje natural, se utiliza básicamente para extraer las características del texto. Después de extraer las características del texto, se puede usar en el modelado en algoritmos de aprendizaje automático porque los datos sin procesar no se pueden usar en aplicaciones de aprendizaje automático.
Funcionamiento del modelo BoW
Inicialmente, el modelo extrae un vocabulario de todas las palabras del documento. Más tarde, utilizando una matriz de términos de documento, construiría un modelo. De esta forma, el modelo BoW representa el documento como una bolsa de palabras únicamente y se descarta el orden o estructura.
Ejemplo
Supongamos que tenemos las siguientes dos oraciones:
Sentence1 - Este es un ejemplo del modelo Bag of Words.
Sentence2 - Podemos extraer características usando el modelo Bag of Words.
Ahora, al considerar estas dos oraciones, tenemos las siguientes 14 palabras distintas:
- This
- is
- an
- example
- bag
- of
- words
- model
- we
- can
- extract
- features
- by
- using
Construyendo un modelo de bolsa de palabras en NLTK
Veamos el siguiente script de Python que construirá un modelo BoW en NLTK.
Primero, importe el siguiente paquete:
from sklearn.feature_extraction.text import CountVectorizer
A continuación, defina el conjunto de oraciones:
Sentences=['This is an example of Bag of Words model.', ' We can extract
features by using Bag of Words model.']
vector_count = CountVectorizer()
features_text = vector_count.fit_transform(Sentences).todense()
print(vector_count.vocabulary_)
Salida
Muestra que tenemos 14 palabras distintas en las dos oraciones anteriores:
{
'this': 10, 'is': 7, 'an': 0, 'example': 4, 'of': 9,
'bag': 1, 'words': 13, 'model': 8, 'we': 12, 'can': 3,
'extract': 5, 'features': 6, 'by': 2, 'using':11
}
Modelado de temas: identificación de patrones en datos de texto
Generalmente, los documentos se agrupan en temas y el modelado de temas es una técnica para identificar los patrones en un texto que corresponde a un tema en particular. En otras palabras, el modelado de temas se utiliza para descubrir temas abstractos o estructuras ocultas en un conjunto de documentos determinado.
Puede utilizar el modelado de temas en los siguientes escenarios:
Clasificación de texto
La clasificación se puede mejorar mediante el modelado de temas porque agrupa palabras similares en lugar de usar cada palabra por separado como característica.
Sistemas de recomendación
Podemos construir sistemas de recomendación usando medidas de similitud.
Algoritmos de modelado de temas
Podemos implementar el modelado de temas utilizando los siguientes algoritmos:
Latent Dirichlet Allocation(LDA) - Es uno de los algoritmos más populares que utiliza los modelos gráficos probabilísticos para implementar el modelado de temas.
Latent Semantic Analysis(LDA) or Latent Semantic Indexing(LSI) - Se basa en Álgebra lineal y utiliza el concepto de SVD (Descomposición de valores singulares) en la matriz de términos del documento.
Non-Negative Matrix Factorization (NMF) - También se basa en Álgebra lineal como LDA.
Los algoritmos mencionados anteriormente tendrían los siguientes elementos:
- Número de temas: parámetro
- Matriz documento-palabra: entrada
- WTM (Word Topic Matrix) y TDM (Topic Document Matrix): Salida