Pipeline de decisión

Cada 10 minutos corremos un ciclo que pasa por 4 etapas. Sólo lo que supera todas se guarda como incidente.

  1. Recolectar. Pulimos RSS + Telegram + Reddit + ADL + Bellingcat en paralelo. ~240 fuentes RSS + ~80 subreddits + ~46 canales de Telegram + ADL + Bellingcat + scrapers full-text de 8 países LATAM. 800-1500 items por ciclo, 31 idiomas de matching.
  2. Filtrar basura. Descartamos items con artefactos de Google Translate ("please select two distinct languages", etc.), widgets, navegación de sitios y texto demasiado corto.
  3. Match de keywords. El item tiene que mencionar al menos una palabra de nuestro lexicon (ver abajo). Este es el filtro que marca items en rojo en el feed LIVE.
  4. Clasificar. Los items que hicieron match pasan a un clasificador automatizado que extrae país + tipo + severidad + traducciones ES/EN, con redundancia interna y un respaldo local basado en reglas para garantizar continuidad.

Lexicon — 31 idiomas

El match de keywords es el filtro más visible. Un item entra al feed de antisemitismo sólo si contiene al menos una de estas raíces (case-insensitive, substring). Cubrimos:

IdiomaEjemplos de keywords
🇸🇦 العربية (árabe)معاد للسامية, يهود, المحرقة, نازي
🇧🇬 Български (búlgaro)антисемит, синагога, евреи, еврейск, холокост, нацист, свастика
🇨🇿 Čeština (checo)antisemit, antisemitismus, synagoga, žid, žido, holokaust, šoa, nacista, hákový kříž
🇩🇰 Dansk (danés)antisemit, synagoge, jøde, jøder, jødisk, holocaust, shoah, nazist, hagekors
🇩🇪 Deutsch (alemán)antisemit, synagoge, jüdisch, juden, holocaust, shoah, hakenkreuz, holocaustleugnung
🇬🇷 Ελληνικά (griego)αντισημιτ, συναγωγή, εβραί, εβραϊκ, ιουδα, ολοκαύτωμα, σοά, ναζί, σβάστικα, κιπά
🇬🇧 English (inglés)antisemit, synagogue, jewish, holocaust, shoah, nazi, swastika, yarmulke, kippah, tefillin
🇪🇸 Españolantisemit, antisemita, sinagoga, judío, holocausto, shoah, nazi, neonazi, esvástica, kipá, daia, amia
🇪🇪 Eesti (estonio)antisemit, sünagoog, juut, juudi, holokaust, natsi, haakrist
🇫🇷 Françaisantisémit, synagogue, juif, juive, holocauste, shoah, svastika, croix gammée, kippa, crif
🇮🇱 עברית (hebreo)אנטישמי, יהוד, בית כנסת, שואה, נאצי, כיפה
🇭🇷 Hrvatski (croata)antisemit, sinagoga, židov, židovsk, holokaust, nacist, kukasti križ
🇮🇸 Íslenska (islandés)andgyðing, gyðingahat, samkunduhús, gyðing, helför, nasist, hakakross
🇮🇹 Italianoantisemit, sinagoga, ebreo, ebrei, olocausto, shoah, svastica, croce uncinata
🇱🇻 Latviešu (letón)antisemīt, sinagoga, ebrej, holokaust, nacist, kāškrust
🇲🇰 Македонски (macedonio)антисемит, синагога, евреин, еврејск, холокауст, нацист, свастика
🇭🇺 Magyar (húngaro)antiszemit, zsinagóga, zsidó, holokauszt, náci, horogkereszt
🇳🇱 Nederlandsantisemit, synagoge, joods, jodendom, holocaust, hakenkruis, keppeltje
🇳🇴 Norsk (noruego)antisemitt, synagoge, jøde, jøder, jødisk, holocaust, nazist, hakekors
🇵🇱 Polski (polaco)antysemit, synagoga, żyd, żydow, żydowsk, holokaust, swastyka, jarmułka
🇵🇹 Portuguêsantissemit, sinagoga, judeu, holocausto, suástica, quipá
🇷🇴 Română (rumano)antisemit, sinagog, evreu, evrei, evreic, holocaust, nazist, svastică
🇷🇺 Русский (ruso)антисемит, синагог, еврей, иудей, холокост, нацис, свастик
🇷🇸 Српски / Srpski (serbio)антисемит, синагога, јеврејин, холокауст / antisemit, jevrej, holokaust, nacist
🇸🇰 Slovenčina (eslovaco)antisemit, synagóga, žid, žido, holokaust, šoa, nacista, hákový kríž
🇸🇮 Slovenščina (esloveno)antisemit, antisemitizem, sinagoga, žid, judov, holokavst, šoa, nacist, kljukasti križ
🇦🇱 Shqip (albanés)antisemit, antisemitizm, sinagogë, hebre, hebrenj, hebraik, holokaust, nazist, svastikë
🇫🇮 Suomi (finlandés)antisemitismi, synagoga, juutalais, holokaust, natsi, uusnatsi, hakaristi
🇸🇪 Svenska (sueco)antisemit, synagoga, jude, judar, judisk, förintelsen, shoah, nazist, nynazist, hakkors, kippa
🇹🇷 Türkçe (turco)antisemit, antisemitik, sinagog, yahudi, yahudiler, holokost, şoa, nazi, gamalı haç
🇺🇦 Українська (ucraniano)антисеміт, синагог, єврей, голокост, нацис, свастик

Si ves un match que creés que es falso positivo o falta una palabra, escribinos y lo revisamos.

Qué NO es antisemitismo (según el pipeline)

Un item con keyword match no es automáticamente un incidente. Lo que se guarda como incidente tiene que cumplir tres condiciones adicionales:

  • Describir algo concreto. El clasificador rechaza descripciones genéricas tipo "discurso de odio antisemita en redes sociales", "vandalismo antisemita", "amenaza a comunidad judía" — son plantillas vacías. Tiene que haber lugar + actor + acción.
  • Mínimo 25 caracteres de descripción. Cortar debajo descarta tags, metadatos, fragmentos.
  • La descripción debe volver a mencionar una keyword. Si el modelo parafrasea y pierde el ángulo antisemita, se descarta: significa que la clasificación se desvió del tema.

Además, el Monitor NO cataloga como antisemitismo:

  • Contenido satírico, artístico o editorial que no describa un hecho concreto.
  • Crítica a políticas del Estado de Israel per se (distinguido de ataques a judíos o instituciones judías — línea IHRA).
  • Declaraciones del propio Estado de Israel (las reglas de clasificación lo descartan por no ser incidente).
  • Noticias donde "Israel" aparece como tema colateral sin contexto de agresión, legislación, discurso o ataque a judíos.

Clasificación automatizada

Los items que pasan el keyword match se mandan a un clasificador que extrae los siguientes campos con un schema estricto:

country   → código ISO-3166 alfa-2
type      → attack | vandalism | hate_speech | legislation | boycott |
            denial | threat
severity  → low | medium | high | critical
description_es / description_en → traducciones mutuas del MISMO hecho
            concreto, con lugar + actor + acción
original_language → idioma fuente

Las instrucciones identifican incidentes concretos — ataques a sinagogas / cementerios judíos, agresiones físicas, vandalismo nazi, discurso de odio de figuras públicas, legislación discriminatoria, boicots, negacionismo del Holocausto, amenazas — y descartan menciones culturales (cine, literatura, conmemoraciones) y solidaridad inter-religiosa positiva.

Tolerancia a fallos

Para no perder incidents si un componente del clasificador tiene rate-limit o cae temporalmente, el sistema opera con redundancia interna:

  1. Modelo primario. Procesa los items en lotes; si rechaza por rate-limit, hay backoff y reintento sobre un modelo secundario.
  2. Failover a modelos alternativos. Si el primario sigue indisponible o el payload no entra, se invocan modelos alternativos. Todos mantienen el mismo schema de output.
  3. Heurístico local. Si los modelos automatizados están todos indisponibles, opera un clasificador local basado en regex multilingües que infiere tipo (ataque, vandalismo, amenaza, etc.) y severidad del texto, y detecta país por catálogo de aliases. Cuando no se puede inferir país, el incidente queda como global. No traduce — usa el texto fuente como descripción, y cuando los modelos vuelven los items pueden reclasificarse.

Corroboración entre fuentes

Cuando el mismo hecho aparece en más de un medio independiente, lo marcamos como verificado. Esto se ve en el dashboard como el toggle "solo verificados" de los filtros, y en el RSS feed por defecto solo entran verificados.

El cómputo es simple:

  • Cada incidente tiene un campo source_count con el número de fuentes que lo reportaron. Se incrementa cada vez que el dedup colapsa otro item al mismo hash.
  • source_count >= 2verificado (✓).
  • credibility_score es un peso adicional que combina cantidad de fuentes y calidad (un reporte de ADL o Bellingcat pesa más que un canal de Telegram aleatorio).

Verificación NO significa "verdad confirmada por nosotros" — significa que el hecho fue reportado por al menos dos medios distintos que monitoreamos. Para uso académico o legal, vale lo mismo: contrastá contra las fuentes primarias.

Cómo se calcula el índice continental

El bloque Antisemitismo por continente · 30 días que ves arriba del feed es un índice bidimensional: cada cuadradito muestra dos scores independientes — amenaza (negativo) y esperanza (positivo) — para que se pueda leer en un mismo glance qué tan grave es la actividad antisemita Y qué tan robusta es la respuesta institucional/comunitaria.

Los scores son absolutos: cada continente tiene su propio número que sube y baja independientemente de los otros. Antes usábamos un único índice relativo (max-normalizado a 0-100), pero eso fijaba al continente más activo en 100 cada día y daba la falsa impresión de "techo permanente". Ahora cada dimensión vive en bandas categóricas fijas.

Las dos dimensiones

DimensiónMidePolaridadEjemplos de items
AmenazaActividad antisemita recientenegativeataque, vandalismo, discurso de odio, legislación discriminatoria, boicot, negacionismo, amenaza
EsperanzaRespuesta institucional o comunitariapositivecondena judicial, ley protectora, vigilia/marcha de apoyo, programa educativo institucional

Las dimensiones son ortogonales: una región puede tener amenaza alta y esperanza alta (mucho pasa, mucho se responde), o amenaza alta y esperanza baja (mucho pasa, poca respuesta institucional), etc. NO se restan ni se promedian — se muestran en paralelo.

Fórmula (idéntica para ambas dimensiones)

score(continente) = Σ [ peso_severidad(item) × frescura(item) ]
     donde
        peso_severidad = { low: 1, medium: 2, high: 4, critical: 8 }
        frescura(item) = max(0, 1 - días_de_antigüedad / 30)   // decay lineal

(redondeado a 1 decimal)

Para los items positivos (esperanza) la severity se interpreta como alcance: low=local, medium=regional, high=nacional, critical=internacional. Una condena judicial de un tribunal supremo nacional pesa más que una marcha de apoyo barrial — pero ambas suman a la dimensión esperanza.

Bandas (thresholds fijos, mismas para ambas dimensiones)

BandaScore (raw)Lectura amenazaLectura esperanza
Calmo0 – 5sin actividad antisemita detectadasin respuestas detectadas
Bajo5 – 301-5 incidentes leves o 1-2 mediosrespuesta inicial
Moderado30 – 100volumen sostenido mediorespuesta media
Elevado100 – 500muchos incidentes graves o muy recientesrespuesta robusta
Crítico500+cluster severo continental con cobertura sostenidarespuesta sostenida

Importante: en la dimensión esperanza, la banda "Calmo" no es buena noticia — significa que NO se detectaron respuestas institucionales aún, posiblemente porque la región no las publicó, o porque no las hubo. Se etiqueta como "sin respuestas" en la UI para evitar confusión.

Ejemplo

Si MENA acumula 10 incidentes high dentro de la última semana, su contribución es 10 × 4 × ~0.8 = 32 → banda Moderado. Si LATAM tiene 2 incidentes low de hace 25 días, contribuyen 2 × 1 × ~0.16 = 0.32 → banda Calmo. Si Europa acumula ~200 incidentes mixtos (high + medium) recientes, supera 500 → banda Crítico. Los tres números viven independientemente; LATAM no se ve "más bajo" por culpa de MENA o Europa.

La barra visual del dashboard está caped a 500 (un score de 500 llena la barra). Arriba de 500 la barra se queda llena pero el número absoluto sigue creciendo en la etiqueta. Esto evita que un continente outlier comprima visualmente el resto.

Bucketeo por continente

Código ISO-3166 alfa-2 entre paréntesis. Continentes y países ordenados alfabéticamente.

  • África Subsahariana (16): Angola (AO), Camerún (CM), Costa de Marfil (CI), Etiopía (ET), Ghana (GH), Kenia (KE), Mozambique (MZ), Nigeria (NG), RDC (CD), Ruanda (RW), Senegal (SN), Sudáfrica (ZA), Tanzania (TZ), Uganda (UG), Zambia (ZM), Zimbabue (ZW).
  • Asia (22): Afganistán (AF), Bangladesh (BD), Camboya (KH), China (CN), Corea del Sur (KR), Filipinas (PH), Hong Kong (HK), India (IN), Indonesia (ID), Japón (JP), Kazajistán (KZ), Malasia (MY), Mongolia (MN), Myanmar (MM), Nepal (NP), Pakistán (PK), Singapur (SG), Sri Lanka (LK), Tailandia (TH), Taiwán (TW), Uzbekistán (UZ), Vietnam (VN).
  • Europa (41): Albania (AL), Alemania (DE), Austria (AT), Bélgica (BE), Bielorrusia (BY), Bosnia (BA), Bulgaria (BG), Chequia (CZ), Chipre (CY), Croacia (HR), Dinamarca (DK), Eslovaquia (SK), Eslovenia (SI), España (ES), Estonia (EE), Finlandia (FI), Francia (FR), Grecia (GR), Hungría (HU), Irlanda (IE), Islandia (IS), Italia (IT), Kosovo (XK), Letonia (LV), Lituania (LT), Luxemburgo (LU), Macedonia del Norte (MK), Malta (MT), Moldavia (MD), Montenegro (ME), Noruega (NO), Países Bajos (NL), Polonia (PL), Portugal (PT), Reino Unido (UK), Rumania (RO), Rusia (RU), Serbia (RS), Suecia (SE), Suiza (CH), Ucrania (UA).
  • LATAM (20): Argentina (AR), Bolivia (BO), Brasil (BR), Chile (CL), Colombia (CO), Costa Rica (CR), Cuba (CU), Ecuador (EC), El Salvador (SV), Guatemala (GT), Haití (HT), Honduras (HN), México (MX), Nicaragua (NI), Panamá (PA), Paraguay (PY), Perú (PE), Rep. Dominicana (DO), Uruguay (UY), Venezuela (VE).
  • MENA (21): Arabia Saudita (SA), Argelia (DZ), Baréin (BH), Egipto (EG), Emiratos (AE), Irak (IQ), Irán (IR), Israel (IL), Jordania (JO), Kuwait (KW), Líbano (LB), Libia (LY), Marruecos (MA), Omán (OM), Palestina (PS), Qatar (QA), Siria (SY), Sudán (SD), Turquía (TR), Túnez (TN), Yemen (YE).
  • Norteamérica (2): Canadá (CA), EEUU (US).
  • Oceanía (2): Australia (AU), Nueva Zelanda (NZ).

Incidentes sin país detectable aparecen en el timeline marcados como globales, pero no entran al índice continental — no tienen continente al cual sumar.

Qué NO es el índice

  • No es un ranking absoluto de "dónde viven más judíos en riesgo". Un continente con menos cobertura mediática tendrá score bajo aunque la realidad sea peor.
  • No mide percepción ni opinión pública. Sólo incidentes clasificados por el pipeline — ver sección anterior.
  • No suma años: la ventana de 30 días limita el horizonte temporal, y el decay hace que un incidente de hace 29 días casi no cuente. Para análisis histórico, usar /api/incidents?since=… directo.
  • No es per-cápita. ADL/CST publican estadísticas normalizadas por población judía; nosotros no lo hacemos por ahora porque las estimaciones poblacionales varían. Acá el score es volumen ponderado puro.

Fuentes monitoreadas

Cada incidente que guardamos tiene un campo source_url clickable. Fuentes ordenadas alfabéticamente:

  • ADL — feed directo de la Anti-Defamation League.
  • Bellingcat — investigaciones OSINT sobre extremismo.
  • Newswires RSS — ~240 medios en 31 idiomas. Regiones y medios en orden alfabético:
    • África: allAfrica (general + Ethiopia + Ghana + Kenya + Nigeria), BBC Africa, BBC Afrique, Borkena (Etiopía), Daily Maverick, eNCA (SA), Mail & Guardian, News24 (SA — Top + Local), Premium Times (Nigeria), Reporter Ethiopia, South African Jewish Report, Standard Media (KE), The Citizen (SA), The Namibian, This Day (NG).
    • Asia-Pacífico: ABC Australia, Asia Sentinel, Australian Jewish News, Bangkok Post, Channel News Asia, China Daily, Dawn (Pakistán), Express Tribune (Pakistán), Geo News, Global Times, Hindustan Times, HKFP (Hong Kong Free Press), India Today, Japan Times, Korea Herald, Korea Times, Malay Mail, Mint, NDTV, Nikkei Asia, RNZ, SBS, SCMP, Scroll.in, SMH, Straits Times, The Conversation AU, The Daily Star (Bangladesh), The Hindu, Times of India, TOI World, Xinhua, Yonhap.
    • Balcanes: Balkan Insight, Danas (RS), Delo (SI), ERT News, Greek Reporter, Index.hr, Koha (Kosovo), N1 Serbia, Naftemporiki, Neos Kosmos (diáspora), Politika (RS), RTV Slovenia, Telegrafi, To Vima, tportal (HR), Vijesti (ME).
    • Bálticos: 15min Lituania, Baltic Times, ERR Estonia, LSM Latvia (EN+LV), Postimees (ET).
    • Europa: 7sur7 (BE), ABC España, ANSA, BBC World, Corriere, Corriere Esteri, Der Standard (AT), DW, Economist, El Mundo, Euronews (EN+ES), France Info, FT, Gazeta Wyborcza, Guardian, Le Monde, Le Temps (CH), Libération, NOS (NL), Notes from Poland, OKO.press, Politico EU, Repubblica, Spiegel, SRF (CH), Tagesschau, The Independent, TVN24, VRT (BE), Zeit.
    • Europa del Este / CEE: České noviny, Deník N (CS), Denník N (SK), Digi24 (RO), HotNews, Hungary Today, iDNES, Republika (MK), Seznam Zprávy, Sofia Globe (BG), Telex (HU), Ziarul de Gardă (MD).
    • Rusia / ex-URSS: Astana Times (KZ), Civil.ge (Georgia), JAMnews (Cáucaso), Meduza (RU exiliada), Moscow Times, NV Ukraine (EN), Pravda Ucrania, RBC (RU), TASS (EN+RU).
    • LATAM: 14ymedio, Agência Brasil, AMIA (AR), Aristegui, Ámbito, BBC Brasil, BBC Mundo, Chequeado, CIPER (Chile), Clarín, Confidencial (Nicaragua), Cronista, El Comercio PE, El Deber BO, El Mundo SV, El País (España), El País UY, El Tiempo CO, Emol, Enlace Judío MX, Estadão, Expansión MX, Folha, France 24 (ES), G1 Globo, InSight Crime, Infobae, JOTA, La Jornada, La Nación AR, La Prensa PA, La Tercera, Los Tiempos, Página Siete, Perfil, Prensa Libre GT, RPP Perú, Río Negro, TN Argentina, Tiempo Argentino, UOL, Veja.
    • MENA: Al Jazeera (EN+AR), Al-Monitor, Anadolu Agency (Turquía), Arab News, Asharq Al-Awsat, Daily Sabah, Egypt Independent, Egyptian Streets, Fanack, Hürriyet, Hürriyet Daily News, Mehr News, Middle East Eye, Middle East Monitor, Morocco World News, Tehran Times, The National UAE.
    • Nórdicos: Aftonbladet, Dagens Nyheter, DR (DK), Helsingin Sanomat, NRK (NO), RÚV (IS), SVT, Yle Finland (EN).
    • Norteamérica: ABC News, B'nai Brith Canada, Canadian Jewish News (CJN), CBC, Fox News, Globe and Mail, National Post, Newsweek, NYT, WSJ.
    • Prensa judía / monitores antisemitismo: ADL, ADL Antisemitism Uncovered, AJC, Algemeiner, Amadeu Antonio Stiftung (DE), Arutz Sheva, Campaign Against Antisemitism (UK), Combat Antisemitism Movement, Forward, Haaretz (HE+EN), Hope Not Hate (UK), i24News, Israel Hayom, JCPA, Jerusalem Post, Jewish Chronicle UK, Jewish Insider, Jewish Journal, Jewish News UK, Jewish Press, Jewish Standard NJ, JNS, JTA, Moment, NGO Monitor, Times of Israel, YNet.

    El catálogo de fuentes se actualiza periódicamente. Nuevas fuentes entran al ciclo de scanning automáticamente.

  • News API (LATAM full-text) — Consume noticias.kavnes.com/search, una API propia que sirve full-text scrapeado de diarios mainstream en 8 países LATAM (Argentina, Uruguay, Chile, Perú, Paraguay, Bolivia, Colombia, México). Aporta cobertura más profunda que los RSS top-15 — agarra artículos completos de Clarín, La Nación, Infobae, El Día, T13, Cooperativa, Diario Popular, etc.
  • Reddit — ~80 subreddits. Dedicados: r/antisemitism, r/Holocaust, r/HolocaustHistory, r/IsraelPalestine, r/Israel, r/Jews, r/JewsOfConscience, r/Judaism, r/jewishevents. Aggregators: r/africa, r/asia, r/EuropeanPolitics, r/europe, r/geopolitics, r/MiddleEastNews, r/news, r/politics, r/worldnews, r/worldpolitics. País/región (orden alfa): r/argentina, r/australia, r/austria, r/bangladesh, r/bosnia, r/brasil, r/bulgaria, r/Chile, r/china, r/colombia, r/croatia, r/czech, r/denmark, r/deutschland, r/egypt, r/Estonia, r/Ethiopia, r/Finland, r/france, r/germany, r/greece, r/hungary, r/iceland, r/india, r/indonesia, r/iran, r/ireland, r/italy, r/japan, r/Kenya, r/korea, r/latinamerica, r/latvia, r/lebanon, r/lithuania, r/malaysia, r/mexico, r/Netherlands, r/newzealand, r/Nigeria, r/norway, r/pakistan, r/palestine, r/peru, r/philippines, r/poland, r/polska, r/Romania, r/russia, r/serbia, r/slovakia, r/slovenia, r/southafrica, r/spain, r/sweden, r/syria, r/turkey, r/ukpolitics, r/ukraine, r/unitedkingdom, r/uruguay, r/venezuela.
  • Telegram — ~46 canales públicos con preview /s/ (orden alfa). Diarios: @algemeiner, @alertacolombia, @alertamundialnews, @animalpolitico, @cibercuba, @ClarinCom, @cnnbrasil, @crhoy, @cronicauno, @cubanosporelmundo, @diariolibre, @elcomercioperu, @eldestapeweb, @elheraldohn, @estadao, @fastcheckcl, @folha, @g1noticias, @infobae, @jerusalem_post, @kann_news, @kyivindependent, @kyivpost_official, @laprensani, @lemonde_fr, @lenouvelliste, @meduzalive, @nexta_tv, @NHK_WORLD, @pagina12, @primiciasec, @rainews, @revistaistoe, @scmp_news, @sinembargomx, @spiegel_online, @tehran_times, @Times_of_Israel, @walla_il, @welt_de. Antisemitism monitors: @adlofficial, @jtanews, @stopantisemitism, @worldjewishcongress. OSINT: @bellingcat, @OSINTdefender.

Dedup y persistencia

El dedup corre en dos capas para colapsar la misma noticia reportada por múltiples medios en una sola fila (con su source_count incrementado, ver corroboración):

  1. Hash exacto: cada incidente se guarda con un sha1(country|type|description_prefix_120). Si dos clasificaciones producen hashes idénticos, mergea automáticamente.
  2. Fuzzy second-pass: si el hash no matchea, comparamos la descripción contra los últimos 50 incidentes del mismo país y tipo en las últimas 48h. Usamos distancia de Levenshtein normalizada (edit_distance / max_length, sobre el texto en lowercase + sin diacríticos + sin artículos). Si la similitud es ≥ 85% (ratio ≤ 0.15) los tratamos como el mismo evento. Esto captura casos donde dos medios escriben "Asalto fuera de sinagoga..." vs "Asalto fuera de una sinagoga..." — variaciones de phrasing que el hash no podría agrupar.

Para textos cortos (< 30 caracteres normalizados) el threshold se aprieta a 7.5%, porque ahí cada palabra pesa mucho — "Sinagoga atacada en Berlín" vs "...en Londres" tiene similitud alta pero son eventos distintos. El cap de 48h evita que dos eventos similares pero separados en el tiempo se mergeen erróneamente.

El storage es append-only con backups automáticos diarios — no eliminamos histórico. Los incidentes solo crecen en source_count y credibility_score a medida que llegan corroboraciones.

Cobertura histórica

El 23 de abril de 2026 arrancó nuestro monitoreo en vivo: desde esa fecha el pipeline ingesta incidentes a medida que se publican. Todos los gráficos de /explorar marcan ese corte con una línea vertical punteada.

La serie previa al 23.4.2026 es retro-llenado: fuimos hacia atrás en el tiempo aplicando el mismo set completo de fuentes que monitoreamos hoy al período histórico que indicamos. No es que haya más fuentes en un año que en otro — el catálogo es consistente para toda la ventana retroactiva, así que las variaciones de volumen entre años reflejan cobertura mediática real (y accesibilidad de archivos), no cambios en nuestro método.

Cómo acceder a los datos

Siete maneras de consumir el Monitor según tu caso:

  • Dashboard webantisemitismo.kavnes.com. Visualización en vivo con índice continental, feed LIVE, filtros y timeline. Para navegación general.
  • Archivo navegable/archivo. Búsqueda full-text (FTS5) sobre todo el histórico, filtros por país / tipo / severidad / rango de fechas / verificados, y export CSV de los resultados. Para investigación histórica o citas puntuales. Para descargas masivas o dataset histórico completo: contactar primero (micaela@kavnes.com).
  • Digest semanal por email — Suscripción gratis con doble opt-in (desde la home). Llega los viernes 9am ART con una narrativa editorial breve, los top incidentes de la semana ranqueados por credibilidad y el índice continental actualizado. Sin spam, baja con un click.
  • Feed RSS/rss (instrucciones de suscripción) o /incidents.rss (XML directo para readers). Por defecto solo entran incidentes verificados (≥2 fuentes), dimensión amenaza. Acepta filtros por query string: ?country=AR, ?type=attack, ?severity=high, ?lang=en, ?verified=0 para incluir todos, ?polarity=positive para feed de respuestas e iniciativas, ?polarity=all para mezclados.
  • Widget embebible/embed. Iframe ready-to-paste que muestra el índice continental en tiempo real. Pensado para periodistas / ONGs / blogs que quieren citar el índice con atribución. Se actualiza solo cada minuto, sin cookies, CSP frame-ancestors *. El widget tiene que mostrar la atribución al Monitor — no se permite white-label.
  • API JSON — para uso programático: /api/incidents, /api/index/continent, /api/countries, /api/search, /api/stream. Documentación completa de endpoints con params, ejemplos curl y response shapes. Default: 60 req/min, 2000 req/día por IP, 10 req/min en search/CSV. Para uso programático sostenido (research, ONGs, integración en redacción) escribir a micaela@kavnes.com y te damos una API key (header x-api-key) sin tope. Es gratis pero queremos saber qué se está construyendo.
  • Track-record por fuente — endpoint API /api/sources: stats agregadas por outlet (incidentes contribuidos, tasa de corroboración, países cubiertos). Solo incluye outlets que ya generaron al menos un incident; el catálogo completo de ~370 fuentes monitoreadas está documentado en la sección Fuentes monitoreadas abajo.

Los datos generados por el Monitor (clasificación, traducciones, scores) están bajo CC BY-NC 4.0. Uso académico, periodístico, educativo y de ONGs: libre con atribución. Uso comercial (reventa de datos, integración en productos, dashboards corporativos, automation a gran escala) no está permitido sin autorización previa — pedila escribiendo a micaela@kavnes.com. La idea no es cobrar, es saber quién lo usa para qué. El texto original de las noticias pertenece a sus medios.

Limitaciones honestas

  • Clasificación sesgada. Los modelos automatizados tienen sesgos heredados. La clasificación de severity es especialmente ruidosa — usarla como indicador, no como verdad absoluta.
  • Falsos negativos. Un ataque usando lenguaje eufemístico (ej. "sionista" sin mencionar judíos) puede no disparar el lexicon.
  • Falsos positivos. El heurístico a veces clasifica como incidente un artículo analítico que menciona "antisemitismo" sin ser un hecho concreto. El validador los filtra pero no siempre.
  • Sesgo de cobertura. Si un incidente no aparece en ningún medio que monitoreamos, no existe para el Monitor. Comunidades pequeñas o países con prensa censurada quedan subrepresentadas.
  • Traducción imperfecta. Las descripciones en ES y EN son output de un modelo, no de traductor humano. Para citar en reportes, volvé siempre a la fuente original (campo source_url).
  • Falsos colapsos del fuzzy dedup. El segundo-pass que mergea descripciones con similitud ≥ 85% (ver dedup) tiene tasa de error baja pero no nula. Eventos genuinamente distintos con phrasing muy parecido y mismo país+tipo en las mismas 48h pueden colapsar a una fila. Los incidentes mergeados quedan trazables vía additional_sources, pero la descripción visible será una sola.
  • Métricas de fuente son volumen, no precisión. El endpoint /api/sources mide cuántos incidentes contribuye cada outlet y qué tan seguido otros confirman. NO mide accuracy real (eso requeriría ground-truth manual). Una fuente "tier 5" puede ser tan confiable como una "tier 10" en su nicho.

Cómo citar este trabajo

El Monitor Global de Antisemitismo es un recurso público y gratuito. Si lo usás en una nota, reporte, paper o publicación, por favor citá así:

Cita corta (general)

Monitor Global de Antisemitismo (2026). antisemitismo.kavnes.com
[accedido: DD-MM-YYYY]

Cita de un incidente específico

Cada incidente tiene un permalink con ID estable. Citá así:

Monitor Global de Antisemitismo (2026). "Ataque a sinagoga en Villa Crespo."
antisemitismo.kavnes.com/inc/1234 [accedido: DD-MM-YYYY]
Fuente primaria: {URL original del medio}

Siempre citá también la fuente primaria (campo source_url) — el Monitor es agregador, no reportero. Nuestra clasificación es heurística/IA y puede tener errores. Para uso académico o legal, verificá contra el medio original.

Cita del índice continental

Índice Global de Antisemitismo por Continente, Monitor Global de Antisemitismo (2026).
antisemitismo.kavnes.com/metodologia#indice-continental
Ventana: últimos 30 días. Score absoluto ponderado, banda categórica.

Formato BibTeX

@misc{monitor_antisemitismo_2026,
  title  = {Monitor Global de Antisemitismo},
  author = {Kavnes, LLC},
  year   = {2026},
  url    = {https://antisemitismo.kavnes.com},
  note   = {Accedido: DD-MM-YYYY}
}

Licencia de datos

Los metadatos que generamos (clasificación, traducción, score) se pueden usar libremente con atribución para uso no comercial (CC BY-NC 4.0). Para uso comercial pedir licencia en micaela@kavnes.com. El texto original de las noticias pertenece a sus medios respectivos — respetá su licencia cuando reproduzcas contenido.

Contacto

Para consultas, correcciones, colaboraciones o sugerencias de fuentes nuevas:

micaela@kavnes.com

Si ves un incidente mal clasificado o una noticia antisemita que se nos pasó, mandá el link y lo revisamos manualmente. Priorizamos respuestas que incluyan URL de la fuente primaria.