amanu / helpers.py
katospiegel's picture
Little function to deal with no scoring
e9cf21b
import datetime
def guardar_en_archivo(lista_strings):
# Formateamos la fecha
fecha_actual = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
nombre_archivo = f"transcription_{fecha_actual}.txt"
# Escribimos la lista en el archivo
with open(nombre_archivo, 'w') as archivo:
for linea in lista_strings:
archivo.write(linea + '\n')
return nombre_archivo
def leer_del_archivo(nombre_archivo):
with open(nombre_archivo, 'r') as archivo:
# Leemos las l铆neas y eliminamos el salto de l铆nea al final
contenido = [linea.strip() for linea in archivo.readlines()]
return contenido
def guardar_dataframe_en_csv(df):
# Obtener la fecha y hora actual y formatearla
fecha_actual = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
# Generar el nombre del archivo
nombre_archivo = f"transcription_{fecha_actual}.csv"
# Guardar el DataFrame en el archivo CSV
df.to_csv(nombre_archivo, index=False)
return nombre_archivo
def dataframe_a_lista(df):
# Convertimos todas las columnas a string
df_str = df.astype(str)
# Concatenamos las columnas fila por fila
lista_strings = df_str.apply(lambda row: ' '.join(row), axis=1).tolist()
return lista_strings
# def generar_transcripcion(diccionario):
# # Obtenemos la lista de segmentos del diccionario
# segmentos = diccionario['segments']
# # Creamos una lista para almacenar las l铆neas de la transcripci贸n
# lineas_transcripcion = []
# # Iteramos sobre los segmentos del diccionario
# i = 0
# while i < len(segmentos):
# # Obtenemos el speaker y el texto del segmento actual
# speaker_actual = segmentos[i]['speaker']
# texto_actual = segmentos[i]['text']
# # Buscamos el siguiente segmento con un speaker diferente
# j = i + 1
# while j < len(segmentos) and segmentos[j]['speaker'] == speaker_actual:
# texto_actual += ' ' + segmentos[j]['text']
# j += 1
# # Agregamos el texto del speaker actual a la transcripci贸n
# parrafo_con_speaker = f"{speaker_actual}: {texto_actual}"
# linea = parrafo_con_speaker
# lineas_transcripcion.append(linea)
# # Actualizamos el 铆ndice para el siguiente speaker
# i = j
# # Guardamos la transcripci贸n en un archivo de texto
# nombre_archivo = guardar_en_archivo(lineas_transcripcion)
# return lineas_transcripcion, nombre_archivo
def generar_transcripcion(diccionario):
# Obtenemos la lista de segmentos del diccionario
segmentos = diccionario['segments']
# Creamos una lista para almacenar las l铆neas de la transcripci贸n
lineas_transcripcion = []
# Iteramos sobre los segmentos del diccionario
i = 0
while i < len(segmentos):
# Obtenemos el speaker, el texto y el start time del segmento actual
speaker_actual = segmentos[i]['speaker']
texto_actual = segmentos[i]['text']
start_time = segmentos[i]['start']
# Buscamos el siguiente segmento con un speaker diferente
j = i + 1
while j < len(segmentos) and segmentos[j]['speaker'] == speaker_actual:
texto_actual += ' ' + segmentos[j]['text']
j += 1
# Agregamos el texto del speaker actual a la transcripci贸n
parrafo_con_speaker = f"{speaker_actual} ({start_time}): {texto_actual}"
linea = parrafo_con_speaker
lineas_transcripcion.append(linea)
# Actualizamos el 铆ndice para el siguiente speaker
i = j
# Guardamos la transcripci贸n en un archivo de texto
nombre_archivo = guardar_en_archivo(lineas_transcripcion)
return lineas_transcripcion, nombre_archivo
def crear_diccionario(json_data):
# Obtenemos la lista de segmentos del JSON
segmentos = json_data['segments']
# Creamos los diccionarios para almacenar los datos
diccionario = {'start_time': [], 'speaker': [], 'word': [], 'score': []}
# Iteramos sobre los segmentos del JSON
for segmento in segmentos:
# Obtenemos los valores del segmento
start_time = segmento['start']
speaker = segmento['speaker']
palabras = segmento['words']
# Iteramos sobre las palabras del segmento
for palabra in palabras:
# Obtenemos los valores de la palabra
word = palabra['word']
if 'score'not in palabra.keys():
print(segmento)
print(palabra)
# Agregamos el score por defecto
palabra['score'] = 0.5
else:
score = palabra['score']
# Agregamos los valores al diccionario
diccionario['start_time'].append(start_time)
diccionario['speaker'].append(speaker)
diccionario['word'].append(word)
diccionario['score'].append(score)
return diccionario
def generar_html_palabras(palabras, scores):
# Creamos una lista para almacenar los c贸digos HTML de cada palabra
html_palabras = []
# Iteramos sobre las palabras y sus scores
for palabra, score in zip(palabras, scores):
# Mapeamos el score a un color en rojo o verde
if score < 0.5:
color = f"rgb({int(255*score*2)}, {int(255*(1-score*2))}, 0)"
else:
color = f"rgb({int(255*(1-score)*2)}, {int(255*score*2)}, 0)"
# Creamos el c贸digo HTML para la palabra con el color asociado
html_palabra = f"<span style='background-color: {color}; color: black'>{palabra}</span>"
# Agregamos el c贸digo HTML a la lista
html_palabras.append(html_palabra)
# Unimos los c贸digos HTML de las palabras en una sola cadena
html_texto = ' '.join(html_palabras)
# Creamos el c贸digo HTML completo con el texto resaltado
html_completo = f"<p>{html_texto}</p>"
return html_completo