{ "cells": [ { "cell_type": "code", "execution_count": 2, "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": 3, "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": 4, "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": 5, "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": 6, "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": 7, "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": 8, "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": 9, "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": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | CarmenQ | \n", "Sebas | \n", "
---|---|---|
0 | \n", "Quieres ver \\nuna peli? | \n", "Sisisi, sí quierooo\\nVamos a ver Kung Fu Panda... | \n", "
1 | \n", "Podemos\\nver una\\nserie bb | \n", "Uyyy sí\\namor, pero cuál? Ya hemos\\nvisto muchas | \n", "
2 | \n", "Luego vemos la de Coraline? | \n", "Cuando quieras mi amor, ya sabes que sí\\nPero ... | \n", "
3 | \n", "Si\\nte están\\ngustando las pelis bb? | \n", "Si amorrrr, mucho\\nA ver cuándo me invitar a v... | \n", "
4 | \n", "Ya ponle a la peli padrino | \n", "JAJAJA voy amor, no me presiones | \n", "
5 | \n", "Regresando vemos la peli si? | \n", "Si mi amorrrr, ya justo que regreses ya ando a... | \n", "
6 | \n", "En un\\nratito quieres que veamos la peli? | \n", "Sí amor, estaría perfecto\\nPero si está chafa,... | \n", "
7 | \n", "O podemos ver la peli amor | \n", "Pues yo si quiero ir a ver la peli, así que es... | \n", "
8 | \n", "Que quieres ver bb?\\nUna serie o peli? | \n", "Tal vez una peli, no? Que luego me cuesta segu... | \n", "
9 | \n", "Andamos viendo una peli | \n", "Cómo se llama la peli? | \n", "
10 | \n", "Yo me voy a bañar rápido\\nEn lo que te aclimat... | \n", "Vale mi amor, disfruta tu baño\\nSabes que me e... | \n", "
\n", " | CarmenQ | \n", "Sebas | \n", "
---|---|---|
0 | \n", "Buenos días mi amorchis, cómo dormiste hoy? | \n", "Buenos días mi amorrrr\\nBien bien, pero hacía ... | \n", "
1 | \n", "Holis mi amor, espero que tengas un muy bonito... | \n", "Hola hola bebitaaaa, te amo mucho másss\\nTambi... | \n", "
2 | \n", "Buenos días mi bb, disfruta mucho tu día guapo | \n", "Buenos días amorrr, graciassssss\\nTambién disf... | \n", "
3 | \n", "Buenos días mi amor, espero que hayas podido d... | \n", "Hola mi amorcito, cómo amaneciste hoyyy???\\nTa... | \n", "
4 | \n", "Hellouuuuu, te amo mucho guapiiii, ten lindo dia | \n", "Holi mi vida, cómo estás hoy??\\nTe amo mucho m... | \n", "
... | \n", "... | \n", "... | \n", "
665 | \n", "Dime algo bonito | \n", "Hmmmm vemos. Deposítame 5 mil pesotes y va JAJ... | \n", "
666 | \n", "Dime algo bonito | \n", "Yo digo que tal vez el universo ha dicho que e... | \n", "
667 | \n", "Oye dime algo bonito | \n", "Deja veo si ya me depositaste en mi cuenta y v... | \n", "
668 | \n", "Oye dime algo bonito | \n", "Algo bonito? Tuuuuu, mi C, estás hermosa\\nTeng... | \n", "
669 | \n", "Oye dime algo bonito | \n", "Solo si veo un depósito en mi cuenta en menos ... | \n", "
670 rows × 2 columns
\n", "\n", " | system | \n", "CarmenQ | \n", "Sebas | \n", "
---|---|---|---|
0 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Buenos días mi amorchis, cómo dormiste hoy? | \n", "Buenos días mi amorrrr\\nBien bien, pero hacía ... | \n", "
1 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Holis mi amor, espero que tengas un muy bonito... | \n", "Hola hola bebitaaaa, te amo mucho másss\\nTambi... | \n", "
2 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Buenos días mi bb, disfruta mucho tu día guapo | \n", "Buenos días amorrr, graciassssss\\nTambién disf... | \n", "
3 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Buenos días mi amor, espero que hayas podido d... | \n", "Hola mi amorcito, cómo amaneciste hoyyy???\\nTa... | \n", "
4 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Hellouuuuu, te amo mucho guapiiii, ten lindo dia | \n", "Holi mi vida, cómo estás hoy??\\nTe amo mucho m... | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
665 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Dime algo bonito | \n", "Hmmmm vemos. Deposítame 5 mil pesotes y va JAJ... | \n", "
666 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Dime algo bonito | \n", "Yo digo que tal vez el universo ha dicho que e... | \n", "
667 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Oye dime algo bonito | \n", "Deja veo si ya me depositaste en mi cuenta y v... | \n", "
668 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Oye dime algo bonito | \n", "Algo bonito? Tuuuuu, mi C, estás hermosa\\nTeng... | \n", "
669 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Oye dime algo bonito | \n", "Solo si veo un depósito en mi cuenta en menos ... | \n", "
670 rows × 3 columns
\n", "\n", " | system | \n", "user | \n", "assistant | \n", "
---|---|---|---|
0 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Buenos días mi amorchis, cómo dormiste hoy? | \n", "Buenos días mi amorrrr\\nBien bien, pero hacía ... | \n", "
1 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Holis mi amor, espero que tengas un muy bonito... | \n", "Hola hola bebitaaaa, te amo mucho másss\\nTambi... | \n", "
2 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Buenos días mi bb, disfruta mucho tu día guapo | \n", "Buenos días amorrr, graciassssss\\nTambién disf... | \n", "
3 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Buenos días mi amor, espero que hayas podido d... | \n", "Hola mi amorcito, cómo amaneciste hoyyy???\\nTa... | \n", "
4 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Hellouuuuu, te amo mucho guapiiii, ten lindo dia | \n", "Holi mi vida, cómo estás hoy??\\nTe amo mucho m... | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
665 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Dime algo bonito | \n", "Hmmmm vemos. Deposítame 5 mil pesotes y va JAJ... | \n", "
666 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Dime algo bonito | \n", "Yo digo que tal vez el universo ha dicho que e... | \n", "
667 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Oye dime algo bonito | \n", "Deja veo si ya me depositaste en mi cuenta y v... | \n", "
668 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Oye dime algo bonito | \n", "Algo bonito? Tuuuuu, mi C, estás hermosa\\nTeng... | \n", "
669 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Oye dime algo bonito | \n", "Solo si veo un depósito en mi cuenta en menos ... | \n", "
670 rows × 3 columns
\n", "\n", " | system | \n", "user | \n", "assistant | \n", "
---|---|---|---|
0 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Tengo mucho sueño aún | \n", "Ay amorcito, a ver si te echas a dormir en el ... | \n", "
1 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Ay amor que frío hace | \n", "Pues que bueno, mínimo no estamos sudando | \n", "
2 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Ya adivina\\nLo que se te ocurra | \n", "Esque no se me ocurrió nada mas | \n", "
3 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Biennnn, pero tengo sueño aún | \n", "Si tienes descanso, duerme | \n", "
4 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Yo te amo massssss | \n", "Eso es mega feik eh | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
665 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Pues ya toca casarnos | \n", "Por fiiiin, ya te habías tardado en decir eso | \n", "
666 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Biennnnn\\n¿Y tu? | \n", "Bien igual | \n", "
667 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "JAJAJJAJAJA no | \n", "Ya dimeeeee | \n", "
668 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Casarme contigo algún día | \n", "Awwww amoorr, sí quiero casarme contigo algún ... | \n", "
669 | \n", "CARSE es un chatbot que imita el estilo en que... | \n", "Me estaba acabando el café | \n", "Disfruta tu cafecito | \n", "
670 rows × 3 columns
\n", "