├── README.md ├── requirements.txt └── tata.py /README.md: -------------------------------------------------------------------------------- 1 | # Bot de Aprendizaje con Preguntas y Respuestas en Python 2 | 3 | Este bot es capaz de responder preguntas basadas en una base de datos predefinida y también puede **aprender** nuevas preguntas y respuestas. 4 | 5 | # Estructura del codigo: 6 | 7 | GIF 8 | 9 | **Conexión a la base de datos:** En esta sección, establecemos una conexión a la base de datos SQLite y creamos una tabla para almacenar las preguntas y respuestas. 10 | 11 | **Función get_answer:** Esta función recibe una pregunta como entrada y busca la mejor coincidencia en la base de datos. Si encuentra una coincidencia, devuelve la respuesta correspondiente. De lo contrario, devuelve None. 12 | 13 | **Función learn:** Esta función permite al bot aprender nuevas preguntas y respuestas. El usuario ingresa una respuesta, y la función la inserta en la base de datos. 14 | 15 | **Función main:** Esta función es el punto de entrada del programa. Muestra un mensaje de bienvenida y luego entra en un bucle donde espera la entrada del usuario. Dependiendo de la entrada del usuario, el programa puede aprender nuevas preguntas y respuestas, buscar una respuesta en la base de datos o finalizar la ejecución. 16 | 17 | # Excel 18 | 19 | Este Excel automatiza el aprendizaje del bot, en el excel debes tener dos columnas, una que diga "Pregunta" y la otra "Respuesta" puedes buscar una cantidad inmensa de preguntas y respuestas para digitar en esas dos columnas, una vez ingresado esos datos lo DEBES guardar como **"datos.xlsx"** 20 | 21 | # Excel en la misma carpeta del bot 22 | 23 | Si tienes el archivo de Excel en la misma carpeta donde está ejecutando el bot, solo debes indicar que sí quieres cargar un Excel pero que no está en una ruta especifica, automaticamente el bot asumirá que el excel estará en la ruta actual del bot y se cargarán dichos datos. 24 | 25 | Automaticamente la información guardada en el excel se pasará a la base de datos del bot, y si el bot aprende nuevas respuestas, al momento de ejecutar el comando "salir". Se guardará toda la nueva información que aprendió el bot tanto en la base de datos del bot como en el archivo de Excel. 26 | 27 | # Excel en una ruta Especifica 28 | 29 | Si tienes el archivo de Excel en una ruta específica, debes indicar que sí quieres cargar un Excel de una ruta especifica y luego indicas en qué ruta está ubicado. Ejemplo: 30 | 31 | ```bash 32 | /home/user/Desktop/datos.xlsx 33 | ``` 34 | 35 | Automaticamente la información guardada en el excel se pasará a la base de datos del bot, y si el bot aprende nuevas respuestas, al momento de ejecutar el comando "salir". Se guardará toda la nueva información que aprendió el bot tanto en la base de datos del bot como en el archivo de Excel. 36 | 37 | 38 | ## Instalación 39 | 40 | Clonamos el repositorio 41 | ```bash 42 | git clone https://github.com/Yextep/Learning-Bot 43 | ``` 44 | Accedemos a la carpeta 45 | ```bash 46 | cd Learning-Bot 47 | ``` 48 | Instalamos requerimientos 49 | ```bash 50 | pip install -r requirements.txt 51 | ``` 52 | Actualizamos la biblioteca xlsxwriter a la última versión compatible con Pandas 53 | ```bash 54 | pip install --upgrade xlsxwriter 55 | ``` 56 | Ejecutamos el bot 57 | ```bash 58 | python3 tata.py 59 | ``` 60 | 61 | 62 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | nltk 2 | scikit-learn 3 | pandas 4 | openpyxl 5 | xlsxwriter 6 | -------------------------------------------------------------------------------- /tata.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | import difflib 3 | import pandas as pd 4 | import os 5 | 6 | # Conectar a la base de datos 7 | conn = sqlite3.connect('base.db') 8 | c = conn.cursor() 9 | 10 | # Crear una tabla para almacenar preguntas y respuestas 11 | c.execute('''CREATE TABLE IF NOT EXISTS base (question TEXT, answer TEXT)''') 12 | 13 | # Inicializar una lista para almacenar los datos del usuario 14 | user_data = [] 15 | 16 | # Función para obtener la respuesta de la base de datos o None si no se encuentra 17 | def get_answer(question): 18 | c.execute("SELECT question, answer FROM base") 19 | data = c.fetchall() 20 | best_match = difflib.get_close_matches(question, [row[0] for row in data], n=1, cutoff=0.8) 21 | if best_match: 22 | best_match = best_match[0] 23 | idx = [row[0] for row in data].index(best_match) 24 | return data[idx][1] 25 | return None 26 | 27 | # Función para que el bot aprenda 28 | def learn(): 29 | question = input("Pregunta: ") 30 | if question.lower() == 'salir': 31 | return False 32 | response = input("Respuesta: ") 33 | c.execute("INSERT INTO base VALUES (?, ?)", (question, response)) 34 | conn.commit() 35 | user_data.append([question, response]) # Agregar datos a la lista 36 | print("Aprendido. ¿Puedo ayudarte con algo más?") 37 | return True 38 | 39 | # Función para cargar datos desde un archivo Excel a la base de datos 40 | def load_from_excel(file_path): 41 | try: 42 | data = pd.read_excel(file_path) 43 | for index, row in data.iterrows(): 44 | question = str(row['Pregunta']) 45 | answer = str(row['Respuesta']) 46 | c.execute("INSERT INTO base VALUES (?, ?)", (question, answer)) 47 | conn.commit() 48 | print("Datos cargados desde el archivo Excel.") 49 | except Exception as e: 50 | print(f"Error al cargar datos desde el archivo Excel: {str(e)}") 51 | 52 | # Función para guardar datos en un archivo Excel 53 | def save_to_excel(data, file_path): 54 | try: 55 | df = pd.DataFrame(data, columns=['Pregunta', 'Respuesta']) 56 | if os.path.isfile(file_path): 57 | existing_data = pd.read_excel(file_path) 58 | updated_data = pd.concat([existing_data, df], ignore_index=True) 59 | updated_data.to_excel(file_path, index=False) 60 | else: 61 | df.to_excel(file_path, index=False) 62 | print(f"Datos guardados en el archivo Excel '{file_path}'.") 63 | except Exception as e: 64 | print(f"Error al guardar datos en el archivo Excel: {str(e)}") 65 | 66 | def main(): 67 | print("¡Hola! Soy Tata, tu amigable bot de asistencia ¿En qué puedo ayudarte hoy?. Escribe 'salir' para finalizar.") 68 | 69 | # Pregunta al usuario si desea cargar datos desde un archivo Excel 70 | load_excel = input("¿Desea cargar una base de datos desde un archivo Excel? (si/no): ") 71 | if load_excel.lower() == 'si': 72 | file_path = input("¿El archivo Excel está en una ruta específica? (si/no): ") 73 | if file_path.lower() == 'si': 74 | excel_file_path = input("Por favor, ingrese la ruta del archivo Excel: ") 75 | else: 76 | excel_file_path = 'datos.xlsx' # Verifica en la ruta actual 77 | 78 | if os.path.isfile(excel_file_path): 79 | # Cargar datos desde el archivo Excel 80 | load_from_excel(excel_file_path) 81 | else: 82 | print("No se encontró un archivo Excel en la ruta especificada o en la ruta actual. Continuando sin cargar datos.") 83 | 84 | while True: 85 | user_input = input("Tú: ") 86 | if user_input.lower() == 'aprender': 87 | if not learn(): 88 | break 89 | elif user_input.lower() == 'salir': 90 | if load_excel.lower() == 'si': 91 | if user_data: 92 | try: 93 | save_to_excel(user_data, excel_file_path) 94 | except Exception as e: 95 | print(f"Error al guardar datos en el archivo Excel: {str(e)}") 96 | break 97 | else: 98 | response = get_answer(user_input) 99 | if response: 100 | print("Tata: " + response) 101 | else: 102 | print("Tata: No sé la respuesta. ¿Puedes proporcionarme información?") 103 | # El bot hará una pregunta 104 | question = user_input 105 | response = input("Respuesta: ") 106 | user_data.append([question, response]) 107 | c.execute("INSERT INTO base VALUES (?, ?)", (question, response)) 108 | conn.commit() 109 | print("Aprendido. ¿Puedo ayudarte con algo más?") 110 | 111 | conn.close() 112 | 113 | if __name__ == "__main__": 114 | main() 115 | --------------------------------------------------------------------------------