La tokenización es el proceso de dividir un texto en palabras, frases o elementos más pequeños llamados tokens.
Podemos usar la biblioteca nltk para tokenizar un texto en palabras:
import nltk
from nltk.tokenize import word_tokenize
nltk.download('punkt')
nltk.download('punkt_tab')
texto = "Hola, ¿cómo estás? Espero que estés bien."
tokens = word_tokenize(texto)
print(tokens)
También podemos dividir el texto en frases:
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)
Estos procesos permiten reducir las palabras a su forma base o raíz.
El stemming reduce una palabra a su raíz eliminando sufijos. Usaremos nltk:
import nltk
from nltk.stem import PorterStemmer
stemmer = PorterStemmer()
palabras = ["running", "played", "playing", "happily"]
stems = [stemmer.stem(palabra) for palabra in palabras]
print(stems)
El stemming reduce una palabra a su raíz eliminando sufijos. Usaremos nltk:
import nltk
from nltk.stem import PorterStemmer
from nltk.stem import SnowballStemmer
stemmer = SnowballStemmer("spanish")
palabras = ["corriendo", "corri", "correremos", "correr", "corre", "correspondencia","correa"]
stems = [stemmer.stem(palabra) for palabra in palabras]
print(stems)
La lematización reduce una palabra a su forma base teniendo en cuenta su significado. Usaremos WordNetLemmatizer:
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 (parsing) estructura una oración según la gramática de un idioma. En Python, usamos spaCy para identificar la estructura gramatical.
Utilizaremos spaCy para analizar la estructura de una oración en español.
import spacy
# Cargar modelo en español
spacy.cli.download("es_core_news_sm")
nlp = spacy.load("es_core_news_sm")
texto = "El gato negro corre rápidamente por el jardín."
doc = nlp(texto)
# Mostrar análisis sintáctico
for token in doc:
print(f"Palabra: {token.text}, Etiqueta gramatical: {token.pos_}, Dependencia: {token.dep_}")
El análisis semántico interpreta el significado de las palabras y sus relaciones en un texto.
Podemos usar spaCy para calcular la similitud semántica entre palabras.
import spacy
spacy.cli.download("es_core_news_md")
nlp = spacy.load("es_core_news_md")
palabra1 = nlp("perro")
palabra2 = nlp("lobo")
print(f"Similitud entre 'perro' y 'lobo': {palabra1.similarity(palabra2)}")
import spacy
spacy.cli.download("es_core_news_sm")
nlp = spacy.load("en_core_web_sm")
doc = nlp("Chatbots are revolutionizing customer service.")
for token in doc:
print(token.text, token.lemma_, token.pos_)
El NLP consta de varias etapas clave:
Algunos modelos populares en NLP incluyen:
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("Chatbots are revolutionizing customer service.")
for token in doc:
print(token.text, token.lemma_, token.pos_)
Existen diversas herramientas para NLP, como:
Implementar un chatbot básico utilizando bibliotecas de Python.
Instalación de bibliotecas necesarias.
pip install rasa
# domain.yml
intents:
- greet
- ask_weather
responses:
utter_greet:
- text: "Hello! How can I help you today?"
utter_ask_weather:
- text: "The weather is sunny."
stories:
- story: greet user
steps:
- intent: greet
- action: utter_greet
rasa train
rasa shell