from bs4 import BeautifulSoup, Comment import re from dateparser import DateDataParser def normalize_data(input): def normalize_dates(input_text): days = r"(?:Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|Sonntag|Mo|Di|Mi|Do|Fr|Sa|So)" months = r"(?:Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember|Jan|Feb|Mär|Apr|Mai|Jun|Jul|Aug|Sep|Okt|Nov|Dez)" day_month_year_pattern = r"(?:(?:\d{1,2}\.?\s*)" + months + r"\.?\s*(?:\d{2,4})?)" dd_mm_yyyy_pattern = r"(?:\d{1,2}[./-]\d{1,2}[./-](?:\d{4}|\d{2}))" iso_pattern = r"(?:\d{2,4}[./-]\d{1,2}[./-]\d{1,2})" german_date_pattern = day_month_year_pattern + "|" + dd_mm_yyyy_pattern + "|" + iso_pattern compiled_pattern = re.compile(german_date_pattern, re.VERBOSE) matches = compiled_pattern.findall(input_text) ddp = DateDataParser(languages=["de"]) for match in matches: try: date_data = ddp.get_date_data(match) if date_data.date_obj.year is None: normalized_date = date_data.date_obj.strftime("%d.%m") # Ohne Jahr else: normalized_date = date_data.date_obj.strftime("%d.%m.%Y") # Mit Jahr input_text = input_text.replace(match, normalized_date) except Exception as e: print(f"Fehler bei der Verarbeitung von '{match}': {e}") # Ersetze alle Vorkommen von '20.03. und 21.03.2025' durch '20.03.2025 und 21.03.2025' german_date_pattern = r"(?-Tag im HTML gefunden!") return None else: for tag in body_content.find_all(["footer", "script", "nav", "menu", "img"]): tag.decompose() header = soup.find("header") if header: header.decompose() for comment in body_content.find_all(string=lambda text: isinstance(text, Comment)): comment.extract() cleaned_html = body_content.prettify() clean_html_lines = [line for line in cleaned_html.splitlines() if line.strip()] cleaned_html = "\n".join(clean_html_lines) return cleaned_html def strip_html_to_text(html: str): soup = BeautifulSoup(html, "lxml") return soup.get_text(separator=' ', strip=True) # texts = [ # "Die 18. Koblenzer Literaturtage „ganzOhr“ finden vom 22.03. bis 05.04.2025 statt. Das Programm wird im Januar 2025 veröffentlicht, der Vorverkauf startet im Februar.", # "15. November 2024 & 13. Dezember 2024: Kunstausstellung 'Der erweiterte Raum'", # "Der siebte Workshop Retrodigitalisierung findet am 20. und 21.03.2025 bei ZB MED.", # "2. März bis 21. März 2025 \n" # "**Wann?** 05.12.2024, 19:00-21:00 **Wo?** Lesesaal im Marstallgebäude, TIB", # "22.04.25 15 Uhr bis 23.04.25 16 Uhr." # ] # # expected_texts = [ # "Die 18. Koblenzer Literaturtage „ganzOhr“ finden vom 22.03.2025 - 05.04.2025 statt. Das Programm wird im Januar 2025 veröffentlicht, der Vorverkauf startet im Februar.", # "15.11.2024 + 13.12.2024: Kunstausstellung 'Der erweiterte Raum'", # "Der siebte Workshop Retrodigitalisierung findet am 20.03.2025 + 21.03.2025 bei ZB MED.", # "02.03.2025 - 21.03.2025 \n", # "**Wann?** 05.12.2024, 19:00-21:00 **Wo?** Lesesaal im Marstallgebäude, TIB", # "22.04.2025 15:00 - 23.04.2025 16:00." # ] # # for i, text in enumerate(texts): # normalized = normalize_data(text) # normalized = re.sub("\s*", " ",normalized) # expected = re.sub("\s*", " ",expected_texts[i]) # if normalized == expected: # print("Normalization successful!") # else: # print("Normalization failed!")