fix(geo+recall): Länder-Centroid statt Hauptstadt + Eigennamen in GNews-Query
Zwei Fixes aus der jp_demo-Verifikation: 1. Geoparsing — Länder mit Centroid statt Hauptstadt Bisher bekam ein Land die Koordinaten seiner Hauptstadt. Damit landeten alle "Japan"-Marker exakt auf Tokyo (35.69, 139.69) und die Karte suggerierte faelschlich ein Ereignis in der Hauptstadt. Neue Tabelle _COUNTRY_CENTROIDS (37 Laender) verortet ein Land in seiner geografischen Mitte (Japan: 36.20, 138.25). Laender ohne Centroid-Eintrag fallen auf die Hauptstadt zurueck. 2. Recall — Eigennamen in den Google-News-Suchfeed erzwingen Beim ersten Refresh fehlt die Headlines-Historie, daher kamen die GNews- Such-Keywords aus der Feed-Selektion. Haiku legt Eigennamen (z.B. "Qilin") in die en-Liste, die ja-Liste hatte nur Allgemeinbegriffe — die ja-Query suchte ohne "Qilin". build_news_search_feeds stellt nicht-englischen Sprach-Queries jetzt die 2 wichtigsten en-Keywords voran (Eigennamen kommen auch in fremdsprachigen Artikeln lateinisch vor). Damit ist schon der erste Refresh spezifisch. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -58,15 +58,36 @@ def build_news_search_feeds(
|
||||
locale = _GNEWS_LOCALE.get(lang_key)
|
||||
if not locale:
|
||||
continue
|
||||
kws = keywords_by_lang.get(lang_key) or []
|
||||
# Fallback: wenn fuer die Sprache keine Keywords da sind, "en" nehmen
|
||||
# (lateinische Eigennamen matchen auch in fremdsprachigen News-Indizes).
|
||||
if not kws and lang_key != "en":
|
||||
kws = keywords_by_lang.get("en") or []
|
||||
kws = [str(k).strip() for k in kws if str(k).strip()]
|
||||
if not kws:
|
||||
lang_kws = [str(k).strip() for k in (keywords_by_lang.get(lang_key) or []) if str(k).strip()]
|
||||
en_kws = [str(k).strip() for k in (keywords_by_lang.get("en") or []) if str(k).strip()]
|
||||
|
||||
if lang_key == "en":
|
||||
query_terms = en_kws[:max_keywords]
|
||||
else:
|
||||
# Fuer nicht-englische Sprachen: die ersten 2 englischen Keywords
|
||||
# voranstellen. Haiku ordnet Eigennamen/Akronyme (z.B. "Qilin",
|
||||
# "Asahi") nach vorne — und die kommen auch in fremdsprachigen
|
||||
# Artikeln lateinisch vor. Ohne das fehlt beim ersten Refresh (noch
|
||||
# keine Headlines-Historie) der entscheidende Eigenname in der Query.
|
||||
# Danach 3 sprach-spezifische Keywords.
|
||||
query_terms = en_kws[:2] + lang_kws[:3]
|
||||
# Wenn fuer die Sprache gar keine Keywords da sind: ganz auf en.
|
||||
if not lang_kws:
|
||||
query_terms = en_kws[:max_keywords]
|
||||
|
||||
# Dedup, Reihenfolge erhalten
|
||||
seen_terms: set[str] = set()
|
||||
deduped: list[str] = []
|
||||
for t in query_terms:
|
||||
tl = t.lower()
|
||||
if tl in seen_terms:
|
||||
continue
|
||||
seen_terms.add(tl)
|
||||
deduped.append(t)
|
||||
|
||||
if not deduped:
|
||||
continue
|
||||
query = " ".join(kws[:max_keywords])
|
||||
query = " ".join(deduped)
|
||||
if not query or query in seen_queries:
|
||||
continue
|
||||
seen_queries.add(query)
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren