File size: 5,201 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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# import dateutil
# from dateparser import DateDataParser
# import re
#
# def normalize_data(input):
#     def normalize_dates(input_text):
#         # RegEx für deutsche Datumsformate
#         date_pattern = r"""
#             (?:
#               (?:\d{1,2}(?:\.|\\\.)?\s*)  # Tag (z. B. 15, 15. oder 15\.)
#               (?: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)\.?  # Monatsname (mit optionalem Punkt)
#               \s*  # optionaler Leerraum
#               (?:\d{2,4})?  # Jahr (optional, z. B. 2025 oder 20)
#             )|
#             (?:  # Alternative für numerische Formate
#               \d{1,2}(?:\.|\\\.|/|-)\d{1,2}(?:\.|\\\.|/|-)(?:\d{4}|\d{2})  # DD.MM.YYYY, DD-MM-YYYY, DD/MM/YY
#             )|
#             (?:  # ISO-Format (YYYY-MM-DD oder YY-MM-DD)
#               \d{2,4}(?:\.|\\\.|/|-)\d{1,2}(?:\.|\\\.|/|-)\d{1,2}
#             )
#         """
#
#         # Kompiliere das Muster mit re.VERBOSE
#         compiled_pattern = re.compile(date_pattern, re.VERBOSE)
#
#         # Finde alle Datumsangaben
#         matches = compiled_pattern.findall(input_text)
#
#         # Instanziiere DateDataParser
#         ddp = DateDataParser()
#
#         # Ersetze die gefundenen Datumsangaben mit dem normalisierten Format
#         for match in matches:
#             try:
#                 # Parse das Datum
#                 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
#                 # Ersetze das Originaldatum durch das normalisierte Datum
#                 input_text = input_text.replace(match, normalized_date)
#             except Exception as e:
#                 print(f"Fehler bei der Verarbeitung von '{match}': {e}")
#
#         # Regex für '20. und 21.03.2025' oder ähnliche Formate
#         date_pattern = r"(\d{1,2})\.?\s*und\s*(\d{1,2})\.(\d{1,2})\.(\d{4})"
#
#         # Ersetze alle Vorkommen von '20. und 21.03.2025' durch '20.03.2025 und 21.03.2025'
#         input_text = re.sub(date_pattern, r"\1.\3.\4 und \2.\3.\4", input_text)
#
#         # Regex für '20. und 21.03.2025' oder ähnliche Formate
#         date_pattern = r"(\d{1,2})\.\s*(bis|-)\s*(\d{1,2})\.(\d{1,2})\.(\d{4})"
#
#         # Ersetze alle Vorkommen von '20. und 21.03.2025' durch '20.03.2025 und 21.03.2025'
#         input_text = re.sub(date_pattern, r"\1.\4.\5 - \3.\4.\5", input_text)
#
#         # Ersetze 20.02.2024 bis (zum) 22.02.204 mit 20.02.2024 - 22.02.204
#         date_pattern = r"(\d{2})\.(\d{2})\.(\d{4})\s*(bis|-)\s*(zum)?\s*(\d{2})\.(\d{2})\.(\d{4})"
#         input_text = re.sub(date_pattern, r"\1.\2.\3 - \6.\7.\8", input_text)
#
#         return input_text
#
#     def normalize_times(input_text):
#         # Regex für Zeitangaben
#         time_patterns = r"""
#             \b
#             (\d{1,2})                # Stunde (z.B. 19 oder 5)
#             (?:
#                 [:.]                 # Trennzeichen (Doppelpunkt oder Punkt)
#                 (\d{2})             # Minuten (optional)
#             )?
#             (?:\s*(?:Uhr|h))?        # Optional "Uhr" oder "h", nur bei Minuten oder Kontext
#             (?:                      # Optionaler Zeitbereich (z.B. 19-20 oder 19 bis 20)
#                 \s?(?:-|bis)\s?      # Trennzeichen "-" oder "bis"
#                 (\d{1,2})            # Endzeit-Stunde
#                 (?:
#                     [:.]             # Trennzeichen (Doppelpunkt oder Punkt)
#                     (\d{2})         # Endzeit-Minuten (optional)
#                 )?
#                        # Optional "Uhr" oder "h" bei Endzeit
#             )?
#             \s*(?:Uhr|h)
#             \b
#         """
#
#         # Funktion, um Matches zu parsen und zu ersetzen
#         def format_time(match):
#             # Startzeit
#             start_hour = int(match.group(1))
#             start_minute = int(match.group(2) or 0)
#             formatted_start = f"{start_hour:02}:{start_minute:02}"
#
#             # Endzeit
#             if match.group(3):
#                 end_hour = int(match.group(3))
#                 end_minute = int(match.group(4) or 0)
#                 formatted_end = f"{end_hour:02}:{end_minute:02}"
#                 return f"{formatted_start}-{formatted_end}"  # Zeitbereich
#             return formatted_start  # Nur Startzeit
#
#         # Kompiliere Regex mit re.VERBOSE
#         compiled_pattern = re.compile(time_patterns, re.VERBOSE)
#
#         # Ersetze alle gefundenen Zeitangaben im Text
#         replaced_text = compiled_pattern.sub(format_time, input_text)
#         return replaced_text
#
#     def normalize_text(input_text):
#         return re.sub(r"(\d)([a-zA-Z])", r"\1 \2", input_text)
#
#     normalized_data = normalize_times(input)
#     normalized_data = normalize_dates(normalized_data)
#     normalized_data = normalize_text(normalized_data)
#     return normalized_data
#
#
#