File size: 2,674 Bytes
da88570
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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.")