Salta al contenuto
25 Giugno 2026

Costruire un feed etico con RSS, filtri Bayes e liste federate

Un percorso concreto per impostare un feed etico: RSS, filtri bayesiani, pesi, soglie e liste federate, con strumenti open-source e snippet pronti

Costruire un feed etico con RSS, filtri Bayes e liste federate

Costruire un feed informativo personalizzato senza scivolare nelle echo chamber è possibile. La chiave è combinare RSSfiltri bayesiani e liste federate con regole esplicite di diversificazione. Questo approccio mette l’utente al centro, rende trasparenti i criteri di selezione e abilita una sperimentazione replicabile grazie a tool open-source e snippet di codice minimi ma efficaci.

L’obiettivo non è solo ridurre il rumore, ma calibrare pesi e soglie per bilanciare pertinenza e pluralità. Un feed etico valorizza la scelta consapevole: fonti molteplici, filtri misurabili, logica di ranking auditabile. Di seguito, un percorso in quattro passaggi con esempi pratici e componenti riusabili.

1) Aggregare le fonti: RSS come spina dorsale

Gli RSS offrono controllo granulare e interoperabilità. Si parte con un file OPML per importare rapidamente decine di feed divisi per categorie (politica, scienza, cultura, tecnologia). Un aggregatore come Miniflux o FreshRSS consente filtraggio server-side e un’API pulita per l’elaborazione successiva. L’idea è separare raccolta e classificazione il primo livello normalizza i dati, il secondo li ordina e li valuta.

Struttura minima di un OPML di partenza, pronta per l’import in qualsiasi lettore compatibile:

<opml version="2.0">
 <head><title>Feed etico base</title></head>
 <body>
 <outline text="Tecnologia">
 <outline type="rss" text="Fonte A" xmlUrl="https:///tech/rss" />
 <outline type="rss" text="Fonte B" xmlUrl="https:///it/rss" />
 </outline>
 <outline text="Scienza">
 <outline type="rss" text="Fonte C" xmlUrl="https:///science.xml" />
 </outline>
 </body>
</opml>

Lato server, FreshRSS espone una API JSON. Questo permette di estrarre titoli, riassunti e link per alimentarli in un classificatore. L’API funge da punto unico d’ingresso, semplificando cache, quote e log.

2) Filtri bayesiani: segnali, pesi e soglie

Un filtro Naive Bayes offre un baseline robusto per stimare la pertinenza degli articoli. Si etichetta un piccolo set di training (pertinente/non pertinente, o più classi tematiche) e si applicano pesi per promuovere termini rari e penalizzare ripetizioni. Con scikit-learn bastano poche righe per ottenere uno score e fissare una soglia di pubblicazione nel feed finale.

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline

model = make_pipeline(TfidfVectorizer(ngram_range=(1,2), min_df=2),
 MultinomialNB(alpha=0.5))

# X_text: titoli+riassunti, y: etichette 0/1
model.fit(X_text_train, y_train)
proba = model.predict_proba(X_text_new)[:,1]

# soglia di pubblicazione
THRESHOLD = 0.62
mask = proba >= THRESHOLD

Lo score bayesiano va integrato con altri segnali: freschezza, lunghezza, reputazione della fonte. Un semplice ranking lineare può sommare questi contributi con pesi espliciti. Valori consigliati per iniziare: 0,6 al modello, 0,3 alla diversità di fonte, 0,1 alla novità. La soglia regola quantità/qualità; si alza se il feed diventa rumoroso, si abbassa per ampliare la scoperta.

3) Liste federate: aprire finestre sul Fediverse

Le liste federate (ad esempio su istanze Mastodon) ampliano l’orizzonte oltre i media tradizionali. Tramite l’API pubblica si possono estrarre i post di liste tematiche, convertirli in pseudo-feed e farli passare nello stesso pipeline bayesiano. Questo integra voci professionali, comunità e ricercatori, riducendo l’effetto bolla tipico dei soli siti noti.

# Esempio di fetch (pseudo)
GET https://mastodon.instance/api/v1/lists/<LIST_ID>/statuses
# Normalizzare: titolo = primi 120 char, link = url del post, fonte = account

Per garantire trasparenza, ogni elemento importato dalla rete federata include fonte e lista di provenienza. Un log giornaliero registra numero di post per istanza e tasso di accettazione dopo il filtro, utile per audit e ribilanciamento periodico dei pesi.

4) Diversificazione attiva: pesi e quote anti-bolla

Per ridurre le echo chamber serve una regola chiara: limitare il dominio dominante e garantire un mix minimo di prospettive. Si applica una quota per dominio e per categoria a ogni batch, penalizzando con un malus gli item che provengono da fonti già sovra-rappresentate. La penalità si somma al ranking, spingendo in alto contenuti equivalenti ma provenienti da fonti diverse.

# Ranking lineare con diversità
def score(item):
 s_bayes = item.proba
 s_recency = decay(item.age_hours)
 s_div = diversity_bonus(item.domain, item.topic)
 return 0.6*s_bayes + 0.3*s_div + 0.1*s_recency

# Malus per eccesso di dominio
def diversity_bonus(domain, topic):
 if count_in_batch(domain) > QUOTA_DOMAIN:
 return -0.25
 if count_in_batch(topic) < MIN_TOPIC_MIX:
 return +0.15
 return 0.0

Due accorgimenti pratici: 1) introdurre una piccola quota di esplorazione (ad esempio il 10% di item con score sotto soglia ma di fonti rare); 2) applicare de-dup semantico su titolo e URL per evitare ripetizioni tra syndication e comunicati ripubblicati.

5) Tool open-source e orchestrazione replicabile

Una pipeline minima e ripetibile si può ottenere con docker-compose un servizio per l’aggregazione RSS, uno per il classificatore, uno per l’API/renderer. La persistenza su PostgreSQL facilita query e audit. Cron job quotidiani rieseguono il training con feedback esplicito (click, salvataggi) per aggiornare il modello in modo controllato.

version: '3.9'
services:
 freshrss:
 image: freshrss/freshrss
 ports: ["8080:80"]
 classifier:
 build:./classifier
 api:
 build:./api
 environment:
 - THRESHOLD=0.62
 - WEIGHTS=0.6,0.3,0.1

Per l’interfaccia, un semplice frontend statico consuma l’API e mostra badge di provenienza, motivazioni del ranking e pulsanti di feedback. Pubblicare su GitHub o piattaforme equivalenti con istruzioni, seed OPML e set di etichette iniziali rende la soluzione replicabile e verificabile da chiunque.

6) Valutare e calibrare: metriche trasparenti

Un feed etico va misurato con metriche che uniscano rilevanza e pluralità. Oltre al CTR, si monitora l’Indice di diversità di fonte (es. entropia dei domini), la Copertura tematica per categoria e la Stabilità del ranking al variare delle soglie. Un report settimanale confronta l’attuale configurazione con una baseline casuale, per quantificare il guadagno di qualità senza sacrificare la varietà.

Regola operativa: quando l’entropia di dominio cala sotto una soglia prefissata, si aumenta il peso della diversità o si amplia il set di RSS e liste federate. Quando il rumore cresce, si alza la soglia bayesiana di pochi punti e si rinsalda il de-dup. Iterazioni piccole e frequenti migliorano stabilità e comprensibilità dell’intero sistema.

Autore

Ilaria Mauri

Ilaria Mauri, bolognese, decise di seguire il giornalismo sportivo dopo una notte al Dall'Ara durante una partita decisiva: oggi coordina le pagine di competizioni e commenti. In redazione predilige reportage sul campo e conserva il biglietto di quella partita come prova della svolta.