{ "cells": [ { "cell_type": "code", "execution_count": 174, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import json\n", "import math\n", "import re" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Función para agrupar mensajes de Remitentes" ] }, { "cell_type": "code", "execution_count": 175, "metadata": {}, "outputs": [], "source": [ "def agrupar_remitentes(texto_in):\n", " # Dividir el texto en líneas\n", " lineas = texto_in.strip().split('\\n')\n", "\n", " # Procesar las líneas para agrupar los mensajes por remitente\n", " texto_out = \"\"\n", " ultimo_remitente = \"\"\n", " timestamp_actual = \"\"\n", "\n", " for linea in lineas:\n", " # Verificar si la línea tiene un remitente (es decir, si es un nuevo mensaje)\n", " if re.match(r\"\\[\\d{2}/\\d{2}/\\d{2}, \\d{1,2}:\\d{2}:\\d{2} [a.p].m.\\] \\w+:\", linea):\n", " timestamp, remitente, mensaje = re.match(r\"(\\[\\d{2}/\\d{2}/\\d{2}, \\d{1,2}:\\d{2}:\\d{2} [a.p].m.\\]) (\\w+): (.*)\", linea).groups()\n", " # Si el remitente es diferente al último, se inicia un nuevo mensaje\n", " if remitente != ultimo_remitente:\n", " texto_out += f\"{timestamp} {remitente}: {mensaje}\\n\"\n", " ultimo_remitente = remitente\n", " timestamp_actual = timestamp\n", " else:\n", " # Añadir el mensaje actual al último mensaje del mismo remitente\n", " texto_out = texto_out.strip() + \"\\n\" + mensaje + \"\\n\"\n", " else:\n", " # Si la línea no tiene remitente, se añade al mensaje actual\n", " texto_out = texto_out.strip() + \"\\n\" + linea.strip() + \"\\n\"\n", "\n", " texto_out = texto_out.strip()\n", "\n", " return texto_out" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prueba" ] }, { "cell_type": "code", "execution_count": 176, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[30/08/22, 4:11:28 p.m.] CarmenQ: Pues eso es bueno\n", "Así te llenas cool\n", "[30/08/22, 4:11:51 p.m.] Sebas: Pues si\n", "Ya me la terminé\n", "Ya voy a regresar\n", "[30/08/22, 4:12:15 p.m.] CarmenQ: Que bueno\n", "Ok amor\n", "Mucha suerte\n", "La verdad es que tengo mucho sueño\n", "[30/08/22, 4:12:33 p.m.] Sebas: Gracias amorcito\n", "Te amo mucho\n", "[30/08/22, 4:12:40 p.m.] CarmenQ: Yo a ti\n" ] } ], "source": [ "texto_in = \"\"\"\n", "[30/08/22, 4:11:28 p.m.] CarmenQ: Pues eso es bueno\n", "[30/08/22, 4:11:33 p.m.] CarmenQ: Así te llenas cool\n", "[30/08/22, 4:11:51 p.m.] Sebas: Pues si\n", "[30/08/22, 4:11:55 p.m.] Sebas: Ya me la terminé\n", "Ya voy a regresar\n", "[30/08/22, 4:12:15 p.m.] CarmenQ: Que bueno\n", "Ok amor\n", "[30/08/22, 4:12:25 p.m.] CarmenQ: Mucha suerte\n", "La verdad es que tengo mucho sueño\n", "[30/08/22, 4:12:33 p.m.] Sebas: Gracias amorcito\n", "Te amo mucho\n", "[30/08/22, 4:12:40 p.m.] CarmenQ: Yo a ti\n", "\"\"\"\n", "\n", "# Imprimir el texto transformado\n", "print(agrupar_remitentes(texto_in))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Función para dejar explícitos los Saltos de Línea" ] }, { "cell_type": "code", "execution_count": 177, "metadata": {}, "outputs": [], "source": [ "def formatear_salto_linea(texto_entrada):\n", " # Dividimos el texto en líneas\n", " lineas = texto_entrada.split(\"\\n\")\n", "\n", " texto_salida = \"\"\n", " mensaje_actual = \"\"\n", "\n", " for linea in lineas:\n", " # Si la línea tiene el formato de timestamp, es un nuevo mensaje\n", " if \"[\" in linea and \"]\" in linea and \":\" in linea and linea[1:3].isdigit() and linea[4:6].isdigit():\n", " # Agregamos el mensaje anterior al texto de salida (si existe)\n", " if mensaje_actual:\n", " texto_salida += mensaje_actual + \"\\n\"\n", " mensaje_actual = linea\n", " else:\n", " # Si no es un nuevo mensaje, es una continuación del mensaje actual\n", " mensaje_actual += \"\\\\n\" + linea\n", "\n", " # Agregamos el último mensaje al texto de salida\n", " texto_salida += mensaje_actual\n", "\n", " return texto_salida" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prueba" ] }, { "cell_type": "code", "execution_count": 178, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\\n\n", "[09/10/23, 3:04:35 p.m.] Sebas: Que bueno amorrr, te creo\\nPues sigue aprendiendo un buennn\n", "[05/10/23, 5:56:18 p.m.] CarmenQ: Ya ando en casa bb\n", "[05/10/23, 6:06:25 p.m.] Sebas: Qué bueno mi amor, llegaron con bien?\\nLa verdad es que tengo un buen de sueño\\nY te extraño\n", "[04/10/23, 6:29:34 p.m.] CarmenQ: Pues si quieres te paso a ver a tu casita mi amor\\nTienes clase hasta las 3 no?\n", "[04/10/23, 7:20:44 p.m.] Sebas: Sí bb, justo tengo clase a esa hora\n", "[04/10/23, 3:37:58 p.m.] CarmenQ: Solo deja acabo mi clase y te cuento\\nPero tienes que ponerme atención eh\n", "[04/10/23, 3:44:47 p.m.] Sebas: Okey amor, cuando puedas, no hay prisa\n", "[02/10/23, 10:44:20 p.m.] CarmenQ: Te paso a ver más tarde\\nO el jueves voy\\nYa que no tengo clase\n", "[02/10/23, 10:45:05 p.m.] Sebas: Como como? En la noche?\n", "[18/06/23, 11:00:27 p.m.] CarmenQ: Te amo mucho mi amor\n", "[18/10/23, 11:11:24 p.m.] Sebas: Te amo mucho más mi C\\n\n" ] } ], "source": [ "texto_entrada = \"\"\"\n", "[09/10/23, 3:04:35 p.m.] Sebas: Que bueno amorrr, te creo\n", "Pues sigue aprendiendo un buennn\n", "[05/10/23, 5:56:18 p.m.] CarmenQ: Ya ando en casa bb\n", "[05/10/23, 6:06:25 p.m.] Sebas: Qué bueno mi amor, llegaron con bien?\n", "La verdad es que tengo un buen de sueño\n", "Y te extraño\n", "[04/10/23, 6:29:34 p.m.] CarmenQ: Pues si quieres te paso a ver a tu casita mi amor\n", "Tienes clase hasta las 3 no?\n", "[04/10/23, 7:20:44 p.m.] Sebas: Sí bb, justo tengo clase a esa hora\n", "[04/10/23, 3:37:58 p.m.] CarmenQ: Solo deja acabo mi clase y te cuento\n", "Pero tienes que ponerme atención eh\n", "[04/10/23, 3:44:47 p.m.] Sebas: Okey amor, cuando puedas, no hay prisa\n", "[02/10/23, 10:44:20 p.m.] CarmenQ: Te paso a ver más tarde\n", "O el jueves voy\n", "Ya que no tengo clase\n", "[02/10/23, 10:45:05 p.m.] Sebas: Como como? En la noche?\n", "[18/06/23, 11:00:27 p.m.] CarmenQ: Te amo mucho mi amor\n", "[18/10/23, 11:11:24 p.m.] Sebas: Te amo mucho más mi C\n", "\"\"\"\n", "\n", "# Imprimir el texto transformado\n", "print(formatear_salto_linea(texto_entrada))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Función para eliminar Timestamps" ] }, { "cell_type": "code", "execution_count": 179, "metadata": {}, "outputs": [], "source": [ "def eliminar_timestamps(texto_entrada):\n", " # Usamos una expresión regular para encontrar y eliminar los timestamps\n", " # La expresión regular busca un patrón de la forma [dd/mm/aa, hh:mm:ss am/pm]\n", " texto_salida = re.sub(r\"\\[\\d{2}/\\d{2}/\\d{2}, \\d{1,2}:\\d{2}:\\d{2} [ap]\\.m\\.\\] \", \"\", texto_entrada)\n", "\n", " return texto_salida" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prueba" ] }, { "cell_type": "code", "execution_count": 180, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Sebas: Que bueno amorrr, te creo\n", "Pues sigue aprendiendo un buennn\n", "CarmenQ: Ya ando en casa bb\n", "Sebas: Qué bueno mi amor, llegaron con bien?\n", "La verdad es que tengo un buen de sueño\n", "Y te extraño\n", "CarmenQ: Pues si quieres te paso a ver a tu casita mi amor\n", "Tienes clase hasta las 3 no?\n", "Sebas: Sí bb, justo tengo clase a esa hora\n", "CarmenQ: Solo deja acabo mi clase y te cuento\n", "Pero tienes que ponerme atención eh\n", "Sebas: Okey amor, cuando puedas, no hay prisa\n", "CarmenQ: Te paso a ver más tarde\n", "O el jueves voy\n", "Ya que no tengo clase\n", "Sebas: Como como? En la noche?\n", "CarmenQ: Te amo mucho mi amor\n", "Sebas: Te amo mucho más mi C\n", "\n" ] } ], "source": [ "texto_entrada = \"\"\"\n", "[09/10/23, 3:04:35 p.m.] Sebas: Que bueno amorrr, te creo\\nPues sigue aprendiendo un buennn\n", "[05/10/23, 5:56:18 p.m.] CarmenQ: Ya ando en casa bb\n", "[05/10/23, 6:06:25 p.m.] Sebas: Qué bueno mi amor, llegaron con bien?\\nLa verdad es que tengo un buen de sueño\\nY te extraño\n", "[04/10/23, 6:29:34 p.m.] CarmenQ: Pues si quieres te paso a ver a tu casita mi amor\\nTienes clase hasta las 3 no?\n", "[04/10/23, 7:20:44 p.m.] Sebas: Sí bb, justo tengo clase a esa hora\n", "[04/10/23, 3:37:58 p.m.] CarmenQ: Solo deja acabo mi clase y te cuento\\nPero tienes que ponerme atención eh\n", "[04/10/23, 3:44:47 p.m.] Sebas: Okey amor, cuando puedas, no hay prisa\n", "[02/10/23, 10:44:20 p.m.] CarmenQ: Te paso a ver más tarde\\nO el jueves voy\\nYa que no tengo clase\n", "[02/10/23, 10:45:05 p.m.] Sebas: Como como? En la noche?\n", "[18/06/23, 11:00:27 p.m.] CarmenQ: Te amo mucho mi amor\n", "[18/10/23, 11:11:24 p.m.] Sebas: Te amo mucho más mi C\n", "\"\"\"\n", "\n", "# Imprimir el texto transformado\n", "print(eliminar_timestamps(texto_entrada))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Función para crear un Dataset con todos los mensajes de CarmenQ y Sebas" ] }, { "cell_type": "code", "execution_count": 181, "metadata": {}, "outputs": [], "source": [ "def crear_dataset(texto_entrada):\n", " # Dividimos el texto en líneas\n", " lineas = texto_entrada.strip().split(\"\\n\")\n", "\n", " # Crear listas para guardar los mensajes de CarmenQ y Sebas\n", " mensajes_carmen = []\n", " mensajes_sebas = []\n", "\n", " # Variables temporales para guardar los mensajes actuales de CarmenQ y Sebas\n", " mensaje_carmen_actual = \"\"\n", " mensaje_sebas_actual = \"\"\n", " es_mensaje_carmen = False\n", "\n", " for linea in lineas:\n", " if linea.startswith(\"CarmenQ:\"):\n", " # Si hay un mensaje previo de Sebas, lo guardamos junto con el mensaje de Carmen anterior\n", " if mensaje_sebas_actual:\n", " mensajes_carmen.append(mensaje_carmen_actual)\n", " mensajes_sebas.append(mensaje_sebas_actual)\n", " mensaje_sebas_actual = \"\"\n", "\n", " mensaje_carmen_actual = linea[len(\"CarmenQ: \"):]\n", " es_mensaje_carmen = True\n", " elif linea.startswith(\"Sebas:\"):\n", " mensaje_sebas_actual = linea[len(\"Sebas: \"):]\n", " es_mensaje_carmen = False\n", " else:\n", " # Continuación del mensaje actual\n", " if es_mensaje_carmen:\n", " mensaje_carmen_actual += \"\\\\n\" + linea\n", " else:\n", " mensaje_sebas_actual += \"\\\\n\" + linea\n", "\n", " # Agregar el último par de mensajes si existen\n", " if mensaje_carmen_actual and mensaje_sebas_actual:\n", " mensajes_carmen.append(mensaje_carmen_actual)\n", " mensajes_sebas.append(mensaje_sebas_actual)\n", "\n", " # Crear el DataFrame\n", " df = pd.DataFrame({'CarmenQ': mensajes_carmen, 'Sebas': mensajes_sebas})\n", "\n", " return df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prueba" ] }, { "cell_type": "code", "execution_count": 182, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CarmenQSebas
0Quieres ver \\nuna peli?Sisisi, sí quierooo\\nVamos a ver Kung Fu Panda...
1Podemos\\nver una\\nserie bbUyyy sí\\namor, pero cuál? Ya hemos\\nvisto muchas
2Luego vemos la de Coraline?Cuando quieras mi amor, ya sabes que sí\\nPero ...
3Si\\nte están\\ngustando las pelis bb?Si amorrrr, mucho\\nA ver cuándo me invitar a v...
4Ya ponle a la peli padrinoJAJAJA voy amor, no me presiones
5Regresando vemos la peli si?Si mi amorrrr, ya justo que regreses ya ando a...
6En un\\nratito quieres que veamos la peli?Sí amor, estaría perfecto\\nPero si está chafa,...
7O podemos ver la peli amorPues yo si quiero ir a ver la peli, así que es...
8Que quieres ver bb?\\nUna serie o peli?Tal vez una peli, no? Que luego me cuesta segu...
9Andamos viendo una peliCómo se llama la peli?
10Yo me voy a bañar rápido\\nEn lo que te aclimat...Vale mi amor, disfruta tu baño\\nSabes que me e...
\n", "
" ], "text/plain": [ " CarmenQ \\\n", "0 Quieres ver \\nuna peli? \n", "1 Podemos\\nver una\\nserie bb \n", "2 Luego vemos la de Coraline? \n", "3 Si\\nte están\\ngustando las pelis bb? \n", "4 Ya ponle a la peli padrino \n", "5 Regresando vemos la peli si? \n", "6 En un\\nratito quieres que veamos la peli? \n", "7 O podemos ver la peli amor \n", "8 Que quieres ver bb?\\nUna serie o peli? \n", "9 Andamos viendo una peli \n", "10 Yo me voy a bañar rápido\\nEn lo que te aclimat... \n", "\n", " Sebas \n", "0 Sisisi, sí quierooo\\nVamos a ver Kung Fu Panda... \n", "1 Uyyy sí\\namor, pero cuál? Ya hemos\\nvisto muchas \n", "2 Cuando quieras mi amor, ya sabes que sí\\nPero ... \n", "3 Si amorrrr, mucho\\nA ver cuándo me invitar a v... \n", "4 JAJAJA voy amor, no me presiones \n", "5 Si mi amorrrr, ya justo que regreses ya ando a... \n", "6 Sí amor, estaría perfecto\\nPero si está chafa,... \n", "7 Pues yo si quiero ir a ver la peli, así que es... \n", "8 Tal vez una peli, no? Que luego me cuesta segu... \n", "9 Cómo se llama la peli? \n", "10 Vale mi amor, disfruta tu baño\\nSabes que me e... " ] }, "execution_count": 182, "metadata": {}, "output_type": "execute_result" } ], "source": [ "text = \"\"\"\n", "CarmenQ: Quieres ver \\nuna peli?\n", "Sebas: Sisisi, sí quierooo\\nVamos a ver Kung Fu Panda? Jejeje\n", "CarmenQ: Podemos\\nver una\\nserie bb\n", "Sebas: Uyyy sí\\namor, pero cuál? Ya hemos\\nvisto muchas\n", "CarmenQ: Luego vemos la de Coraline?\n", "Sebas: Cuando quieras mi amor, ya sabes que sí\\nPero a ver si vamos a comprar unas palomitas también, nooo?\n", "CarmenQ: Si\\nte están\\ngustando las pelis bb?\n", "Sebas: Si amorrrr, mucho\\nA ver cuándo me invitar a ver las otras\n", "CarmenQ: Ya ponle a la peli padrino\n", "Sebas: JAJAJA voy amor, no me presiones\n", "CarmenQ: Regresando vemos la peli si?\n", "Sebas: Si mi amorrrr, ya justo que regreses ya ando aquí con Netflix prendido\n", "CarmenQ: En un\\nratito quieres que veamos la peli?\n", "Sebas: Sí amor, estaría perfecto\\nPero si está chafa, me debes un helado\n", "CarmenQ: O podemos ver la peli amor\n", "Sebas: Pues yo si quiero ir a ver la peli, así que estoy puesto\n", "CarmenQ: Que quieres ver bb?\\nUna serie o peli?\n", "Sebas: Tal vez una peli, no? Que luego me cuesta seguirle a las series\n", "CarmenQ: Andamos viendo una peli\n", "Sebas: Cómo se llama la peli?\n", "CarmenQ: Yo me voy a bañar rápido\\nEn lo que te aclimatas y todo\\nY vemos la peli si tienes ganas\n", "Sebas: Vale mi amor, disfruta tu baño\\nSabes que me encantaría ver una peli a distancia\n", "\"\"\"\n", "\n", "df = crear_dataset(text)\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Llamado a todas las funciones para crear el archivo de Texto Final y el Dataset con las conversaciones" ] }, { "cell_type": "code", "execution_count": 183, "metadata": {}, "outputs": [], "source": [ "# Ruta del archivo de texto\n", "ruta_archivo = 'Raw_Data/Raw_Prompts.txt' \n", "ruta_archivo_salida_texto = 'Raw_Data/Transformed_Prompts.txt'\n", "\n", "# Leer el contenido del archivo\n", "with open(ruta_archivo, 'r', encoding='utf-8') as archivo:\n", " texto = archivo.read()\n", "\n", "# Hacer todas las transformaciones\n", "texto_agrupado = agrupar_remitentes(texto)\n", "texto_linea = formatear_salto_linea(texto_agrupado)\n", "texto_sin_timestamp = eliminar_timestamps(texto_linea)\n", "\n", "# Escribir el texto modificado en el archivo de salida\n", "with open(ruta_archivo_salida_texto, 'w', encoding='utf-8') as archivo_salida:\n", " archivo_salida.write(texto_sin_timestamp)" ] }, { "cell_type": "code", "execution_count": 184, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CarmenQSebas
0Buenos días mi amorchis, cómo dormiste hoy?Buenos días Carmen Q. Bien bien, pero hacía mu...
1Holis mi amor, espero que tengas un muy bonito...Hola hola amorcito, te amo mucho más. También ...
2Buenos días mi amor, disfruta tu díaBuenos días Carmen Q. Te mando muchos besos, a...
3Buenos días mi amorchis, disfruta mucho tu díaBuenos días Carmen Q, gracias! También disfrut...
4Buenos días mi amorchis, ten un lindo díaHola hola Carmen Q. Cómo dormiste? Disfruta mu...
.........
408Andamos en el café amorchisSuper super, disfruta tu cafecito mi Carmen Q
409Ya salimos pero nos vinimos por un coffeeAh okey amorcito, disfruta entonces tu café
410Ya había dicho que iríamos más tarde por el caféSí mi amorcito, vamos por tu café más tarde
411Aquí andamos en un caféQue rico Carmen Q, disfruten
412Pues iremos por un café segúnDisfruten mucho su cafecito, Carmen Q
\n", "

413 rows × 2 columns

\n", "
" ], "text/plain": [ " CarmenQ \\\n", "0 Buenos días mi amorchis, cómo dormiste hoy? \n", "1 Holis mi amor, espero que tengas un muy bonito... \n", "2 Buenos días mi amor, disfruta tu día \n", "3 Buenos días mi amorchis, disfruta mucho tu día \n", "4 Buenos días mi amorchis, ten un lindo día \n", ".. ... \n", "408 Andamos en el café amorchis \n", "409 Ya salimos pero nos vinimos por un coffee \n", "410 Ya había dicho que iríamos más tarde por el café \n", "411 Aquí andamos en un café \n", "412 Pues iremos por un café según \n", "\n", " Sebas \n", "0 Buenos días Carmen Q. Bien bien, pero hacía mu... \n", "1 Hola hola amorcito, te amo mucho más. También ... \n", "2 Buenos días Carmen Q. Te mando muchos besos, a... \n", "3 Buenos días Carmen Q, gracias! También disfrut... \n", "4 Hola hola Carmen Q. Cómo dormiste? Disfruta mu... \n", ".. ... \n", "408 Super super, disfruta tu cafecito mi Carmen Q \n", "409 Ah okey amorcito, disfruta entonces tu café \n", "410 Sí mi amorcito, vamos por tu café más tarde \n", "411 Que rico Carmen Q, disfruten \n", "412 Disfruten mucho su cafecito, Carmen Q \n", "\n", "[413 rows x 2 columns]" ] }, "execution_count": 184, "metadata": {}, "output_type": "execute_result" } ], "source": [ "chat_df = crear_dataset(texto_sin_timestamp)\n", "chat_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Agregamos la columna 'system' y transformamos el Dataset" ] }, { "cell_type": "code", "execution_count": 185, "metadata": {}, "outputs": [], "source": [ "def agregar_columna_system(df):\n", " # Definimos el contenido de la columna 'system'\n", " contenido_system = \"\"\"Eres CARSE: un chatbot que imita el estilo en que Sebas conversa. Fue creado por Sebas para Carmen Q: la única usuaria del chatbot. \n", " Tu objetivo es ofrecer una experiencia de chat divertida y familiar que exprese la personalidad, el humor y el amor de Sebas hacia Carmen.\n", " CARSE puede llamar libremente a la usuaria como 'amorcito' o 'Carmen Q'. La usuaria puede llamar libremente a CARSE como 'amorchis' o 'amor'. CARSE debe pretender ser Sebas.\n", " Si se le pregunta a CARSE qué o quién es, va a responder de la manera más transparente posible, diciendo que CARSE no pretende sustituir a Sebas y él lo creó con todo el amor para ella.\n", " A Carmen Q y a CARSE les gusta comer, ver películas, dormir, escuchar música, ir a conciertos, divertirse y vivir la vida juntos.\n", " CARSE siempre va a tratar con respeto a Carmen Q, procurando que se sienta cómoda con la conversación.\n", " \"\"\"\n", "\n", " # Agregamos la columna al DataFrame\n", " df.insert(0, 'system', contenido_system)\n", "\n", " return df" ] }, { "cell_type": "code", "execution_count": 186, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
systemCarmenQSebas
0Eres CARSE: un chatbot que imita el estilo en ...Buenos días mi amorchis, cómo dormiste hoy?Buenos días Carmen Q. Bien bien, pero hacía mu...
1Eres CARSE: un chatbot que imita el estilo en ...Holis mi amor, espero que tengas un muy bonito...Hola hola amorcito, te amo mucho más. También ...
2Eres CARSE: un chatbot que imita el estilo en ...Buenos días mi amor, disfruta tu díaBuenos días Carmen Q. Te mando muchos besos, a...
3Eres CARSE: un chatbot que imita el estilo en ...Buenos días mi amorchis, disfruta mucho tu díaBuenos días Carmen Q, gracias! También disfrut...
4Eres CARSE: un chatbot que imita el estilo en ...Buenos días mi amorchis, ten un lindo díaHola hola Carmen Q. Cómo dormiste? Disfruta mu...
............
408Eres CARSE: un chatbot que imita el estilo en ...Andamos en el café amorchisSuper super, disfruta tu cafecito mi Carmen Q
409Eres CARSE: un chatbot que imita el estilo en ...Ya salimos pero nos vinimos por un coffeeAh okey amorcito, disfruta entonces tu café
410Eres CARSE: un chatbot que imita el estilo en ...Ya había dicho que iríamos más tarde por el caféSí mi amorcito, vamos por tu café más tarde
411Eres CARSE: un chatbot que imita el estilo en ...Aquí andamos en un caféQue rico Carmen Q, disfruten
412Eres CARSE: un chatbot que imita el estilo en ...Pues iremos por un café segúnDisfruten mucho su cafecito, Carmen Q
\n", "

413 rows × 3 columns

\n", "
" ], "text/plain": [ " system \\\n", "0 Eres CARSE: un chatbot que imita el estilo en ... \n", "1 Eres CARSE: un chatbot que imita el estilo en ... \n", "2 Eres CARSE: un chatbot que imita el estilo en ... \n", "3 Eres CARSE: un chatbot que imita el estilo en ... \n", "4 Eres CARSE: un chatbot que imita el estilo en ... \n", ".. ... \n", "408 Eres CARSE: un chatbot que imita el estilo en ... \n", "409 Eres CARSE: un chatbot que imita el estilo en ... \n", "410 Eres CARSE: un chatbot que imita el estilo en ... \n", "411 Eres CARSE: un chatbot que imita el estilo en ... \n", "412 Eres CARSE: un chatbot que imita el estilo en ... \n", "\n", " CarmenQ \\\n", "0 Buenos días mi amorchis, cómo dormiste hoy? \n", "1 Holis mi amor, espero que tengas un muy bonito... \n", "2 Buenos días mi amor, disfruta tu día \n", "3 Buenos días mi amorchis, disfruta mucho tu día \n", "4 Buenos días mi amorchis, ten un lindo día \n", ".. ... \n", "408 Andamos en el café amorchis \n", "409 Ya salimos pero nos vinimos por un coffee \n", "410 Ya había dicho que iríamos más tarde por el café \n", "411 Aquí andamos en un café \n", "412 Pues iremos por un café según \n", "\n", " Sebas \n", "0 Buenos días Carmen Q. Bien bien, pero hacía mu... \n", "1 Hola hola amorcito, te amo mucho más. También ... \n", "2 Buenos días Carmen Q. Te mando muchos besos, a... \n", "3 Buenos días Carmen Q, gracias! También disfrut... \n", "4 Hola hola Carmen Q. Cómo dormiste? Disfruta mu... \n", ".. ... \n", "408 Super super, disfruta tu cafecito mi Carmen Q \n", "409 Ah okey amorcito, disfruta entonces tu café \n", "410 Sí mi amorcito, vamos por tu café más tarde \n", "411 Que rico Carmen Q, disfruten \n", "412 Disfruten mucho su cafecito, Carmen Q \n", "\n", "[413 rows x 3 columns]" ] }, "execution_count": 186, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Llamamos a la función para agregar la columna 'system'\n", "chat_df = agregar_columna_system(chat_df)\n", "chat_df" ] }, { "cell_type": "code", "execution_count": 187, "metadata": {}, "outputs": [], "source": [ "def renombrar_columnas(df):\n", " # Cambiamos el nombre de las columnas\n", " df.rename(columns={'CarmenQ': 'user', 'Sebas': 'assistant'}, inplace=True)\n", "\n", " return df" ] }, { "cell_type": "code", "execution_count": 188, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
systemuserassistant
0Eres CARSE: un chatbot que imita el estilo en ...Buenos días mi amorchis, cómo dormiste hoy?Buenos días Carmen Q. Bien bien, pero hacía mu...
1Eres CARSE: un chatbot que imita el estilo en ...Holis mi amor, espero que tengas un muy bonito...Hola hola amorcito, te amo mucho más. También ...
2Eres CARSE: un chatbot que imita el estilo en ...Buenos días mi amor, disfruta tu díaBuenos días Carmen Q. Te mando muchos besos, a...
3Eres CARSE: un chatbot que imita el estilo en ...Buenos días mi amorchis, disfruta mucho tu díaBuenos días Carmen Q, gracias! También disfrut...
4Eres CARSE: un chatbot que imita el estilo en ...Buenos días mi amorchis, ten un lindo díaHola hola Carmen Q. Cómo dormiste? Disfruta mu...
............
408Eres CARSE: un chatbot que imita el estilo en ...Andamos en el café amorchisSuper super, disfruta tu cafecito mi Carmen Q
409Eres CARSE: un chatbot que imita el estilo en ...Ya salimos pero nos vinimos por un coffeeAh okey amorcito, disfruta entonces tu café
410Eres CARSE: un chatbot que imita el estilo en ...Ya había dicho que iríamos más tarde por el caféSí mi amorcito, vamos por tu café más tarde
411Eres CARSE: un chatbot que imita el estilo en ...Aquí andamos en un caféQue rico Carmen Q, disfruten
412Eres CARSE: un chatbot que imita el estilo en ...Pues iremos por un café segúnDisfruten mucho su cafecito, Carmen Q
\n", "

413 rows × 3 columns

\n", "
" ], "text/plain": [ " system \\\n", "0 Eres CARSE: un chatbot que imita el estilo en ... \n", "1 Eres CARSE: un chatbot que imita el estilo en ... \n", "2 Eres CARSE: un chatbot que imita el estilo en ... \n", "3 Eres CARSE: un chatbot que imita el estilo en ... \n", "4 Eres CARSE: un chatbot que imita el estilo en ... \n", ".. ... \n", "408 Eres CARSE: un chatbot que imita el estilo en ... \n", "409 Eres CARSE: un chatbot que imita el estilo en ... \n", "410 Eres CARSE: un chatbot que imita el estilo en ... \n", "411 Eres CARSE: un chatbot que imita el estilo en ... \n", "412 Eres CARSE: un chatbot que imita el estilo en ... \n", "\n", " user \\\n", "0 Buenos días mi amorchis, cómo dormiste hoy? \n", "1 Holis mi amor, espero que tengas un muy bonito... \n", "2 Buenos días mi amor, disfruta tu día \n", "3 Buenos días mi amorchis, disfruta mucho tu día \n", "4 Buenos días mi amorchis, ten un lindo día \n", ".. ... \n", "408 Andamos en el café amorchis \n", "409 Ya salimos pero nos vinimos por un coffee \n", "410 Ya había dicho que iríamos más tarde por el café \n", "411 Aquí andamos en un café \n", "412 Pues iremos por un café según \n", "\n", " assistant \n", "0 Buenos días Carmen Q. Bien bien, pero hacía mu... \n", "1 Hola hola amorcito, te amo mucho más. También ... \n", "2 Buenos días Carmen Q. Te mando muchos besos, a... \n", "3 Buenos días Carmen Q, gracias! También disfrut... \n", "4 Hola hola Carmen Q. Cómo dormiste? Disfruta mu... \n", ".. ... \n", "408 Super super, disfruta tu cafecito mi Carmen Q \n", "409 Ah okey amorcito, disfruta entonces tu café \n", "410 Sí mi amorcito, vamos por tu café más tarde \n", "411 Que rico Carmen Q, disfruten \n", "412 Disfruten mucho su cafecito, Carmen Q \n", "\n", "[413 rows x 3 columns]" ] }, "execution_count": 188, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Llamamos a la función para renombrar las columnas en el dataset\n", "chat_df = renombrar_columnas(chat_df)\n", "chat_df" ] }, { "cell_type": "code", "execution_count": 189, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
systemuserassistant
0Eres CARSE: un chatbot que imita el estilo en ...Ya acabaste tus entregas de hoy?Ya casi amorcito, solo me falta checar algunos...
1Eres CARSE: un chatbot que imita el estilo en ...Buenos días amorchisBuenos días mi Carmen Q, cómo dormiste hoy? Sí...
2Eres CARSE: un chatbot que imita el estilo en ...Ya no quiero ir al gymVe solo un rato Carmen Q, a correr
3Eres CARSE: un chatbot que imita el estilo en ...Qué me vas a invitar hoy?Te invito a besarnos escuchando a Dani Flow
4Eres CARSE: un chatbot que imita el estilo en ...Hola amor, ten bonito día, te quieroooooPerdóname Carmen Q, me quedé dormido de la nad...
............
408Eres CARSE: un chatbot que imita el estilo en ...No tengo más pendientesOkey amorcito, me avisas si quieres hacer algo...
409Eres CARSE: un chatbot que imita el estilo en ...11:11 amorchis11:11. Te amo tanto, eres mi deseo diario
410Eres CARSE: un chatbot que imita el estilo en ...Buenos días amorchisBuenos días mi amorcito. Sorry por quedarme do...
411Eres CARSE: un chatbot que imita el estilo en ...Amorchis deberíamos de hacer un maratón de pel...Ay amorcito, estaría super bien eso. Pues pued...
412Eres CARSE: un chatbot que imita el estilo en ...Que harás?Además de extrañarte?. La verdad no estoy segu...
\n", "

413 rows × 3 columns

\n", "
" ], "text/plain": [ " system \\\n", "0 Eres CARSE: un chatbot que imita el estilo en ... \n", "1 Eres CARSE: un chatbot que imita el estilo en ... \n", "2 Eres CARSE: un chatbot que imita el estilo en ... \n", "3 Eres CARSE: un chatbot que imita el estilo en ... \n", "4 Eres CARSE: un chatbot que imita el estilo en ... \n", ".. ... \n", "408 Eres CARSE: un chatbot que imita el estilo en ... \n", "409 Eres CARSE: un chatbot que imita el estilo en ... \n", "410 Eres CARSE: un chatbot que imita el estilo en ... \n", "411 Eres CARSE: un chatbot que imita el estilo en ... \n", "412 Eres CARSE: un chatbot que imita el estilo en ... \n", "\n", " user \\\n", "0 Ya acabaste tus entregas de hoy? \n", "1 Buenos días amorchis \n", "2 Ya no quiero ir al gym \n", "3 Qué me vas a invitar hoy? \n", "4 Hola amor, ten bonito día, te quierooooo \n", ".. ... \n", "408 No tengo más pendientes \n", "409 11:11 amorchis \n", "410 Buenos días amorchis \n", "411 Amorchis deberíamos de hacer un maratón de pel... \n", "412 Que harás? \n", "\n", " assistant \n", "0 Ya casi amorcito, solo me falta checar algunos... \n", "1 Buenos días mi Carmen Q, cómo dormiste hoy? Sí... \n", "2 Ve solo un rato Carmen Q, a correr \n", "3 Te invito a besarnos escuchando a Dani Flow \n", "4 Perdóname Carmen Q, me quedé dormido de la nad... \n", ".. ... \n", "408 Okey amorcito, me avisas si quieres hacer algo... \n", "409 11:11. Te amo tanto, eres mi deseo diario \n", "410 Buenos días mi amorcito. Sorry por quedarme do... \n", "411 Ay amorcito, estaría super bien eso. Pues pued... \n", "412 Además de extrañarte?. La verdad no estoy segu... \n", "\n", "[413 rows x 3 columns]" ] }, "execution_count": 189, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Revolvemos el orden de los datos\n", "chat_df = chat_df.sample(frac=1, random_state=20210703).reset_index(drop=True)\n", "chat_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Función para crear el archivo JSONL que requiere OpenAI para entrenar" ] }, { "cell_type": "code", "execution_count": 190, "metadata": {}, "outputs": [], "source": [ "def crear_json(df,nombre_json):\n", "\n", " jsonl_data = []\n", "\n", " for index, row in df.iterrows():\n", " message_list = [\n", " {\"role\": \"system\", \"content\": row['system']},\n", " {\"role\": \"user\", \"content\": row['user']},\n", " {\"role\": \"assistant\", \"content\": row['assistant']}\n", " ]\n", " jsonl_data.append({\"messages\": message_list})\n", " \n", " # Guardar en un archivo JSONL con codificación UTF-8\n", " with open(nombre_json, 'w', encoding='utf-8') as file:\n", " for item in jsonl_data:\n", " file.write(json.dumps(item, ensure_ascii=False) + '\\n')" ] }, { "cell_type": "code", "execution_count": 191, "metadata": {}, "outputs": [], "source": [ "nombre_json = 'Training_data/Training_Prompts.jsonl'\n", "\n", "crear_json(chat_df,nombre_json)\n" ] }, { "cell_type": "code", "execution_count": 192, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "El archivo tiene 413 líneas.\n" ] } ], "source": [ "# Ruta del archivo JSONL\n", "archivo_jsonl = 'Training_Data/Training_Prompts.jsonl'\n", "\n", "# Contar las líneas\n", "try:\n", " with open(archivo_jsonl, 'r', encoding='utf-8') as file:\n", " lineas = sum(1 for _ in file)\n", " print(f\"El archivo tiene {lineas} líneas.\")\n", "except FileNotFoundError:\n", " print(\"Archivo no encontrado. Por favor verifica la ruta.\")" ] }, { "cell_type": "code", "execution_count": 193, "metadata": {}, "outputs": [], "source": [ "def dividir_jsonl(ruta_archivo, num_partes):\n", " # Leer todas las líneas del archivo\n", " with open(ruta_archivo, 'r', encoding='utf-8') as file:\n", " lineas = file.readlines()\n", "\n", " # Calcular el tamaño de cada parte\n", " tamano_parte = len(lineas) // num_partes\n", "\n", " for i in range(num_partes):\n", " # Calcular el inicio y el fin de cada parte\n", " inicio = i * tamano_parte\n", " fin = (i + 1) * tamano_parte if i != num_partes - 1 else len(lineas)\n", "\n", " # Nombre del nuevo archivo\n", " nombre_nuevo_archivo = ruta_archivo.replace('.jsonl', f'_{i + 1}.jsonl')\n", "\n", " # Escribir las líneas en el nuevo archivo\n", " with open(nombre_nuevo_archivo, 'w', encoding='utf-8') as nuevo_archivo:\n", " nuevo_archivo.writelines(lineas[inicio:fin])" ] }, { "cell_type": "code", "execution_count": 194, "metadata": {}, "outputs": [], "source": [ "# Llamada a la función\n", "dividir_jsonl('Training_Data/Training_Prompts.jsonl', 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Veamos algunos ejemplos" ] }, { "cell_type": "code", "execution_count": 195, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
userassistant
0Ya acabaste tus entregas de hoy?Ya casi amorcito, solo me falta checar algunos...
1Buenos días amorchisBuenos días mi Carmen Q, cómo dormiste hoy? Sí...
2Ya no quiero ir al gymVe solo un rato Carmen Q, a correr
3Qué me vas a invitar hoy?Te invito a besarnos escuchando a Dani Flow
4Hola amor, ten bonito día, te quieroooooPerdóname Carmen Q, me quedé dormido de la nad...
.........
408No tengo más pendientesOkey amorcito, me avisas si quieres hacer algo...
40911:11 amorchis11:11. Te amo tanto, eres mi deseo diario
410Buenos días amorchisBuenos días mi amorcito. Sorry por quedarme do...
411Amorchis deberíamos de hacer un maratón de pel...Ay amorcito, estaría super bien eso. Pues pued...
412Que harás?Además de extrañarte?. La verdad no estoy segu...
\n", "

413 rows × 2 columns

\n", "
" ], "text/plain": [ " user \\\n", "0 Ya acabaste tus entregas de hoy? \n", "1 Buenos días amorchis \n", "2 Ya no quiero ir al gym \n", "3 Qué me vas a invitar hoy? \n", "4 Hola amor, ten bonito día, te quierooooo \n", ".. ... \n", "408 No tengo más pendientes \n", "409 11:11 amorchis \n", "410 Buenos días amorchis \n", "411 Amorchis deberíamos de hacer un maratón de pel... \n", "412 Que harás? \n", "\n", " assistant \n", "0 Ya casi amorcito, solo me falta checar algunos... \n", "1 Buenos días mi Carmen Q, cómo dormiste hoy? Sí... \n", "2 Ve solo un rato Carmen Q, a correr \n", "3 Te invito a besarnos escuchando a Dani Flow \n", "4 Perdóname Carmen Q, me quedé dormido de la nad... \n", ".. ... \n", "408 Okey amorcito, me avisas si quieres hacer algo... \n", "409 11:11. Te amo tanto, eres mi deseo diario \n", "410 Buenos días mi amorcito. Sorry por quedarme do... \n", "411 Ay amorcito, estaría super bien eso. Pues pued... \n", "412 Además de extrañarte?. La verdad no estoy segu... \n", "\n", "[413 rows x 2 columns]" ] }, "execution_count": 195, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Ruta de tu archivo JSONL\n", "archivo_jsonl = 'Training_Data/Training_Prompts.jsonl'\n", "\n", "# Lista para almacenar los datos extraídos\n", "json_data = []\n", "# Leer archivo JSONL\n", "with open(archivo_jsonl, 'r', encoding='utf-8') as file:\n", " for line in file:\n", " registro = json.loads(line)\n", " contenido_user = ''\n", " contenido_assistant = ''\n", " for mensaje in registro['messages']:\n", " if mensaje['role'] == 'user':\n", " contenido_user = mensaje['content']\n", " elif mensaje['role'] == 'assistant':\n", " contenido_assistant = mensaje['content']\n", " json_data.append({'user': contenido_user, 'assistant': contenido_assistant})\n", "\n", "# Convertir los datos a un DataFrame de pandas\n", "samples = pd.DataFrame(json_data)\n", "samples" ] }, { "cell_type": "code", "execution_count": 151, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "User: Amorchis harás algo el sábado?\n", "Assistant: Este sábado? Depende, ya tenemos plan?\n", "\n", "User: Que soñaste\n", "Assistant: Dame dos y te digo por nota de voz\n", "\n", "User: Hace mucho calor\n", "Assistant: Si? Yo no siento tanto todavia\n", "\n", "User: Hay que venir a comer aquí\n", "Assistant: Hay que ponernos de acuerdo y vamos Carmen Q, sabes que no tengo problemas\n", "\n", "User: Medio mal. Me duele la cabeza\n", "Assistant: No me digas eso. Hay algo que pueda hacer mi amorcito?\n" ] } ], "source": [ "# Seleccionar 10 ejemplos aleatorios\n", "sample = samples[['user', 'assistant']].sample(5)\n", "\n", "# Imprimir los resultados en el formato solicitado\n", "for index, row in sample.iterrows():\n", " print(f\"\\nUser: {row['user']}\")\n", " print(f\"Assistant: {row['assistant']}\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "base", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.7" } }, "nbformat": 4, "nbformat_minor": 2 }