Realizado por Federico Luque Santos, Javier Martínez Álvarez y Feliciano Ramírez Navarro
Creación de etiquetas:
Abrimos un cuadro de dialogo para introducir el nombre de la etiqueta y la añadimos a la base de datos.
tag = input("Escribe el nombre de la nueva etiqueta: ")
tag_doc = {"tag" : tag }
tag_creado = coleccion_tags.insert_one(tag_doc)
print(tag_creado.inserted_id)
Creación de colección de etiquetas:
Hacemos la creación de una nueva colección para guardar los tags (etiquetas) y poder trabajar mas fácilmente con ellas
tags_unicos = sylabusColeccion.distinct("tags")
for i, tag in enumerate(tags_unicos, start=1):
documento = {"tag" : tag }
tagsColeccion.insert_one(documento)print("Coleccion tag creada")
Eliminación de etiqueta (único):
Abrimos un cuadro de dialogo para introducir el nombre de la etiqueta y se eliminara.
tag = input("Escribe el nombre de la etiqueta a eliminar: ")
tag_del = {"tag" : tag }
tag_eliminado = coleccion_tags.delete_one(tag_del)
print(tag_eliminado.deleted_count, " etiqueta eliminada.")
Eliminación de etiqueta (múltiple):
Abrimos un cuadro de dialogo para introducir el nombre de varias etiquetas a borrar.
tag = input("Escribe el nombre de la etiqueta a eliminar: ")
tag_del = {"tag" : tag }
tag_eliminado = coleccion_tags.delete_many(tag_del)
print(tag_eliminado.deleted_count, " etiquetas eliminadas.")
Editar etiqueta (único):
Abrimos un cuadro de dialogo para introducir el nombre de la etiqueta la cual vayamos a actualizar, si a la etiqueta le ponemos el mismo nombre o no existe, en el código también tratamos estos errores.
tag = input("Escribe el nombre de la etiqueta a editar: ")
# Verificar si la etiqueta existe
tag_to_edit = {"tag": tag}
tag_existente = coleccion_tags.find_one(tag_to_edit)if tag_existente:
new_tag = input("Escribe el nuevo nombre de la etiqueta: ")
nuevo_valor = {"$set": {"tag": new_tag}}
resultado = coleccion_tags.update_one(tag_to_edit, nuevo_valor)
if resultado.modified_count > 0:
print(f"Etiqueta '{tag}' actualizada exitosamente a '{new_tag}'.")
else:
print("La etiqueta ya tenía el mismo nombre, no se realizó ningún cambio.")
else:
print(f"La etiqueta '{tag}' no existe en la colección.")
Editar etiquetas (múltiple):
Al crear una nueva colección, los tags(etiquetas) en sylabus habían pasado a llamarse por su «id» y con el siguiente código hacemos el cambio para que aparezca por su nombre y no por el id
tags_map = {tag["tag"]: tag["_id"] for tag in coleccion_tags.find()}
# Actualizar documentos en la colección 'sylabus'
for documento in coleccion_sylabus.find():
nuevos_tags = [tags_map[tag] for tag in documento["tags"] if tag in tags_map]
coleccion_sylabus.update_one({"_id": documento["_id"]}, {"$set": {"tags": nuevos_tags}})print("\nTags actualizados con sus IDs correspondientes.")
Filtrado de etiquetas que comiencen por «x»:
Abrimos un cuadro de dialogo para introducir las primeras letras del nombre de la etiqueta y se muestran todas las etiquetas que empiezan por esas letras
def buscar_por_prefijo(prefijo):
resultados = coleccion_tags.find({"tag": {"$regex": f"^{prefijo}"}})
return list(resultados)
prefijo = input("Introduce las primeras letras de la etiqueta: ")
etiquetas = buscar_por_prefijo(prefijo)
for etiqueta in etiquetas:
print(etiqueta))
Resultado de ejemplo:
Introduce las primeras letras de la etiqueta: de
{'_id': ObjectId('6756d64a7bcbd22e1f14046d'), 'tag': 'deporte'}
{'_id': ObjectId('6756d64a7bcbd22e1f14046e'), 'tag': 'descanso'}
Filtrado de etiquetas que contienen «x»:
Abrimos un cuadro de dialogo para introducir alguna de las letras que contienen el nombre de la etiqueta y se muestran todas las etiquetas que contienen esas letras
def buscar_por_contenido(prefijo):
resultados = coleccion_tags.find({"tag": {"$regex": f".*{prefijo}.*"}})
return list(resultados)
prefijo = input("Introduce los caracteres a buscar: ")
etiquetas = buscar_por_contenido(prefijo)
for etiqueta in etiquetas:
print(etiqueta)
Resultado de ejemplo:
Introduce los caracteres a buscar: er
{'_id': ObjectId('6756d64a7bcbd22e1f140467'), 'tag': 'Personal'}
{'_id': ObjectId('6756d64a7bcbd22e1f140481'), 'tag': 'verano'}}
Filtrado de etiquetas exactas:
Abrimos un cuadro de dialogo para introducir el nombre de la etiqueta exacta y se muestran todas las etiquetas
def buscar_etiqueta_exacta(prefijo):
resultados = coleccion_tags.find({"tag": {"$regex": f"^{prefijo}$", "$options": "i"}})
return list(resultados)
prefijo = input("Introduce la etiqueta a buscar: ")
etiquetas = buscar_etiqueta_exacta(prefijo)
for etiqueta in etiquetas:
print(etiqueta)
Resultado de ejemplo:
Introduce la etiqueta a buscar: 101b1
{'_id': ObjectId('6756d64a7bcbd22e1f1403f2'), 'tag': '101b1'}}
Filtrado de frases por etiqueta:
Abrimos un cuadro de dialogo para introducir las la etiqueta y se muestran los 10 primeros documentos/frases que contienen esa etiqueta, si introduces un tag incorrecto, saltara un error
# Solicitar al usuario un tag para buscar
busqueda = input("nElige un tag: ")
# Obtener el ID del tag seleccionado en la colección de tags
tag_documento = coleccion_tags.find_one({"tag": busqueda})
if tag_documento:
tag_id = tag_documento["_id"]
# Consultar los 10 primeros registros que contengan el ID del tag seleccionado
resultados = coleccion_sylabus.find({"tags": tag_id}).limit(10)
else:
resultados = []
print(f"No se encontró el tag '{busqueda}' en la colección de tags.")
# Imprimir los resultados
print(f"nRegistros con el tag '{busqueda}':")
for i, documento in enumerate(resultados, start=1):
print(f"Registro {i}: {documento}")
Resultado de ejemplo:
Elige un tag: deporte
Registros con el tag 'deporte':
Registro 1: {'_id': ObjectId('63ea72efd74705eea32263c8'), 'texto': 'Corrí la maratón en menos de tres horas sin parar de correr.', ...}
Registro 2: {'_id': ObjectId('63ea72efd74705eea32263c9'), 'texto': 'Me gusta jugar al fútbol los fines de semana.', ...}
...
Registro 10: {'_id': ObjectId('63ea72efd74705eea32263d1'), 'texto': 'El equipo de rugby se entrena muy duro para la temporada.', ...}
Group por audio:
En este apartado lo que hacemos es agrupar el total de documentos que han sido creados por cada mes
pipeline = [
{
"$group": {
"_id": {"$substr": ["$fecha", 0, 7]},
"count": {"$sum": 1}
}
},
{
"$sort": {"_id": 1}
}
]
resultado = list(coleccion_audios.aggregate(pipeline))
for documento in resultado:
print(f"Mes: {documento['_id']}, Cantidad: {documento['count']}")
Resultado de ejemplo:
Mes: 2023-03, Cantidad: 46
Mes: 2023-04, Cantidad: 154
Mes: 2023-05, Cantidad: 851
Mes: 2023-06, Cantidad: 287
Mes: 2023-07, Cantidad: 70
Mes: 2023-08, Cantidad: 223
Mes: 2023-09, Cantidad: 2
Mes: 2023-11, Cantidad: 228
Mes: 2023-12, Cantidad: 246
Mes: 2024-01, Cantidad: 14
Mes: 2024-03, Cantidad: 1104
Mes: 2024-04, Cantidad: 1539
Mes: 2024-05, Cantidad: 4862
Mes: 2024-06, Cantidad: 1642
Mes: 2024-07, Cantidad: 1457
Mes: 2024-08, Cantidad: 982
Mes: 2024-09, Cantidad: 507
Contar lista etiquetas:
En este apartado estamos mostrando la cantidad de documentos totales que hay por cada tag
# Usar agregación para contar documentos por cada tag
pipeline = [
{"$unwind": "$tags"}, # Descomponer los arrays de 'tags' si existen
{"$group": {"_id": "$tags", "conteo": {"$sum": 1}}}, # Agrupar por 'tags' y contar
{"$sort": {"_id": 1}} # Ordenar alfabéticamente por 'tags'
]
# Ejecutar la agregación
conteo_tags = list(coleccion_sylabus.aggregate(pipeline))
# Obtener los nombres de los tags desde la colección de tags
diccionario_tags = {}for resultado in conteo_tags:
tag_id = resultado["_id"]
conteo = resultado["conteo"]
tag_documento = coleccion_tags.find_one({"_id": tag_id})
if tag_documento:
tag_nombre = tag_documento["tag"]
diccionario_tags[tag_nombre] = conteo
# Imprimir el diccionario (clave-valor)
print("nDiccionario de tags y su conteo:")print(diccionario_tags)
Resultado de ejemplo:
Diccionario de tags y su conteo:
{'101b1': 11, '102d1': 11, '103f1': 10, '104g1': 10, '105j1': 9, '106k1': 8, '107l1': 10, '107l2': 6, '107l3': 5, '108ll1': 9, '108ll2': 8, '109m1': 6, '109m2': 10, '109m3': 8, '109m4': 9, '10m1': 10, '10m2': 10, '10m3': 10, '110n1': 18, '110n2': 5, '111ñ1': 11, '112p1': 12, '112p2': 8, '113r1': 16, '114rr1': 6, '114rr2': 10, '114rr3': 5, '115s1': 8, '115s2': 5, '115s3': 7, '116t1': 10, '116t2': 10, '117fl1': 9, '118pr1': 8, '119br1': 7, '11n1': 10, '11n2': 10, '11n3': 10, '120fr1': 9, '121bl1': 5, '122fl1': 5, '123pr1': 5, '124br1': 8, '125fr1': 6, '126cl1': 7, '127gl1': 4, '127gl2': 6, '127gl3': 5, '128tr1': 13, '128tr2': 5, '129dr1': 4, '129dr2': 5, '12ñ1': 13, '130gr1': 6, '131cr1': 12, '131cr2': 5, '132cl1': 6, '13p1': 9, '13p2': 10, '14r1': 19, '14rr1': 14, '14rr2': 15, '14rr3': 15, '15s1': 10, '15s2': 10, '15s3': 9, '16t1': 11, '16t2': 10, '17z1': 10, '17z2': 10, '17z3': 10, '18pl1': 12, '18pl2': 8, '19bl1': 7, '19bl2': 8, '1b1': 10, '1b2': 10, '20fl1': 10, '20fl2': 8, '21pr1': 10, '21pr2': 8, '22br1': 10, '22br2': 8, '23fr1': 10, '23fr2': 6, '24cl1': 9, '24cl2': 6, '25gl1': 5, '25gl2': 5, '26tr1': 10, '27dr1': 5, '27dr2': 8, '28cr1': 10, '28cr2': 6, '29gr1': 8, '29gr2': 7, '2ch1': 10, '2ch2': 9, '30tr1': 8, '3d1': 10, '3d2': 10, '4f1': 11, '4f2': 10, '5g1': 10, '5g2': 10, '6j1': 10, '6j2': 10, '7k1': 10, '7k2': 9, '8l1': 11, '8l2': 15, '8l3': 15, '9ll1': 10, '9ll2': 10, 'Comida': 1, 'Deportes': 1, 'Elche': 2, 'Personal': 1, 'QA': 1, 'San vicente ': 1, 'Turismo': 1, 'cocina': 1, 'comida': 45, 'deporte': 45, 'descanso': 1, 'frasas cortas 3': 1, 'frase corta 9': 9, 'frase corta 9 ': 1, 'frases cortas': 14, 'frases cortas ': 2, 'frases cortas 1': 11, 'frases cortas 2': 9, 'frases cortas 3': 21, 'frases cortas alicante': 19, 'frases cortas alicante ': 5, 'futbol': 1, 'mecano': 1, 'música': 45, 'siesta': 1, 'syllabus': 1028, 'tecnología': 45, 'teléfono móvil': 45, 'vehículo': 45, 'verano': 1, 'viajes': 45}
Deja una respuesta