mirror of
https://github.com/caty21/forex-dashboard.git
synced 2026-08-13 04:28:04 +00:00
fix: Discours BC faux positif titre-only + bouton Analyse en fin de titre
- newsfeed.ts: les catégories Discours BC / Chef d'État ne sont retenues que si le nom propre apparaît dans le TITRE de l'article (pas dans le body) → un article UK social avec 'Bailey' dans le body ne sera plus taggué BC - NewsTab: bouton Analyse déplacé après le titre de l'article (en fin de ligne) Layout final : [il y a Xh] [Source] [Catégorie] puis Titre... [▼ Analyse] Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
fa0b5d9c45
commit
afd0026f25
@@ -350,14 +350,8 @@ function NewsCard({ item, secondary = false }: { item: NewsItem; secondary?: boo
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Analyse + Titre */}
|
||||
{/* Titre + Analyse (bouton en fin de ligne) */}
|
||||
<div className="flex items-start gap-2 mb-1.5">
|
||||
{!secondary && (
|
||||
<button onClick={() => setExpanded(e => !e)}
|
||||
className="text-[9px] text-slate-400 hover:text-white px-1.5 py-0.5 rounded-full border border-slate-600/50 transition-colors whitespace-nowrap shrink-0 mt-0.5">
|
||||
{expanded ? "▲" : "▼ Analyse"}
|
||||
</button>
|
||||
)}
|
||||
<a href={item.url} target="_blank" rel="noopener noreferrer"
|
||||
className="group flex items-start gap-1 flex-1 min-w-0">
|
||||
<span className={`text-[12px] leading-snug font-medium group-hover:text-white transition-colors ${secondary ? "text-slate-400" : "text-slate-200"}`}>
|
||||
@@ -365,6 +359,12 @@ function NewsCard({ item, secondary = false }: { item: NewsItem; secondary?: boo
|
||||
</span>
|
||||
<ExternalLink size={10} className="text-slate-600 group-hover:text-slate-400 shrink-0 mt-0.5" />
|
||||
</a>
|
||||
{!secondary && (
|
||||
<button onClick={() => setExpanded(e => !e)}
|
||||
className="text-[9px] text-slate-400 hover:text-white px-1.5 py-0.5 rounded-full border border-slate-600/50 transition-colors whitespace-nowrap shrink-0 mt-0.5">
|
||||
{expanded ? "▲" : "▼ Analyse"}
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{item.summary && !secondary && (
|
||||
|
||||
+11
-8
@@ -788,14 +788,17 @@ async function fetchZeroHedgeNews(): Promise<NewsItem[]> {
|
||||
const summary = plainText.slice(0, 300);
|
||||
const analysisText = plainText.slice(0, 800);
|
||||
|
||||
// Pré-filtre macro : ZeroHedge couvre de nombreux sujets non-financiers.
|
||||
// On exige qu'un mot-clé macro explicite soit présent AVANT d'appliquer les
|
||||
// règles de noms de gouverneurs (évite "Bailey" dans un article social UK).
|
||||
const MACRO_CONTEXT = /\b(rate|rates|dollar|euro|pound|yen|franc|currency|currencies|forex|fx\b|economy|economic|gdp|inflation|recession|central bank|fed\b|ecb\b|boe\b|boj\b|boc\b|rba\b|rbnz\b|snb\b|fomc|treasury|bond|yield|fiscal|monetary|tariff|trade war|deficit|debt|interest rate|rate cut|rate hike|basis point)\b/i;
|
||||
if (!MACRO_CONTEXT.test(`${title} ${analysisText}`)) continue;
|
||||
|
||||
// Filtre de pertinence forex : garder seulement si une règle matche
|
||||
const { impacts, categories } = applyRules(`${title} ${analysisText}`);
|
||||
// Filtre de pertinence forex : garder seulement si une règle matche.
|
||||
// IMPORTANT : "Discours BC" et "Chef d'État" (déclenchées par des noms propres)
|
||||
// ne sont valides que si le nom apparaît dans le TITRE — évite "Bailey" dans
|
||||
// un article social UK dont le body parle aussi de la "pound" ou de l'"economy".
|
||||
const bodyResult = applyRules(`${title} ${analysisText}`);
|
||||
const titleResult = applyRules(title);
|
||||
const PERSON_CATS = new Set(["Discours BC", "Chef d'État"]);
|
||||
const categories = bodyResult.categories.filter(
|
||||
c => !PERSON_CATS.has(c) || titleResult.categories.includes(c)
|
||||
);
|
||||
const impacts = bodyResult.impacts;
|
||||
if (impacts.length === 0 && categories.length === 0) continue;
|
||||
|
||||
const dateStr = dateM?.[1]?.trim() ?? "";
|
||||
|
||||
Reference in New Issue
Block a user