RSS-Parser: Match-Schwelle adaptiv (Bug 1 aus Buckelwal-Diagnose)
Bisher musste eine Headline mindestens 2 der dynamisch generierten Suchworte enthalten, um den Match-Filter zu passieren. Bei thematisch engen Lagen (Bsp. "Buckelwal timmy") fielen damit echte Treffer wie "Transport mit Buckelwal erreicht dänische Gewässer..." durch, weil nur 1 Keyword (buckelwal) gematcht hat. Neue Heuristik: enthält der Text mindestens ein spezifisches Keyword (>=7 Zeichen, also keine kurzen Akteursnamen wie "iran" oder "trump"), reicht 1 Treffer. Bei nur kurzen, generischen Keywords gilt weiter die alte Schwelle (halb der Wörter, max. 2). Topic-Filter danach (Haiku) fängt False Positives. Damit kommen ZDF/tagesschau/n-tv-Headlines mit nur einem starken Begriff durch — der Hauptgrund, warum Lage 8 Buckelwal mit ZDF-Quelle am ersten Refresh 0 Artikel hatte. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -155,7 +155,15 @@ class RSSParser:
|
||||
summary = entry.get("summary", "")
|
||||
text = f"{title} {summary}".lower()
|
||||
|
||||
# Flexibles Keyword-Matching: mindestens die Hälfte der Suchworte muss vorkommen (aufgerundet)
|
||||
# Adaptive Match-Schwelle:
|
||||
# - Bei mindestens einem spezifischen Keyword (>=7 Zeichen) im Text reicht 1 Treffer.
|
||||
# Verhindert, dass Headlines mit nur einem starken Keyword wie "buckelwal"
|
||||
# rausfallen, wenn die Lage thematisch eng ist (Bug 1, vom User dokumentiert).
|
||||
# - Sonst: alte Heuristik (mindestens halb der Wörter, max. 2).
|
||||
specific_in_text = any(w in text for w in search_words if len(w) >= 7)
|
||||
if specific_in_text:
|
||||
min_matches = 1
|
||||
else:
|
||||
min_matches = min(2, max(1, (len(search_words) + 1) // 2))
|
||||
match_count = sum(1 for word in search_words if word in text)
|
||||
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren