fix(metadaten): exakt schlaegt unscharf - Jikan beendet die Kette nur bei Treffer
Der SAVEPOINT v3.16 vermutete, das Aehnlichkeits-Gate 0,55 sei "grosszuegig" und Jikan stehe in der Kette zu frueh (vor OMDb). Nachgerechnet - titel_aehnlichkeit ist eine reine Funktion - ergibt sich ein anderes Bild als vermutet: "Alien" vs. "Alien 9" -> 0,83 TRIFFT "Inception" vs. "Deception" -> 0,78 TRIFFT "Hero" vs. "Heroman" -> 0,73 TRIFFT "The Dark Knight" vs. "Dark Knight Rises" -> 0,69 TRIFFT Ein Kinofilm, den TMDB verpasst, bekam damit Anime-Metadaten mit Confidence 0,85 - und OMDb, das ihn kennt, wurde nie gefragt. Bemerkenswert dabei, und das widerlegt die Vermutung "einfach zu niedrig": Fuer den Fall, fuer den Jikan ueberhaupt eingebaut wurde, ist das Gate sogar zu HOCH. "Evangelion 2.22" gegen den MAL-Titel "Evangelion: 2.0 You Can (Not) Advance" ergibt 0,51 und faellt durch. Eine einzelne Zahl kann beides nicht leisten. Deshalb zwei Schwellen statt Umsortieren (Reihenfolge bleibt, AGENTS Regel B): Nur ein praktisch exakter Titel (>= 0,9) beendet die Kette. Ein unscharfer Treffer wird GEMERKT, dann wird OMDb gefragt - und erst wenn OMDb nichts hat, kommt er als VORSCHLAG mit Confidence 0,6 zum Zug. Damit gewinnt "exakt" immer gegen "unscharf", egal aus welcher Quelle. Antwort auf die Commander-Frage "JIKAN ist drin - wird das genutzt?": ja, und ab jetzt an der richtigen Stelle. Ehrlicher Vorbehalt: Live gegengeprueft ist das nicht - MyAnimeList war waehrend dieser Sitzung durchweg weg (Jikan antwortete HTTP 504 auf jede Anfrage). Die Arithmetik des Gates ist davon unberuehrt und in test_jikan_helpers.py festgehalten, die Kettenlogik in test_prescan_helpers.py. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -19,7 +19,6 @@ from clients.thetvdb import TheTVDBClient
|
||||
from cache import get, set as cache_set
|
||||
from cache.keys import generate_prescan_key
|
||||
|
||||
|
||||
def normalize_disc_label(label: str) -> str:
|
||||
"""Disc-Labels wie 'PULP_FICTION_DE' → 'Pulp Fiction De' (pure Funktion).
|
||||
|
||||
@@ -442,15 +441,43 @@ class PreScan:
|
||||
break
|
||||
|
||||
# Fallback 1: Jikan/MyAnimeList (kostenlos, KEIN Key) — für Anime die
|
||||
# präziseste Quelle; wählt per Titel-Ähnlichkeit, nicht Treffer #1
|
||||
# präziseste Quelle; wählt per Titel-Ähnlichkeit, nicht Treffer #1.
|
||||
#
|
||||
# NEU 26.07.2026 — „exakt schlägt unscharf", unabhängig von der
|
||||
# Reihenfolge. Vorher galt der erste Jikan-Treffer über dem Gate 0,55
|
||||
# sofort als sicherer Fund (confidence 0,85) und OMDb kam nie dran.
|
||||
# Das ist zu großzügig, und zwar messbar (offline gerechnet mit
|
||||
# titel_aehnlichkeit, echte MyAnimeList-Titel):
|
||||
#
|
||||
# „Alien" vs. „Alien 9" → 0,83 TRIFFT
|
||||
# „Inception" vs. „Deception" → 0,78 TRIFFT
|
||||
# „Hero" vs. „Heroman" → 0,73 TRIFFT
|
||||
# „The Dark Knight" vs. „Dark Knight Rises" → 0,69 TRIFFT
|
||||
#
|
||||
# Ein Kinofilm, den TMDB verpasst, bekam damit Anime-Metadaten — und
|
||||
# OMDb, das ihn kennt, wurde nie gefragt. Bemerkenswert dabei, und das
|
||||
# widerlegt die Vermutung im SAVEPOINT v3.16, das Gate sei einfach zu
|
||||
# niedrig: Für den Fall, für den Jikan überhaupt eingebaut wurde, ist
|
||||
# es sogar zu HOCH — „Evangelion 2.22" vs. „Evangelion: 2.0 You Can
|
||||
# (Not) Advance" ergibt 0,51 und fällt durch. Eine einzelne Zahl kann
|
||||
# beides nicht leisten.
|
||||
#
|
||||
# Deshalb: Nur ein praktisch exakter Titel gilt sofort. Ein unscharfer
|
||||
# Treffer wird GEMERKT, dann OMDb gefragt — und erst wenn OMDb nichts
|
||||
# hat, kommt er als VORSCHLAG (niedrige Confidence) zum Zug.
|
||||
jikan_unscharf = None
|
||||
if not matched:
|
||||
for kandidat in kandidaten:
|
||||
jikan_treffer = self.jikan.lookup(kandidat)
|
||||
if jikan_treffer:
|
||||
if not jikan_treffer:
|
||||
continue
|
||||
if jikan_treffer.get("match_score", 0) >= JikanClient.SICHER_AEHNLICHKEIT:
|
||||
confidence = 0.85
|
||||
metadata = jikan_treffer
|
||||
matched = True
|
||||
break
|
||||
else:
|
||||
jikan_unscharf = jikan_treffer
|
||||
break
|
||||
|
||||
# Fallback 2: OMDb (eigene Datenbasis — findet oft, was TMDB nicht
|
||||
# exakt trifft; braucht OMDB_API_KEY, sonst überspringt es sich selbst)
|
||||
@@ -464,6 +491,15 @@ class PreScan:
|
||||
matched = True
|
||||
break
|
||||
|
||||
# Fallback 2b: der unscharfe Jikan-Treffer — besser als nichts, aber
|
||||
# ehrlich als Vorschlag ausgewiesen (0,6 = dieselbe Stufe wie ein
|
||||
# TMDB-Vorschlag ohne exakten Treffer; das UI zeigt die Prozentzahl an
|
||||
# und der Nutzer kann korrigieren).
|
||||
if not matched and jikan_unscharf:
|
||||
confidence = 0.6
|
||||
metadata = jikan_unscharf
|
||||
matched = True
|
||||
|
||||
# Fallback 2: bester TMDB-Vorschlag ohne exakten Treffer — als
|
||||
# VORSCHLAG gekennzeichnet (niedrige Confidence, Nutzer korrigiert)
|
||||
if not matched and movies:
|
||||
|
||||
Reference in New Issue
Block a user