from src.utils.helpers import clean_html from src.utils.markdown_processing.md_preprocessing import convert_html_to_md from src.persistence.db import * from src.utils.apis.gpt_api import remove_boilerplate @st.cache_resource def init_connection(): return init_db() def render_url_content(element): cleaned_html = clean_html(element["html"]) md = convert_html_to_md(cleaned_html) with st.container(border=True, height=400): st.markdown(md) def save_event_url(): data = None if current_element["class"] == "EventDetail": md = convert_html_to_md(clean_html(current_element["html"])) data = remove_boilerplate(md) result = db.event_urls.update_one({"_id": current_element["_id"]}, { "$set": { "final": True, "data": data} }) def remove_url(): result = db.event_urls.delete_one({"_id": current_element["_id"]}), # Variables db = init_connection() current_element = db.event_urls.find_one(filter={"final": None}) if current_element: current_url = current_element['url'] # Page Content st.header("Event Daten Sortieren") st.subheader(f"{db.event_urls.count_documents({'final':None})} URLs sind noch unsortiert") st.write(""" Hier wird das Datenset endgültig bereinigt. Wenn die von der GPT API zugeordnete Klasse (EventDetail / EventOverview) falsch ist, muss die URL gelöscht werden. Wenn es korrekt zugeordnet ist können die Daten gespeichert werden. \n **ACHTUNG** Teilweise sind die Daten unvollständig. Das liegt daran, dass das HTML gekürzt wurde, für die Sortierung ist das irrelvant, also auch abgeschnittene Events gehören in die Event-DB.\n **Übersichtsseiten müssen Listen von Events enthalten. Eine Seite mit Kategorien oder anderen Links ist keine Übersichtsseite.** """) st.info("Es sollen nur deutsche Texte verarbeitet werden. Alle anderen Texte müssen gelöscht werden. (Teilweise englisch ist okay)") st.write("") try: st.write(f"""### Aktuelle Seite: \n{current_url} ({db.unsorted_urls.find_one(filter={"_id": current_element["base_url_id"]}, projection={"url_type":1})["url_type"]})""") st.write(f"""#### Predicted Class: {current_element["class"]}""") render_url_content(current_element) except Exception as e: st.write(f"Fehler: {e}") st.write(current_url) # Buttons col1, col2= st.columns([1, 1]) with col1: st.button("Als Event-URL speichern", on_click=save_event_url) with col2: st.button("URL löschen", on_click=remove_url) else: st.write("Es sind aktuell keine Daten in der DB zur Berarbeitung vorhanden.")