diff --git a/python-chatgpt/README.md b/python-chatgpt/README.md index 5d14d94..cb88f06 100644 --- a/python-chatgpt/README.md +++ b/python-chatgpt/README.md @@ -178,12 +178,75 @@ for idx, opcion in enumerate(respuesta.choices): print(f"Respuesta {idx + 1}: {texto_generado}\n") ``` -3.3. - Procesar y analizar las respuestas de chatgpt +## 3.3. - Procesar y analizar las respuestas de chatgpt +### 3.3.1. - Analizar la respuesta +Vamos a utilizar bibliotecas python para mejorar el procesamiento del lenguaje natural de la respuesta: +- **SpaCy**: es una biblioteca de procesamiento del lenguaje natural (NLP) de código abierto y muy eficiente. Proporciona una amplia gama de funcionalidades para el procesamiento de texto, como el análisis morfológico, el etiquetado gramatical, el reconocimiento de entidades nombradas, el análisis de dependencias sintácticas, la lematización y la extracción de frases clave. SpaCy se destaca por su rendimiento rápido y su capacidad para procesar grandes volúmenes de texto de manera eficiente. *Documentación*: https://spacy.io/usage +- **TextBlob**: es una biblioteca de procesamiento del lenguaje natural (NLP) basada en NLTK. Ofrece una interfaz sencilla y fácil de usar para realizar tareas comunes de procesamiento de texto, como análisis de sentimientos, corrección ortográfica, tokenización, extracción de frases, lematización y etiquetado gramatical. TextBlob es conocido por su facilidad de uso y su capacidad para realizar tareas básicas de NLP con pocas líneas de código.* Documentación*: https://textblob.readthedocs.io/en/dev/ +- **NLTK (Natural Language Toolkit)**: es una biblioteca popular y ampliamente utilizada para el procesamiento del lenguaje natural en Python. Ofrece una amplia gama de herramientas y recursos para tareas de procesamiento de texto, como tokenización, etiquetado gramatical, lematización, análisis sintáctico, análisis de sentimientos, clasificación de texto, entre otras. NLTK también proporciona acceso a diversos corpus de texto y modelos pre-entrenados, lo que facilita el desarrollo y la experimentación en el campo del procesamiento del lenguaje natural. *Documentación*: https://www.nltk.org/ + +Se instalan con pip install y tendremos que añadirlas con import el en código. + +Escogemos spacy para realizar algunas pruebas. + +Se instalan con pip install spacy y tendremos que añadirlas con import spacy el en código. + +Escogemos el modelo en español en el código con: +```python +modelo_spacy = spacy.load("es_core_news_md") +``` +Este modelo también lo tenemos que instalar en la terminal +```shell +python3 -m spacy download es_core_news_md +``` + +Ahora imprimimos el analisis de la respuesta e imprimimos la lista de tokens, de categorías gramaticales y la relación de dependencia con su encabezado: +```python +analisis = modelo_spacy(texto_generado) +for token in analisis: + print(token.text, token.pos_, token.dep_, token.head.text) +``` + +![](img/python-chatgpt02.png) + +Ahora vamos a imprimir las entidades y las etiquetas que los categorizan, +```python +for ent in analisis.ents: + print(ent.text, ent.label_) +``` + +![](img/python-chatgpt03.png) + +### 3.3.2. - Utilizar la información extraída +Podemos utilizar la información que hemos extraído. Por ejemplo, puede sacar información de tipo LOC, de ubicación. Con lo cuál se puede generar una pregunta por cada etiqueta de este tipo. Por ejemplo: +```python +ubicacion = None + +for ent in analisis.ents: + # print(ent.text, ent.label_) + if ent.label_ == "LOC": + ubicacion = ent + break + +if ubicacion: + prompt2 = f"Dime más acerca de {ubicacion}" + respuesta2 = openai.Completion.create( + engine=modelo, + prompt=prompt2, + n=1, + temperature=1, + max_tokens=100 + ) + + print(respuesta2.choices[0].text.strip()) +``` + +![](img/python-chatgpt04.png) ## TEMA 4 - Aplicaciones Prácticas de Python + ChatGPT diff --git a/python-chatgpt/code/miPrograma.py b/python-chatgpt/code/miPrograma.py index 2bb58de..c715961 100644 --- a/python-chatgpt/code/miPrograma.py +++ b/python-chatgpt/code/miPrograma.py @@ -1,5 +1,6 @@ import os import openai +import spacy from dotenv import load_dotenv load_dotenv() @@ -13,22 +14,51 @@ openai.api_key = api_key # print(modelos) modelo = "text-davinci-002" -prompt = "Elige un buen nombre para un elefante" +prompt = "Cuenta una historia breve de algún lugar concreto" respuesta = openai.Completion.create( engine=modelo, prompt=prompt, - n=3, # Opcional. Número de respuestas + n=1, # Opcional. Número de respuestas temperature=1, # Opcional. Controla la creatividad de la respuesta - max_tokens=50 # Opcional. Número máximo de tokens en la respuesta + max_tokens=200 # Opcional. Número máximo de tokens en la respuesta ) # print(respuesta) -# texto_generado = respuesta['choices'][0]['text'] -# print(texto_generado) +texto_generado = respuesta.choices[0].text.strip() +print(texto_generado) -for idx, opcion in enumerate(respuesta.choices): - texto_generado = opcion.text.strip() - print(f"Respuesta {idx + 1}: {texto_generado}\n") +# for idx, opcion in enumerate(respuesta.choices): +# texto_generado = opcion.text.strip() +# print(f"Respuesta {idx + 1}: {texto_generado}\n") + +print("***") + +modelo_spacy = spacy.load("es_core_news_md") + +analisis = modelo_spacy(texto_generado) + +# for token in analisis: +# print(token.text, token.pos_, token.dep_, token.head.text) + +ubicacion = None + +for ent in analisis.ents: + # print(ent.text, ent.label_) + if ent.label_ == "LOC": + ubicacion = ent + break + +if ubicacion: + prompt2 = f"Dime más acerca de {ubicacion}" + respuesta2 = openai.Completion.create( + engine=modelo, + prompt=prompt2, + n=1, + temperature=1, + max_tokens=100 + ) + + print(respuesta2.choices[0].text.strip()) diff --git a/python-chatgpt/img/python-chatgpt02.png b/python-chatgpt/img/python-chatgpt02.png new file mode 100644 index 0000000..cc414b1 Binary files /dev/null and b/python-chatgpt/img/python-chatgpt02.png differ diff --git a/python-chatgpt/img/python-chatgpt03.png b/python-chatgpt/img/python-chatgpt03.png new file mode 100644 index 0000000..8595e2b Binary files /dev/null and b/python-chatgpt/img/python-chatgpt03.png differ diff --git a/python-chatgpt/img/python-chatgpt04.png b/python-chatgpt/img/python-chatgpt04.png new file mode 100644 index 0000000..a4b942f Binary files /dev/null and b/python-chatgpt/img/python-chatgpt04.png differ