From 26074a42dbf344a57bd792760f7901be44ecc303 Mon Sep 17 00:00:00 2001 From: rene Date: Sat, 25 Apr 2026 09:22:14 +0200 Subject: [PATCH] =?UTF-8?q?Scraper:=20Commons-Suche=20nur=20bei=20vollst?= =?UTF-8?q?=C3=A4ndigem=20Namensmatch=20im=20Dateinamen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/scraper/fetch_wiki_images.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/backend/scraper/fetch_wiki_images.py b/backend/scraper/fetch_wiki_images.py index 8d7f9b1..5e77208 100644 --- a/backend/scraper/fetch_wiki_images.py +++ b/backend/scraper/fetch_wiki_images.py @@ -238,10 +238,11 @@ async def _commons_search(query: str, client: httpx.AsyncClient) -> str | None: resp2.raise_for_status() pages = resp2.json().get("query", {}).get("pages", {}) - # Trefferqualität: bevorzuge Bilder die den Suchbegriff im Dateinamen haben - # und lehne Treffer ab die keine Hundbezug haben - query_words = [w for w in query.lower().split() if len(w) > 3] - best_score = -1 + # Qualitätsprüfung: Dateiname muss ALLE signifikanten Wörter enthalten + # (verhindert Fehlmatches wie "Afghan" → Kind aus Afghanistan) + query_words = [w for w in query.lower().split() if len(w) > 3] + needed_score = len(query_words) # alle Wörter müssen vorkommen + best_score = -1 best: str | None = None for page in pages.values(): @@ -252,14 +253,16 @@ async def _commons_search(query: str, client: httpx.AsyncClient) -> str | None: if not thumb or not _is_usable(thumb): continue fname = urllib.parse.unquote(thumb).lower() - # Score: wie viele Suchbegriff-Wörter sind im Dateinamen? score = sum(1 for w in query_words if w in fname) if score > best_score: best_score = score best = thumb - # Mindestens 1 Wort des Suchbegriffs muss im Dateinamen vorkommen - return best if best_score >= 1 else None + # Alle signifikanten Wörter müssen im Dateinamen vorkommen + # Bei 1-Wort-Suchen: Mindestens 1 Match + if needed_score == 0: + return None + return best if best_score >= needed_score else None except Exception as exc: logger.debug("Commons search (%s): %s", query, exc)