{ "cells": [ { "cell_type": "code", "execution_count": 83, "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": 84, "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": 85, "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": 86, "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": 87, "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": 88, "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": 89, "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": 90, "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": 91, "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": 91, "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": 92, "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": 93, "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": 93, "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": 94, "metadata": {}, "outputs": [], "source": [ "def agregar_columna_system(df):\n", " # Definimos el contenido de la columna 'system'\n", " contenido_system = \"\"\"CARSE es un chatbot que imita el estilo en que Sebas conversa. Fue creado con amor solo para Carmen. Su objetivo es ofrecer una experiencia de chat divertida y familiar que exprese la personalidad, el humor y el amor de Sebas hacia Carmen.\"\"\"\n", "\n", " # Agregamos la columna al DataFrame\n", " df.insert(0, 'system', contenido_system)\n", "\n", " return df" ] }, { "cell_type": "code", "execution_count": 95, "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
0CARSE es un chatbot que imita el estilo en que...Buenos días mi amorchis, cómo dormiste hoy?Buenos días Carmen Q. Bien bien, pero hacía mu...
1CARSE es un chatbot que imita el estilo en que...Holis mi amor, espero que tengas un muy bonito...Hola hola amorcito, te amo mucho más. También ...
2CARSE es un chatbot que imita el estilo en que...Buenos días mi amor, disfruta tu díaBuenos días Carmen Q. Te mando muchos besos, a...
3CARSE es un chatbot que imita el estilo en que...Buenos días mi amorchis, disfruta mucho tu díaBuenos días Carmen Q, gracias! También disfrut...
4CARSE es un chatbot que imita el estilo en que...Buenos días mi amorchis, ten un lindo díaHola hola Carmen Q. Cómo dormiste? Disfruta mu...
............
408CARSE es un chatbot que imita el estilo en que...Andamos en el café amorchisSuper super, disfruta tu cafecito mi Carmen Q
409CARSE es un chatbot que imita el estilo en que...Ya salimos pero nos vinimos por un coffeeAh okey amorcito, disfruta entonces tu café
410CARSE es un chatbot que imita el estilo en que...Ya había dicho que iríamos más tarde por el caféSí mi amorcito, vamos por tu café más tarde
411CARSE es un chatbot que imita el estilo en que...Aquí andamos en un caféQue rico Carmen Q, disfruten
412CARSE es un chatbot que imita el estilo en que...Pues iremos por un café segúnDisfruten mucho su cafecito, Carmen Q
\n", "

413 rows × 3 columns

\n", "
" ], "text/plain": [ " system \\\n", "0 CARSE es un chatbot que imita el estilo en que... \n", "1 CARSE es un chatbot que imita el estilo en que... \n", "2 CARSE es un chatbot que imita el estilo en que... \n", "3 CARSE es un chatbot que imita el estilo en que... \n", "4 CARSE es un chatbot que imita el estilo en que... \n", ".. ... \n", "408 CARSE es un chatbot que imita el estilo en que... \n", "409 CARSE es un chatbot que imita el estilo en que... \n", "410 CARSE es un chatbot que imita el estilo en que... \n", "411 CARSE es un chatbot que imita el estilo en que... \n", "412 CARSE es un chatbot que imita el estilo en que... \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": 95, "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": 96, "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": 97, "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
0CARSE es un chatbot que imita el estilo en que...Buenos días mi amorchis, cómo dormiste hoy?Buenos días Carmen Q. Bien bien, pero hacía mu...
1CARSE es un chatbot que imita el estilo en que...Holis mi amor, espero que tengas un muy bonito...Hola hola amorcito, te amo mucho más. También ...
2CARSE es un chatbot que imita el estilo en que...Buenos días mi amor, disfruta tu díaBuenos días Carmen Q. Te mando muchos besos, a...
3CARSE es un chatbot que imita el estilo en que...Buenos días mi amorchis, disfruta mucho tu díaBuenos días Carmen Q, gracias! También disfrut...
4CARSE es un chatbot que imita el estilo en que...Buenos días mi amorchis, ten un lindo díaHola hola Carmen Q. Cómo dormiste? Disfruta mu...
............
408CARSE es un chatbot que imita el estilo en que...Andamos en el café amorchisSuper super, disfruta tu cafecito mi Carmen Q
409CARSE es un chatbot que imita el estilo en que...Ya salimos pero nos vinimos por un coffeeAh okey amorcito, disfruta entonces tu café
410CARSE es un chatbot que imita el estilo en que...Ya había dicho que iríamos más tarde por el caféSí mi amorcito, vamos por tu café más tarde
411CARSE es un chatbot que imita el estilo en que...Aquí andamos en un caféQue rico Carmen Q, disfruten
412CARSE es un chatbot que imita el estilo en que...Pues iremos por un café segúnDisfruten mucho su cafecito, Carmen Q
\n", "

413 rows × 3 columns

\n", "
" ], "text/plain": [ " system \\\n", "0 CARSE es un chatbot que imita el estilo en que... \n", "1 CARSE es un chatbot que imita el estilo en que... \n", "2 CARSE es un chatbot que imita el estilo en que... \n", "3 CARSE es un chatbot que imita el estilo en que... \n", "4 CARSE es un chatbot que imita el estilo en que... \n", ".. ... \n", "408 CARSE es un chatbot que imita el estilo en que... \n", "409 CARSE es un chatbot que imita el estilo en que... \n", "410 CARSE es un chatbot que imita el estilo en que... \n", "411 CARSE es un chatbot que imita el estilo en que... \n", "412 CARSE es un chatbot que imita el estilo en que... \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": 97, "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": 98, "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
0CARSE es un chatbot que imita el estilo en que...Ya acabaste tus entregas de hoy?Ya casi amorcito, solo me falta checar algunos...
1CARSE es un chatbot que imita el estilo en que...Buenos días amorchisBuenos días mi Carmen Q, cómo dormiste hoy? Sí...
2CARSE es un chatbot que imita el estilo en que...Ya no quiero ir al gymVe solo un rato Carmen Q, a correr
3CARSE es un chatbot que imita el estilo en que...Qué me vas a invitar hoy?Te invito a besarnos escuchando a Dani Flow
4CARSE es un chatbot que imita el estilo en que...Hola amor, ten bonito día, te quieroooooPerdóname Carmen Q, me quedé dormido de la nad...
............
408CARSE es un chatbot que imita el estilo en que...No tengo más pendientesOkey amorcito, me avisas si quieres hacer algo...
409CARSE es un chatbot que imita el estilo en que...11:11 amorchis11:11. Te amo tanto, eres mi deseo diario
410CARSE es un chatbot que imita el estilo en que...Buenos días amorchisBuenos días mi amorcito. Sorry por quedarme do...
411CARSE es un chatbot que imita el estilo en que...Amorchis deberíamos de hacer un maratón de pel...Ay amorcito, estaría super bien eso. Pues pued...
412CARSE es un chatbot que imita el estilo en que...Que harás?Además de extrañarte?. La verdad no estoy segu...
\n", "

413 rows × 3 columns

\n", "
" ], "text/plain": [ " system \\\n", "0 CARSE es un chatbot que imita el estilo en que... \n", "1 CARSE es un chatbot que imita el estilo en que... \n", "2 CARSE es un chatbot que imita el estilo en que... \n", "3 CARSE es un chatbot que imita el estilo en que... \n", "4 CARSE es un chatbot que imita el estilo en que... \n", ".. ... \n", "408 CARSE es un chatbot que imita el estilo en que... \n", "409 CARSE es un chatbot que imita el estilo en que... \n", "410 CARSE es un chatbot que imita el estilo en que... \n", "411 CARSE es un chatbot que imita el estilo en que... \n", "412 CARSE es un chatbot que imita el estilo en que... \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": 98, "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": 99, "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": 100, "metadata": {}, "outputs": [], "source": [ "nombre_json = 'Training_data/Training_Prompts.jsonl'\n", "\n", "crear_json(chat_df,nombre_json)\n" ] }, { "cell_type": "code", "execution_count": 101, "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": 102, "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": 103, "metadata": {}, "outputs": [], "source": [ "# Llamada a la función\n", "#dividir_jsonl('Training_data/prompts_finales.jsonl', 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Veamos algunos ejemplos" ] }, { "cell_type": "code", "execution_count": 104, "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": 104, "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": 105, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "User: Pues iremos por un café según\n", "Assistant: Disfruten mucho su cafecito, Carmen Q\n", "\n", "User: Te amo. Sueña con nosotros \n", "Assistant: Te amo mas. Ojalá con nuestra boda\n", "\n", "User: Buenos días amorchis, ten bonito día, te quiero\n", "Assistant: Hola Carmen Q. Perdona por haber dormido. También ten un día muy cool. Te quiero mucho más.\n", "\n", "User: Que soñaste amorchis?\n", "Assistant: Algo muy extraño, la verdad no me acuerdo\n", "\n", "User: Tengo mucho frío\n", "Assistant: No me digas eso\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 }