Introducción al Procesamiento de Lenguaje Natural

1

Fundamentos del Procesamiento de Lenguaje Natural con Python y NLTK

2

Evolución y Técnicas del Procesamiento del Lenguaje Natural

3

Procesamiento del Lenguaje Natural con Python y NLTK

Fundamentos con NLTK

4

Procesamiento de Lenguaje Natural con Python en Google Colab

5

Expresiones Regulares en Python: Patrones de Búsqueda Avanzados

6

Tokenización de Texto con Expresiones Regulares en Python

7

Estadística para Procesamiento del Lenguaje: Riqueza Léxica y Métricas

8

Cálculo de frecuencias con NLTK y diccionarios en Python

9

Filtrado y Visualización de Frecuencias de Palabras con NLTK y NumPy

10

Estadísticas de Ennegramas y Colocaciones en Textos

11

Extracción de Ngramas y Bigramas con NLTK en Python

12

Análisis de Colocaciones con NLTK y Pandas en Python

13

Visualización de Colocaciones en Textos con Pandas y Plotly

14

Identificación de Colocaciones en Textos con NLTK y PMI

15

Recursos Léxicos: Uso y Aplicación en Procesamiento del Lenguaje

16

Recursos Léxicos en Python: Vocabularios, Frecuencias y Stopwords

17

Traducción de palabras con Swadesh en procesamiento de lenguaje natural

18

Uso de WarNet para Procesamiento del Lenguaje Natural

19

Análisis de Sinsets e Hipónimos con NLTK y WordNet en Google Colab

20

Medición de Similitud Semántica con WordNet en Python

21

Extracción y Procesamiento de Texto desde Páginas Web con NLTK

22

Organización de Código en Google Colab con Funciones y Módulos

23

Funciones y Buenas Prácticas en Google Colab y Python

Perspectivas de lo que viene

24

Fundamentos del Procesamiento del Lenguaje Natural con NLTK

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Recursos Léxicos en Python: Vocabularios, Frecuencias y Stopwords

16/24
Recursos

¿Qué son los recursos léxicos y cómo se clasifican?

Los recursos léxicos son colecciones de palabras que contienen información sobre su uso, categoría léxica y contexto, lo cual es vital al trabajar con procesamiento de lenguaje natural (NLP, por sus siglas en inglés). Comprender su clasificación y aplicaciones es crucial para mejorar nuestros modelos y análisis de texto. Estos se dividen en dos categorías principales:

  • Recursos léxicos no enriquecidos: Se limitan a listas de palabras sin información adicional. Un ejemplo común es el vocabulario, que es simplemente una lista ordenada y única de palabras de un corpus.
  • Recursos léxicos enriquecidos: Además de contener las palabras, ofrecen metadatos, como frecuencias de aparición. Las distribuciones de palabras y los stopwords son ejemplos notables de esta categoría.

¿Cómo implementar la eliminación de stopwords en Python?

Eliminar las stopwords es esencial para procesar texto de manera significativa, ya que estas palabras comunes no aportan información relevante. La librería NLTK facilita esta tarea al proporcionar una lista de stopwords para distintos idiomas. Veamos cómo se lleva a cabo el proceso:

import nltk
from nltk.corpus import stopwords

# Definimos la función que calculará el porcentaje de stopwords en un texto
def stopwords_porcentaje(texto):
    # Seleccionar las stopwords en el idioma requerido, aquí usamos inglés
    stop_words = set(stopwords.words('english'))
    
    # Filtrar el texto eliminando cualquier stopword
    contenido_filtrado = [w for w in texto if w.lower() not in stop_words]
    
    # Calcular el porcentaje de stopwords
    return len(contenido_filtrado) / len(texto)

# Aplicar la función sobre un texto, por ejemplo, el libro Moby Dick
texto = nltk.book.text1
print(f"Porcentaje de stopwords: {stopwords_porcentaje(texto)}")

¿Por qué es fundamental el uso de recursos léxicos en NLP?

El uso de recursos léxicos es esencial para mejorar la precisión y eficiencia en el procesamiento del lenguaje. Estas son algunas de las razones clave para implementar recursos léxicos en tus proyectos de NLP:

  1. Optimización del procesamiento: Reducen el tamaño del texto a procesar al eliminar palabras no esenciales, mejorando el rendimiento computacional.
  2. Mejora del análisis semántico: Permiten destacar patrones de uso en el lenguaje, identificando componentes clave en textos extensos.
  3. Facilitan la creación de modelos más precisos: Los recursos enriquecidos ayudan a construir modelos lingüísticos que entienden mejor el contexto y el significado.

En conclusión, dominar el uso de recursos léxicos es crucial para cualquier profesional interesado en el procesado de datos textuales. Instamos a todos a experimentar y aplicar estos conceptos en sus propios proyectos para seguir avanzando en este fascinante campo.

Aportes 10

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Tengo una duda.
Si en el content estoy tomando solo las palabras que no esten en stopwd, ¿ Como es que len(content)/len(text) es el porcentaje de stopwords?, ¿no deberia ser 1 - len(content)/len(text)?

Exacto, como mencionan otros estudiantes, la funcion stopwords_percentage tal y como esta en la clase devuelve la cantidad de palabras que no son stopwords.

Para arreglarlo como ya mencionaron otros estudiantes, se pudiera cambiar la condicion del list comprehension de not in a in

O cambiar len(content)/len(text) a 1 - len(content)/len(text)

def stopwords_percentage(text):

  stopwd = stopwords.words('english')
  # content = [w  for w in text if w.lower() not in stopwd]
  content = [w  for w in text if w.lower()  in stopwd]
  return len(content)/len(text)

Sólo quitamos el not y listo
Porcentaje de stop words

  • Recursos léxicos

    Colecciones de palabras o frases que puede o no contener metadatos de la colección

    ejemplo

    Le puedes decir que se calle que ame va a enloquecer

    Calle[verbo] conjugación del verbo callar

    Ten cuidado al cruzar la calle porque el semáforo esta en rojo

    Calle[sustantivo] Referencia al espacio publico por donde hay transito

    • Cuando tenemos una palabra con multiples significados es recomendable agrupas a estas en un lexicon
  • Librerias

    import nltk
    nltk.download('book')
    from nltk.book import *
    from nltk.corpus import stopwords
    
  • Vocabulario y frecuencia

    # eL VOCABULARIO SON PALABRAS UNICAS EN EL CORPUS
    
    vocab= sorted(set(text1))
    vocab
    
    #Distribucion es la frecuencia en que aparece una palabra
    
    word_freq= FreqDist(text1)
    
  • Uso de stopwords (porcentaje)

    def stopwords_percentage(text):
        stopwd= stopwords.words('english')
        content  = [w for w in text if w.lower() in stopwd]
        return len(content)/len(text)
    
  • Uso de la funcion

    stopwords_percentage(text1)
    

Saber de los stopwords me hubiera sido tan util hace un año cuando implementé en PHP a mano limpia (y sucia) una coleccion de “stopwords” sin saberlo. 🤦‍♂️

Vocabulario: Lista donde tenemos todas las palabras únicas de un corpus.

Ahí en esa parte dentro de la función, aún aparece la confusión que hizo el usuario ** gersonrpq**.

Comprobe jugando con el “not in” y el “in” dentro del objeto “content” y me salió que el porcentaje de stopwords es de 47% (0.471…):

content = [word for word in text if word.lower() in stopwd]

Y el resto del contenido del texto, un 53% (0.528…)

content = [word for word in text if word.lower() not in stopwd]

Y así le encontré sentido a la función. Lo que sumado ambos porcentajes da 100%.
Saludos.

Se debe tener en cuenta que la variable content esta almacenando las palabras que no son stopwords. Por lo tanto, para tener el cálculo de porcentaje de stopwords debemos tomar 1 - el resultado obtenido, así: def stopwords\_percentage(text):  stopwd = stopwords.words('english')  content = \[w for w in text if w.lower() not in stopwd] return **1-(len(content)/  len(text))**
```js words_without_stopwords = [word for word in tokens if word.lower() not in stop_words and word.isalpha()] total_words = len(tokens) non_stopword_words = len(words_without_stopwords) percentage_non_stopwords = (non_stopword_words / total_words) * 100 print(f"Total de palabras en el texto: {total_words}") print(f"Total de palabras que no son stopwords: {non_stopword_words}") print(f"Porcentaje de palabras que no son stopwords: {percentage_non_stopwords:.2f}%") ```Total de palabras en el texto: 263333 Total de palabras que no son stopwords: 110390 Porcentaje de palabras que no son stopwords: 41.92%
words\_without\_stopwords = \[word for word in tokens if word.lower() not in stop\_words and word.isalpha()]total\_words = len(tokens)non\_stopword\_words = len(words\_without\_stopwords) percentage\_non\_stopwords = (non\_stopword\_words / total\_words) \* 100 print(f"Total de palabras en el texto: {total\_words}")print(f"Total de palabras que no son stopwords: {non\_stopword\_words}")print(f"Porcentaje de palabras que no son stopwords: {percentage\_non\_stopwords:.2f}%")