Este notebook explora diversos temas de PNL utilizando la biblioteca NLTK en Python.
Proporcionar una comprensión básica de los chatbots, su arquitectura y casos de uso.
Entender los conceptos básicos del NLP y cómo se aplican en el desarrollo de chatbots.
El Procesamiento del Lenguaje Natural (NLP) es una rama de la inteligencia artificial que permite a las máquinas entender, interpretar y generar lenguaje humano.
La tokenización de palabras es el proceso de dividir un texto en palabras individuales.
import nltk
from nltk.tokenize import word_tokenize
nltk.download('punkt_tab')
nltk.download('punkt')
texto = "Hola, ¿cómo estás? Espero que estés bien."
tokens = word_tokenize(texto)
print(tokens)
La tokenización de frases es el proceso de dividir un texto en frases individuales.
from nltk.tokenize import sent_tokenize
texto = "Hola, ¿cómo estás? Espero que estés bien. Nos vemos luego."
frases = sent_tokenize(texto)
print(frases)
Las stop words son palabras comunes que se eliminan del texto para mejorar el análisis.
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
nltk.download('punkt_tab')
nltk.download('punkt')
nltk.download('stopwords')
texto = "El procesamiento de lenguaje natural es todo un mundo y útil en muchas aplicaciones."
stop_words = set(stopwords.words('spanish'))
palabras = word_tokenize(texto)
palabras_filtradas = [palabra for palabra in palabras if palabra.lower() not in stop_words]
print(palabras_filtradas)
TF-IDF (Term Frequency-Inverse Document Frequency) es una técnica para calcular la importancia de una palabra en un documento en relación con una colección de documentos.
from sklearn.feature_extraction.text import TfidfVectorizer
documentos = [
"El procesamiento de lenguaje natural es todo un mundo.",
"El lenguaje natural permite la comunicación entre humanos y máquinas.",
"Las técnicas de NLP mejoran la comprensión del texto."
]
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(documentos)
print(tfidf_matrix.toarray())
print(vectorizer.get_feature_names_out())
Word2Vec es una técnica para aprender representaciones vectoriales de palabras (word embeddings).
from gensim.models import Word2Vec
sentences = [["el", "procesamiento", "de", "lenguaje", "natural", "es", "todo", "un", "mundo"],
["el", "lenguaje", "natural", "permite", "la", "comunicación", "entre", "humanos", "y", "máquinas"]]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
vector = model.wv['lenguaje']
print(vector)
Los N-grams son secuencias de N palabras consecutivas en un texto.
import nltk
from nltk.util import ngrams
from collections import Counter
nltk.download('punkt_tab')
nltk.download('punkt')
texto = "El procesamiento de lenguaje natural es fascinante y útil en muchas aplicaciones."
tokens = nltk.word_tokenize(texto)
bigrams = list(ngrams(tokens, 2))
bigram_freq = Counter(bigrams)
print(bigrams)
print(bigram_freq)
NER es la tarea de identificar y clasificar entidades nombradas en un texto, como personas, organizaciones, ubicaciones, etc.
import spacy
nlp = spacy.load("es_core_news_sm")
texto = "Apple lanzó el nuevo iPhone en California el 13 de octubre"
doc = nlp(texto)
for entidad in doc.ents:
print(entidad.text, entidad.label_)
El análisis de sentimientos es la tarea de determinar la polaridad emocional de un texto (positivo, negativo o neutral).
from transformers import pipeline
clasificador = pipeline("sentiment-analysis")
texto = "te odio mucho"
resultado = clasificador(texto)
print(resultado)
Stemming es el proceso de reducir una palabra a su raíz o stem.
import nltk
from nltk.stem import SnowballStemmer
stemmer = SnowballStemmer("spanish")
palabras = ["corriendo", "jugando", "vida", "correis", "ostias", "jodido","mandado"]
stems = [stemmer.stem(palabra) for palabra in palabras]
print(stems)
La lematización es el proceso de reducir una palabra a su forma base o lema.
import nltk
from nltk.stem import WordNetLemmatizer
from nltk.corpus import wordnet
nltk.download('wordnet')
lemmatizer = WordNetLemmatizer()
palabras = ["running", "played", "better", "dogs"]
lemmas = [lemmatizer.lemmatize(palabra, pos=wordnet.VERB) for palabra in palabras]
print(lemmas)
El análisis sintáctico es el proceso de analizar la estructura gramatical de una oración.
import spacy
nlp = spacy.load("es_core_news_sm")
texto = "El gato negro corre rápidamente por el jardín."
doc = nlp(texto)
for token in doc:
print(f"Palabra: {token.text}, Etiqueta gramatical: {token.pos_}, Dependencia: {token.dep_}")
La similitud semántica es una medida de la relación entre dos palabras o frases en función de su significado.
import spacy
nlp = spacy.load("es_core_news_md")
palabra1 = nlp("suba pa arriba las escaleras")
palabra2 = nlp("spacy es un modelo de lenguaje natural")
print(f"Similitud entre {palabra1} y {palabra2}': {palabra1.similarity(palabra2)}")