This commit is contained in:
parent
53058d1504
commit
92bd3d9a47
|
|
@ -271,9 +271,10 @@ class GraphExplorerService:
|
||||||
)
|
)
|
||||||
# WICHTIG: Wir müssen genug Kanten laden, um alle "Titel#Abschnitt" Varianten zu finden
|
# WICHTIG: Wir müssen genug Kanten laden, um alle "Titel#Abschnitt" Varianten zu finden
|
||||||
# Verwende paginierte Suche, um sicherzustellen, dass wir alle Kanten durchsuchen
|
# Verwende paginierte Suche, um sicherzustellen, dass wir alle Kanten durchsuchen
|
||||||
|
# OPTIMIERUNG: Lade alle Kanten in einem Durchgang (falls möglich)
|
||||||
res_extended = []
|
res_extended = []
|
||||||
next_offset = None
|
next_offset = None
|
||||||
max_iterations = 20 # Maximal 20 Iterationen (20 * 5000 = 100000 Kanten)
|
max_iterations = 50 # Maximal 50 Iterationen (50 * 5000 = 250000 Kanten)
|
||||||
iteration = 0
|
iteration = 0
|
||||||
while iteration < max_iterations:
|
while iteration < max_iterations:
|
||||||
batch, next_offset = self.client.scroll(
|
batch, next_offset = self.client.scroll(
|
||||||
|
|
@ -311,32 +312,35 @@ class GraphExplorerService:
|
||||||
# ZUSÄTZLICH: Fuzzy-Matching für ähnliche Titel
|
# ZUSÄTZLICH: Fuzzy-Matching für ähnliche Titel
|
||||||
# PROBLEM: Wikilinks können andere Titel verwenden als der gespeicherte Note-Titel
|
# PROBLEM: Wikilinks können andere Titel verwenden als der gespeicherte Note-Titel
|
||||||
# Beispiel: Note-Titel = "Persönliches Leitbild (2025–2029)", aber Wikilink = "Mein Persönliches Leitbild 2025"
|
# Beispiel: Note-Titel = "Persönliches Leitbild (2025–2029)", aber Wikilink = "Mein Persönliches Leitbild 2025"
|
||||||
# Strategie: Normalisiere beide Titel und prüfe, ob sie ähnlich sind
|
# STRATEGIE: Da target_id immer "Titel#Abschnitt" ist, nehmen wir einfach den Teil vor dem #
|
||||||
|
# und normalisieren beide (Note-Titel und target_id-Basis) für Vergleich
|
||||||
if not any(tgt_id == t or tgt_id.startswith(t + "#") for t in note_titles_to_search):
|
if not any(tgt_id == t or tgt_id.startswith(t + "#") for t in note_titles_to_search):
|
||||||
# Normalisiere target_id (entferne #Abschnitt)
|
# Extrahiere Basis-Titel aus target_id (Teil vor dem #)
|
||||||
tgt_base = tgt_id.split("#")[0].strip()
|
tgt_base = tgt_id.split("#")[0].strip()
|
||||||
|
|
||||||
# Normalisiere jeden Titel und prüfe auf Ähnlichkeit
|
# Normalisierungs-Funktion: Entferne Klammern, Jahreszahlen, Präfixe
|
||||||
|
def normalize_title(t):
|
||||||
|
if not t:
|
||||||
|
return ""
|
||||||
|
# Entferne Klammern und deren Inhalt (z.B. "(2025–2029)")
|
||||||
|
t = re.sub(r'\s*\([^)]*\)', '', t)
|
||||||
|
# Entferne Jahreszahlen (4-stellig, mit oder ohne Bindestrich/En-Dash)
|
||||||
|
# Beispiele: "2025", "2025–2029", "2025-2029"
|
||||||
|
t = re.sub(r'\s*\d{4}[\s–\-]*\d{0,4}', '', t)
|
||||||
|
# Entferne "Mein/Meine" Präfixe
|
||||||
|
t = re.sub(r'^(Mein|Meine)\s+', '', t, flags=re.IGNORECASE)
|
||||||
|
# Normalisiere Whitespace
|
||||||
|
t = re.sub(r'\s+', ' ', t).strip()
|
||||||
|
return t.lower() # Case-insensitive Vergleich
|
||||||
|
|
||||||
|
# Normalisiere target_id-Basis
|
||||||
|
tgt_norm = normalize_title(tgt_base)
|
||||||
|
|
||||||
|
# Prüfe gegen alle Note-Titel (inkl. Aliases)
|
||||||
for title in note_titles_to_search:
|
for title in note_titles_to_search:
|
||||||
# Normalisiere: Entferne Klammern, Jahreszahlen, Präfixe
|
|
||||||
def normalize_title(t):
|
|
||||||
if not t:
|
|
||||||
return ""
|
|
||||||
# Entferne Klammern und deren Inhalt (z.B. "(2025–2029)")
|
|
||||||
t = re.sub(r'\s*\([^)]*\)', '', t)
|
|
||||||
# Entferne Jahreszahlen (4-stellig, mit oder ohne Bindestrich/En-Dash)
|
|
||||||
# Beispiele: "2025", "2025–2029", "2025-2029"
|
|
||||||
t = re.sub(r'\s*\d{4}[\s–\-]*\d{0,4}', '', t)
|
|
||||||
# Entferne "Mein/Meine" Präfixe
|
|
||||||
t = re.sub(r'^(Mein|Meine)\s+', '', t, flags=re.IGNORECASE)
|
|
||||||
# Normalisiere Whitespace
|
|
||||||
t = re.sub(r'\s+', ' ', t).strip()
|
|
||||||
return t.lower() # Case-insensitive Vergleich
|
|
||||||
|
|
||||||
title_norm = normalize_title(title)
|
title_norm = normalize_title(title)
|
||||||
tgt_norm = normalize_title(tgt_base)
|
|
||||||
|
|
||||||
# Prüfe auf Ähnlichkeit: Entweder exakt gleich oder einer beginnt mit dem anderen
|
# Prüfe auf Ähnlichkeit: Exakt gleich oder einer beginnt mit dem anderen
|
||||||
if title_norm and tgt_norm and len(title_norm) > 5:
|
if title_norm and tgt_norm and len(title_norm) > 5:
|
||||||
if (title_norm == tgt_norm or
|
if (title_norm == tgt_norm or
|
||||||
title_norm.startswith(tgt_norm) or
|
title_norm.startswith(tgt_norm) or
|
||||||
|
|
@ -344,7 +348,7 @@ class GraphExplorerService:
|
||||||
results.append(edge)
|
results.append(edge)
|
||||||
existing_edge_ids.add(edge.id)
|
existing_edge_ids.add(edge.id)
|
||||||
matched_count += 1
|
matched_count += 1
|
||||||
break
|
break # Nur einmal hinzufügen
|
||||||
|
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user