Malaji71's picture
Update index.html
ace16ec verified
Raw
History Blame Contribute Delete
39.5 kB
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sesgo Editorial: EFE vs AP | Ángel E. Pariente</title>
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400;1,700&family=IBM+Plex+Mono:wght@300;400;500&family=Libre+Baskerville:ital,wght@0,400;0,700;1,400&display=swap" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.1/chart.umd.js"></script>
<style>
:root {
--ink: #18160f;
--paper: #f2ede3;
--cream: #ede8dc;
--red: #b82c1f;
--blue: #1a3f6f;
--gold: #8a6c1a;
--muted: #6b6459;
--rule: #ccc5b5;
--light: #e8e2d4;
--serif: 'Playfair Display', Georgia, serif;
--body: 'Libre Baskerville', Georgia, serif;
--mono: 'IBM Plex Mono', monospace;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
background: var(--paper);
color: var(--ink);
font-family: var(--body);
font-size: 15px;
line-height: 1.75;
}
/* ─── MASTHEAD ─── */
.masthead {
background: var(--ink);
color: var(--paper);
padding: 0;
}
.masthead-top {
border-bottom: 1px solid rgba(255,255,255,0.12);
padding: 1rem 3rem;
display: flex;
justify-content: space-between;
align-items: center;
font-family: var(--mono);
font-size: 10px;
letter-spacing: 0.15em;
text-transform: uppercase;
opacity: 0.5;
}
.masthead-main {
padding: 3rem 3rem 2.5rem;
display: grid;
grid-template-columns: 1fr auto;
gap: 2rem;
align-items: end;
}
.pub-name {
font-family: var(--serif);
font-size: clamp(2rem, 4vw, 3.2rem);
font-weight: 700;
letter-spacing: -0.02em;
line-height: 1;
margin-bottom: 0.5rem;
}
.pub-sub {
font-family: var(--mono);
font-size: 10px;
letter-spacing: 0.2em;
text-transform: uppercase;
opacity: 0.45;
}
.author-block {
text-align: right;
border-left: 1px solid rgba(255,255,255,0.15);
padding-left: 2rem;
}
.author-label {
font-family: var(--mono);
font-size: 9px;
letter-spacing: 0.15em;
text-transform: uppercase;
opacity: 0.4;
margin-bottom: 4px;
}
.author-name {
font-family: var(--serif);
font-size: 1.1rem;
font-style: italic;
opacity: 0.9;
}
/* ─── HERO ─── */
.hero {
background: var(--ink);
color: var(--paper);
padding: 3rem 3rem 4rem;
border-top: 1px solid rgba(255,255,255,0.08);
}
.hero-kicker {
font-family: var(--mono);
font-size: 10px;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--red);
margin-bottom: 1.2rem;
opacity: 0.9;
}
h1 {
font-family: var(--serif);
font-size: clamp(1.8rem, 4.5vw, 3.4rem);
font-weight: 700;
line-height: 1.1;
margin-bottom: 1.5rem;
max-width: 800px;
}
h1 em { font-style: italic; color: #e07060; }
.hero-deck {
font-size: 1rem;
line-height: 1.7;
opacity: 0.65;
max-width: 620px;
font-family: var(--body);
}
/* ─── META STRIP ─── */
.meta-strip {
background: var(--red);
color: #fff;
padding: 1rem 3rem;
display: flex;
gap: 3rem;
flex-wrap: wrap;
}
.meta-item { display: flex; flex-direction: column; }
.meta-label {
font-family: var(--mono);
font-size: 8px;
letter-spacing: 0.18em;
text-transform: uppercase;
opacity: 0.65;
margin-bottom: 1px;
}
.meta-value {
font-family: var(--mono);
font-size: 15px;
font-weight: 500;
}
/* ─── NAV ─── */
.nav {
background: var(--cream);
border-bottom: 2px solid var(--ink);
padding: 0 3rem;
display: flex;
gap: 0;
overflow-x: auto;
}
.nav a {
font-family: var(--mono);
font-size: 10px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--muted);
text-decoration: none;
padding: 0.9rem 1.2rem;
border-bottom: 2px solid transparent;
margin-bottom: -2px;
white-space: nowrap;
transition: color 0.15s, border-color 0.15s;
}
.nav a:hover { color: var(--ink); border-color: var(--red); }
/* ─── LAYOUT ─── */
.page { max-width: 1120px; margin: 0 auto; }
.two-col {
display: grid;
grid-template-columns: 1fr 320px;
gap: 0;
}
.main-col {
padding: 3rem 2.5rem 3rem 3rem;
border-right: 1px solid var(--rule);
}
.side-col {
padding: 3rem 3rem 3rem 2rem;
}
/* ─── TYPOGRAPHY ─── */
h2 {
font-family: var(--serif);
font-size: 1.5rem;
font-weight: 700;
line-height: 1.2;
margin: 2.5rem 0 0.8rem;
padding-top: 2rem;
border-top: 2px solid var(--ink);
}
h2:first-child { padding-top: 0; border-top: none; margin-top: 0; }
h3 {
font-family: var(--serif);
font-size: 1.1rem;
font-weight: 700;
margin: 1.5rem 0 0.5rem;
color: var(--ink);
}
p { margin-bottom: 1rem; }
.drop-cap::first-letter {
font-family: var(--serif);
font-size: 4rem;
font-weight: 700;
float: left;
line-height: 0.78;
margin: 0.12em 0.1em 0 0;
color: var(--red);
}
.kicker {
font-family: var(--mono);
font-size: 9px;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--red);
margin-bottom: 0.3rem;
display: block;
}
/* ─── PULLQUOTE ─── */
.pullquote {
border-top: 2px solid var(--ink);
border-bottom: 2px solid var(--ink);
padding: 1.5rem 0;
margin: 2rem 0;
}
.pullquote-text {
font-family: var(--serif);
font-size: 1.25rem;
font-style: italic;
line-height: 1.45;
margin-bottom: 0.6rem;
}
.pullquote-attr {
font-family: var(--mono);
font-size: 9px;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--muted);
}
/* ─── CHARTS ─── */
.chart-wrap {
margin: 1.5rem 0;
border: 0.5px solid var(--rule);
padding: 1.2rem;
background: #fff;
}
.chart-label {
font-family: var(--mono);
font-size: 9px;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--muted);
border-bottom: 1px solid var(--rule);
padding-bottom: 0.6rem;
margin-bottom: 1rem;
}
.chart-note {
font-family: var(--mono);
font-size: 9px;
color: var(--muted);
margin-top: 0.5rem;
line-height: 1.5;
}
/* ─── HORIZONTAL BAR ─── */
.hbar-row {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 8px;
font-size: 12px;
}
.hbar-name {
width: 40px;
font-family: var(--mono);
font-size: 10px;
font-weight: 500;
color: var(--muted);
flex-shrink: 0;
}
.hbar-track {
flex: 1;
height: 26px;
background: var(--light);
display: flex;
overflow: hidden;
}
.hbar-fill {
height: 100%;
display: flex;
align-items: center;
padding: 0 7px;
font-family: var(--mono);
font-size: 10px;
font-weight: 500;
color: #fff;
white-space: nowrap;
}
.hbar-fill.isr { background: var(--blue); }
.hbar-fill.anti { background: var(--red); }
.hbar-fill.neut { background: var(--muted); }
/* ─── STAT BLOCK ─── */
.stat-block {
background: var(--ink);
color: var(--paper);
padding: 1.5rem;
margin: 2rem 0;
}
.stat-block .kicker { color: rgba(255,255,255,0.35); }
.stat-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1.2rem;
margin-top: 1rem;
}
.stat-number {
font-family: var(--mono);
font-size: 2.2rem;
font-weight: 500;
line-height: 1;
margin-bottom: 4px;
}
.stat-number.red { color: #e07060; }
.stat-number.blue { color: #7ab3e0; }
.stat-number.gold { color: #d4a843; }
.stat-desc {
font-size: 11px;
opacity: 0.55;
line-height: 1.5;
font-family: var(--mono);
}
/* ─── FINDING CARDS ─── */
.finding {
border-left: 3px solid var(--rule);
padding: 0.9rem 1rem;
margin: 1rem 0;
background: rgba(255,255,255,0.5);
}
.finding.efe { border-left-color: var(--blue); }
.finding.ap { border-left-color: var(--red); }
.finding.both { border-left-color: var(--gold); }
.finding-head {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 6px;
}
.tag {
font-family: var(--mono);
font-size: 8px;
letter-spacing: 0.1em;
padding: 2px 8px;
text-transform: uppercase;
font-weight: 500;
}
.tag.efe { background: #d4e2f0; color: var(--blue); }
.tag.ap { background: #f0d4d0; color: var(--red); }
.tag.both { background: #f0e8d0; color: var(--gold); }
.finding-title {
font-family: var(--serif);
font-size: 0.9rem;
font-weight: 700;
}
.finding-body {
font-size: 0.85rem;
color: var(--muted);
line-height: 1.6;
font-family: var(--body);
}
/* ─── SIDEBAR ─── */
.side-card {
background: var(--ink);
color: var(--paper);
padding: 1.3rem;
margin-bottom: 1.2rem;
}
.side-card .kicker { color: rgba(255,255,255,0.3); }
.side-big {
font-family: var(--mono);
font-size: 2.8rem;
font-weight: 500;
line-height: 1;
margin: 0.3rem 0 0.2rem;
}
.side-big.red { color: #e07060; }
.side-big.blue { color: #7ab3e0; }
.side-desc {
font-size: 11px;
opacity: 0.5;
line-height: 1.5;
font-family: var(--mono);
}
.side-note {
border: 0.5px solid var(--rule);
padding: 0.9rem 1rem;
margin-bottom: 1.2rem;
background: rgba(255,255,255,0.5);
font-size: 12px;
color: var(--muted);
line-height: 1.6;
font-family: var(--body);
}
.side-note strong { color: var(--ink); }
.wc-row { margin-bottom: 0.8rem; }
.wc-label {
font-family: var(--mono);
font-size: 9px;
color: rgba(255,255,255,0.4);
display: flex;
justify-content: space-between;
margin-bottom: 3px;
}
.wc-track {
height: 10px;
background: rgba(255,255,255,0.08);
}
.wc-fill { height: 100%; }
/* ─── METHODOLOGY ─── */
.methodology {
background: var(--cream);
border-top: 3px solid var(--ink);
padding: 3rem;
}
.method-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 2rem;
margin-top: 1.5rem;
}
.method-item { }
.method-num {
font-family: var(--mono);
font-size: 2rem;
font-weight: 300;
color: var(--rule);
line-height: 1;
margin-bottom: 0.5rem;
}
.method-title {
font-family: var(--serif);
font-size: 0.95rem;
font-weight: 700;
margin-bottom: 0.4rem;
}
.method-body {
font-size: 0.82rem;
color: var(--muted);
line-height: 1.65;
}
.method-code {
font-family: var(--mono);
font-size: 10px;
background: var(--light);
padding: 0.6rem 0.8rem;
margin-top: 0.6rem;
color: var(--ink);
line-height: 1.7;
border-left: 2px solid var(--rule);
}
.limitations {
margin-top: 2rem;
padding-top: 1.5rem;
border-top: 1px solid var(--rule);
}
/* ─── FOOTER ─── */
footer {
background: var(--ink);
color: rgba(255,255,255,0.35);
padding: 2rem 3rem;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 2rem;
font-family: var(--mono);
font-size: 9px;
letter-spacing: 0.1em;
line-height: 1.8;
}
footer strong { color: rgba(255,255,255,0.65); }
/* ─── RESPONSIVE ─── */
@media (max-width: 768px) {
.two-col { grid-template-columns: 1fr; }
.main-col { padding: 2rem; border-right: none; }
.side-col { padding: 2rem; border-top: 1px solid var(--rule); }
.masthead-main { grid-template-columns: 1fr; }
.author-block { text-align: left; border-left: none; padding-left: 0; border-top: 1px solid rgba(255,255,255,0.12); padding-top: 1rem; }
.meta-strip { padding: 1rem 2rem; gap: 1.5rem; }
.nav { padding: 0 1rem; }
.method-grid { grid-template-columns: 1fr; }
.methodology, footer { padding: 2rem; }
footer { grid-template-columns: 1fr; }
h1 { font-size: 1.8rem; }
}
</style>
</head>
<body>
<!-- MASTHEAD -->
<header class="masthead">
<div class="masthead-top">
<span>Análisis de medios · Periodismo basado en datos</span>
<span>28 febrero, 18 marzo 2026</span>
</div>
<div class="masthead-main page">
<div>
<div class="pub-name">Sesgo editorial en tiempo de guerra</div>
<div class="pub-sub">EFE vs Associated Press · Conflicto Israel,Irán · 793 artículos analizados</div>
</div>
<div class="author-block">
<div class="author-label">Investigación y análisis</div>
<div class="author-name">Ángel E. Pariente</div>
</div>
</div>
<section class="hero page">
<div class="hero-kicker">Investigación periodística basada en datos</div>
<h1>Dos agencias, <em>dos guerras distintas</em>, y un sesgo que no miente</h1>
<p class="hero-deck">El análisis de 793 artículos de EFE y AP sobre el conflicto Israel–Irán revela patrones sistemáticos y medibles de encuadre editorial. El sesgo no opera mediante falsedades: opera mediante la selección de fuentes, la atribución de víctimas y la omisión deliberada de contexto.</p>
</section>
</header>
<!-- META -->
<div class="meta-strip page">
<div class="meta-item"><div class="meta-label">Artículos EFE</div><div class="meta-value">280</div></div>
<div class="meta-item"><div class="meta-label">Artículos AP</div><div class="meta-value">513</div></div>
<div class="meta-item"><div class="meta-label">Período</div><div class="meta-value">18 días</div></div>
<div class="meta-item"><div class="meta-label">EFE: balance Líbano</div><div class="meta-value">+4.95</div></div>
<div class="meta-item"><div class="meta-label">EFE: balance Irán</div><div class="meta-value">−1.04</div></div>
<div class="meta-item"><div class="meta-label">AP: ratio anti/Israel</div><div class="meta-value">9.7×</div></div>
<div class="meta-item"><div class="meta-label">AP: contexto histórico</div><div class="meta-value">0/513</div></div>
</div>
<!-- NAV -->
<nav class="nav page">
<a href="#hallazgo-central">Hallazgo central</a>
<a href="#efe-libano">EFE · Líbano</a>
<a href="#efe-iran">EFE · Irán</a>
<a href="#ap-mecanismos">AP · Mecanismos</a>
<a href="#comparativa">Comparativa</a>
<a href="#metodologia">Metodología</a>
</nav>
<!-- BODY -->
<div class="page">
<div class="two-col">
<!-- MAIN -->
<main class="main-col">
<!-- HALLAZGO CENTRAL -->
<section id="hallazgo-central">
<h2>Hallazgo central: dos guerras distintas</h2>
<p class="drop-cap">EFE y AP no están cubriendo el mismo conflicto. EFE lo presenta como una guerra entre Israel e Irán donde Netanyahu es el protagonista central y el frente libanés recibe el 15% de toda su cobertura. AP lo presenta como una guerra americana: Trump y EEUU aparecen en el 40.7% de sus titulares; Israel como actor independiente, en apenas el 2.1%.</p>
<p>Esta divergencia de encuadre no es un matiz: es estructural. Y tiene consecuencias directas sobre qué sesgo aplica cada agencia y cómo lo aplica.</p>
<div class="chart-wrap">
<div class="chart-label">Quién es sujeto del titular — EFE vs AP</div>
<div class="hbar-row">
<div class="hbar-name">EFE</div>
<div class="hbar-track">
<div class="hbar-fill isr" style="width:57.1%">Israel / Netanyahu 57%</div>
<div class="hbar-fill anti" style="width:42.9%">Irán 43%</div>
</div>
</div>
<div class="hbar-row">
<div class="hbar-name">AP</div>
<div class="hbar-track">
<div class="hbar-fill neut" style="width:40.7%">EEUU / Trump 40.7%</div>
<div class="hbar-fill anti" style="width:7.6%">Irán 7.6%</div>
<div class="hbar-fill isr" style="width:2.1%">Isr 2%</div>
</div>
</div>
<div class="chart-note">EFE: guerra Israel,Irán · AP: guerra EEUU,Irán con Israel como socio</div>
</div>
<div class="pullquote">
<div class="pullquote-text">"El sesgo más poderoso no está en lo que se dice. Lo que importa es el marco conceptual que se usa para organizar los hechos antes de escribir la primera palabra."</div>
<div class="pullquote-attr">Ángel E. Pariente · análisis de 793 artículos</div>
</div>
</section>
<!-- EFE LÍBANO -->
<section id="efe-libano">
<h2>EFE y el frente libanés: sesgo por omisión</h2>
<p>EFE dedica el 15% de su cobertura total al frente de Líbano — AP apenas el 1.9%. Esa diferencia no es accidental: España tiene tropas en el FINUL desplegadas en el sur del Líbano, lo que crea un interés editorial nacional que amplifica ese frente.</p>
<p>Pero la forma en que EFE cubre Líbano revela un patrón de sesgo medible y sistemático.</p>
<h3>El dato definitivo</h3>
<p>De 56 artículos sobre Líbano/Hizbulá, solo <strong>2 (3.6%)</strong> mencionan que Hizbulá atacó primero el 2 de marzo. El <strong>96.4% restante</strong> presenta la acción israelí como si fuera sin causa ni provocación.</p>
<div class="finding efe">
<div class="finding-head"><span class="tag efe">EFE</span><div class="finding-title">Israel es sujeto en el 45% de los titulares. Hizbulá, en el 4%.</div></div>
<div class="finding-body">En el 14% de los titulares sobre Líbano, EFE arranca directamente con cifras de muertos atribuidas a "los ataques israelíes". La fuente de esas cifras es siempre el Ministerio de Salud libanés (controlado por el mismo Estado que alberga a Hizbulá) y se presenta como dato objetivo sin cuestionamiento.</div>
</div>
<div class="finding efe">
<div class="finding-head"><span class="tag efe">EFE</span><div class="finding-title">La progresión de muertos como contador narrativo</div></div>
<div class="finding-body">EFE publica actualizaciones acumulativas de bajas libanesas: 294 muertos (7 mar), 394 (8 mar), 486 (9 mar). Cada titular atribuye explícitamente las cifras a "la ofensiva israelí". No existe un contador equivalente de cohetes de Hizbulá lanzados contra Israel en el mismo período.</div>
</div>
<div class="chart-wrap">
<div class="chart-label">Balance diario EFE — artículos sobre Líbano</div>
<div style="position:relative;height:180px;"><canvas id="cLibano"></canvas></div>
<div class="chart-note">Positivo = más menciones pro-Israel. Negativo = más anti-Israel. El 4 de marzo (único día negativo) coincide con misiles iraníes contra Israel y Líbano simultáneos.</div>
</div>
</section>
<!-- EFE IRÁN -->
<section id="efe-iran">
<h2>EFE y el frente iraní: sesgo por encuadre</h2>
<p>La cobertura de Irán por EFE es más equilibrada en números brutos (balance promedio: -1.04) pero aplica un mecanismo de sesgo distinto al de Líbano, y más sutil.</p>
<h3>Tres mecanismos específicos</h3>
<div class="finding efe">
<div class="finding-head"><span class="tag efe">EFE</span><div class="finding-title">Las amenazas iraníes son "noticias". Los daños israelíes, "consecuencias".</div></div>
<div class="finding-body">Cuando Irán amenaza con cerrar el Estrecho de Ormuz, EFE lo titula como información: "Irán dice que Ormuz será un estrecho de paz para todos o de sufrimiento". Cuando Israel destruye infraestructura iraní: "Irán dice que el ataque de Israel contra unos depósitos de combustible es un crimen de guerra". El objeto dañado siempre aparece en el titular israelí; la amenaza iraní, como declaración informativa.</div>
</div>
<div class="finding efe">
<div class="finding-head"><span class="tag efe">EFE</span><div class="finding-title">La ONU como amplificador unilateral</div></div>
<div class="finding-body">EFE publica con prontitud y prominencia tres artículos sobre resoluciones de la ONU contra Israel. No hay un solo artículo de EFE en el mismo período citando posiciones de la ONU sobre el programa nuclear iraní, los ataques de Hizbulá o las amenazas al Estrecho de Ormuz.</div>
</div>
<div class="finding efe">
<div class="finding-head"><span class="tag efe">EFE</span><div class="finding-title">Las declaraciones iraníes, en titulares directos</div></div>
<div class="finding-body">"El asesinato de Jameneí es una declaración de guerra a los musulmanes" (balance -12): EFE titula con las palabras exactas de una fuente islámica sin comillas de distanciamiento ni contexto. "El golfo Pérsico se teñirá de sangre": amenaza directa presentada como titular informativo estándar.</div>
</div>
<div class="chart-wrap">
<div class="chart-label">Balance EFE: Líbano vs Irán</div>
<div style="position:relative;height:160px;"><canvas id="cCompareLI"></canvas></div>
<div class="chart-note">EFE es más favorable a Israel en Líbano (+4.95) pero más desfavorable en Irán (-1.04). Son dos mecanismos de sesgo distintos aplicados al mismo conflicto.</div>
</div>
</section>
<!-- AP -->
<section id="ap-mecanismos">
<h2>AP: sesgo sistémico, no puntual</h2>
<p>El sesgo de AP es cualitativamente distinto al de EFE. No opera artículo por artículo: construye un universo informativo alternativo donde el conflicto tiene protagonistas distintos, víctimas distintas y, sobre todo, causas que sencillamente no existen para el lector.</p>
<h3>Mecanismo 1 — Americanizar el conflicto</h3>
<p>AP usa "US war with Iran" en 41 titulares vs "Israel war/guerra Iran" en solo 7. Al presentarlo como guerra americana, el sesgo antibelicista viaja disfrazado de crítica a Trump — sin necesidad de criticar directamente a Israel.</p>
<h3>Mecanismo 2 — Las consecuencias económicas como narrativa</h3>
<div class="finding ap">
<div class="finding-head"><span class="tag ap">AP</span><div class="finding-title">73 artículos sobre impacto económico (14.2%), todos con balance extremadamente negativo</div></div>
<div class="finding-body">Petróleo, bolsas, Estrecho de Ormuz, rutas de suministro. Para explicar el impacto económico es necesario mencionar repetidamente a Irán y el Golfo. El daño económico global se presenta como consecuencia del conflicto sin nombrar al agresor inicial. Balance promedio de estos artículos: entre -47 y -129.</div>
</div>
<h3>Mecanismo 3 — Victimización iraní por acumulación indirecta</h3>
<div class="finding ap">
<div class="finding-head"><span class="tag ap">AP</span><div class="finding-title">El equipo femenino de fútbol iraní: 27 artículos, ratio 16.4×</div></div>
<div class="finding-body">Los artículos con mayor desequilibrio anti-Israel no son sobre bombardeos. Son sobre mujeres iraníes que no pueden volver a su país, que piden asilo en Australia, que lloran en el campo. Israel aparece como causa implícita del sufrimiento sin que nadie lo diga explícitamente. Ratio anti/Israel promedio: 16.4×. Es el mecanismo más sofisticado de AP.</div>
</div>
<h3>Mecanismo 4 — Los artículos explicativos</h3>
<div class="finding ap">
<div class="finding-head"><span class="tag ap">AP</span><div class="finding-title">20 artículos "¿Qué debes saber sobre...?" con los balances más negativos del dataset</div></div>
<div class="finding-body">Los artículos que el lector consulta para entender el conflicto tienen balances de -170, -131, -119, -107, -91. Explican la Guardia Revolucionaria, el Estrecho de Ormuz, la sucesión en Irán, los kurdos. Ninguno explica por qué Israel inició la operación el 28 de febrero ni qué amenaza representaba el programa nuclear iraní.</div>
</div>
<div class="chart-wrap">
<div class="chart-label">Balance de artículos explicativos AP ("¿Qué debes saber sobre...?")</div>
<div style="position:relative;height:220px;"><canvas id="cExplicativos"></canvas></div>
<div class="chart-note">Los artículos de contexto que el lector usa para entender el conflicto son los más sesgados de todo el dataset.</div>
</div>
<div class="stat-block">
<span class="kicker">El dato más revelador de todo el análisis</span>
<div class="stat-grid">
<div>
<div class="stat-number red">0</div>
<div class="stat-desc">artículos de AP (de 513) que mencionan el 28 de febrero como origen del conflicto</div>
</div>
<div>
<div class="stat-number red">0</div>
<div class="stat-desc">artículos de AP que citan el programa nuclear iraní como contexto del ataque</div>
</div>
<div>
<div class="stat-number blue">41</div>
<div class="stat-desc">titulares AP con "US war with Iran" vs 7 con "Israel war Iran"</div>
</div>
<div>
<div class="stat-number blue">9.7×</div>
<div class="stat-desc">ratio promedio anti-Israel/pro-Israel en el cuerpo de los artículos AP</div>
</div>
</div>
</div>
</section>
<!-- COMPARATIVA -->
<section id="comparativa">
<h2>Comparativa: mecanismos distintos, resultado similar</h2>
<p>EFE y AP no comparten el mismo mecanismo de sesgo, pero ambos producen el mismo resultado: un lector informado exclusivamente por estas agencias recibe una imagen del conflicto donde Israel actúa sin causa y sin consecuencias propias.</p>
<div class="chart-wrap">
<div class="chart-label">Balance promedio en el cuerpo del artículo</div>
<div style="position:relative;height:160px;"><canvas id="cBalance"></canvas></div>
</div>
<div class="chart-wrap">
<div class="chart-label">% artículos con más menciones anti-Israel que pro-Israel en el cuerpo</div>
<div style="position:relative;height:160px;"><canvas id="cPct"></canvas></div>
</div>
<div class="finding both">
<div class="finding-head"><span class="tag both">EFE + AP</span><div class="finding-title">La diferencia fundamental</div></div>
<div class="finding-body">EFE tiene un sesgo <em>activo</em> por omisión y encuadre, artículo por artículo, con mayor intensidad en el frente libanés. AP tiene un sesgo <em>estructural</em>: construye un mundo donde Irán es el protagonista sufriente, el conflicto es americano y las causas de las acciones israelíes no existen para el lector. Son mecanismos distintos aplicados desde lógicas editoriales distintas, pero con el mismo efecto acumulativo sobre la percepción del lector.</div>
</div>
</section>
</main>
<!-- SIDEBAR -->
<aside class="side-col">
<div class="side-card">
<span class="kicker">Dato clave · EFE</span>
<div class="side-big red">96.4%</div>
<div class="side-desc">artículos EFE sobre Líbano que no mencionan que Hizbulá atacó primero</div>
</div>
<div class="side-card">
<span class="kicker">Dato clave · AP</span>
<div class="side-big red">0 / 513</div>
<div class="side-desc">artículos de AP que citan el origen del conflicto del 28 de febrero</div>
</div>
<div class="side-card" style="background:#1a3f6f;">
<span class="kicker">Menciones en titulares AP</span>
<div class="wc-row">
<div class="wc-label"><span>Irán / Iran</span><span>288</span></div>
<div class="wc-track"><div class="wc-fill" style="width:100%;background:#e07060;"></div></div>
</div>
<div class="wc-row">
<div class="wc-label"><span>EEUU / Trump</span><span>209</span></div>
<div class="wc-track"><div class="wc-fill" style="width:72%;background:#d4a843;"></div></div>
</div>
<div class="wc-row">
<div class="wc-label"><span>Israel / Israeli</span><span>75</span></div>
<div class="wc-track"><div class="wc-fill" style="width:26%;background:#7ab3e0;"></div></div>
</div>
<div style="font-size:9px;opacity:0.35;margin-top:0.5rem;font-family:var(--mono);">Irán aparece 3.8× más que Israel en titulares AP</div>
</div>
<div class="side-note">
<strong>EFE y las tropas españolas.</strong> España tiene militares en el FINUL en el sur del Líbano. EFE publica un artículo el 3 de marzo titulado "Los soldados españoles en Líbano, bunkerizados por el conflicto". Esto explica en parte por qué EFE amplifica el frente libanés 8× más que AP: hay un interés editorial nacional, no solo periodístico.
</div>
<div class="side-note">
<strong>El artículo que lo explica todo.</strong> El 1 de marzo AP publicó: "Por qué la AP decidió llamar 'guerra' al conflicto actual". Una agencia que tomó partido sobre el encuadre conceptual del conflicto y lo justificó públicamente. Balance de ese artículo: -70.
</div>
<div class="side-note">
<strong>Las fuentes de cifras iraníes.</strong> EFE usa sistemáticamente la Media Luna Roja iraní y ONGs iraníes como fuente de bajas en Irán, presentadas como datos objetivos. No hay cuestionamiento de la neutralidad de estas fuentes ni comparación con cifras israelíes equivalentes.
</div>
<div style="margin-top:1.5rem;">
<div class="chart-label">Distribución frentes cubiertos</div>
<div style="position:relative;height:180px;"><canvas id="cFrentes"></canvas></div>
</div>
</aside>
</div>
</div>
<!-- METODOLOGÍA -->
<section id="metodologia" class="methodology">
<div class="page">
<span class="kicker">Transparencia metodológica</span>
<h2 style="border:none;padding:0;margin-top:0.3rem;">Metodología del análisis</h2>
<p style="max-width:680px;color:var(--muted);margin-top:0.5rem;">Este análisis es reproducible y está basado en datos públicos. Se detalla a continuación el proceso completo para que cualquier investigador pueda verificar, replicar o ampliar los resultados.</p>
<div class="method-grid">
<div class="method-item">
<div class="method-num">01</div>
<div class="method-title">Extracción de datos</div>
<div class="method-body">Los artículos se extrajeron mediante scraping de los sitemaps públicos de EFE (<code>efe.com/noticias/israel-3/</code>) y AP (<code>apnews.com/ap-sitemap-202602.xml</code> y <code>202603.xml</code>). Se usó <code>curl</code> del sistema operativo vía subprocess de Python para evitar bloqueos de bot detection. Las URLs se filtraron por fecha (28 feb, 18 mar 2026) y por presencia de términos clave (israel, iran, gaza, hezbollah, netanyahu) en el slug.</div>
<div class="method-code">
793 artículos totales<br>
280 EFE · 513 AP<br>
Período: 18 días<br>
Fuente: sitemaps públicos
</div>
</div>
<div class="method-item">
<div class="method-num">02</div>
<div class="method-title">Variables extraídas</div>
<div class="method-body">De cada artículo se extrajo: título completo, fecha de publicación, primer párrafo (primeros 300 caracteres del cuerpo), y URL. El texto completo del cuerpo se procesó para contar menciones de términos clasificados en tres categorías: fuentes pro-Israel, fuentes anti-Israel/iraníes, y fuentes neutras/internacionales. El análisis se realizó exclusivamente sobre título y primer párrafo para la clasificación de "primera fuente", y sobre el cuerpo completo para el cálculo del balance.</div>
<div class="method-code">
Variables: fecha, título,<br>
primera_fuente, menciones_israel,<br>
menciones_anti, balance,<br>
primer_párrafo (300 chars), url
</div>
</div>
<div class="method-item">
<div class="method-num">03</div>
<div class="method-title">Clasificación de fuentes</div>
<div class="method-body">Se construyeron tres diccionarios de términos. Pro-Israel: israel, israeli, idf, netanyahu, katz, gallant, tzahal, ejército israelí, fuerzas de defensa, portavoz israelí. Anti-Israel/Irán: hamás, hamas, guardia revolucionaria, hezbollah, irán, iran, teherán, tehran, ministerio de sanidad de gaza, autoridad palestina, fars, tasnim, al-jazeera, khamenei, irgc. Neutros: onu, naciones unidas, cruz roja, unrwa, eeuu, trump, washington, otan. La clasificación de "primera fuente" se aplica al primer término encontrado en el primer párrafo.</div>
<div class="method-code">
Clasificación automática<br>
basada en diccionarios<br>
No usa IA generativa<br>
Reproducible al 100%
</div>
</div>
<div class="method-item">
<div class="method-num">04</div>
<div class="method-title">Cálculo del balance</div>
<div class="method-body">El "balance" de cada artículo es la diferencia simple: menciones pro-Israel menos menciones anti-Israel en el cuerpo completo. Un balance positivo indica más menciones del bando israelí; negativo, del bando iraní/anti-Israel. El balance no mide veracidad ni sesgo per se: mide el peso cuantitativo de cada narrativa en el texto. Es un indicador necesario pero no suficiente; debe leerse junto con el análisis cualitativo de encuadre del titular.</div>
<div class="method-code">
balance = Σ(pro-Israel) − Σ(anti-Israel)<br>
en el cuerpo completo del artículo<br>
Ratio = anti / pro (para AP)<br>
Fuente única: texto de cada artículo
</div>
</div>
<div class="method-item">
<div class="method-num">05</div>
<div class="method-title">Análisis cualitativo</div>
<div class="method-body">Sobre los datos cuantitativos se superpuso un análisis cualitativo de: encuadre del sujeto gramatical en el titular (quién actúa), presencia o ausencia de contexto histórico, fuente de las cifras de bajas, y verbos usados para describir las acciones de cada bando. Este análisis es el que permite interpretar los números y distinguir entre sesgo por omisión (EFE/Líbano), sesgo por encuadre (EFE/Irán) y sesgo sistémico (AP).</div>
<div class="method-code">
Análisis manual de titulares<br>
Revisión de fuentes de cifras<br>
Clasificación de verbos<br>
Detección de omisiones de contexto
</div>
</div>
<div class="method-item">
<div class="method-num">06</div>
<div class="method-title">Herramientas usadas</div>
<div class="method-body">Python 3 con las librerías estándar (csv, re, subprocess, collections). Sin librerías de machine learning ni IA generativa en el procesamiento de datos. Scraping via curl del sistema. Visualización con Chart.js. Todo el código es reproducible con datos públicos. El análisis fue asistido por Claude (Anthropic) para interpretación y revisión de patrones, pero la clasificación es determinista y verificable independientemente.</div>
<div class="method-code">
Python 3 · curl · Chart.js<br>
Sin ML / sin IA en clasificación<br>
Asistencia: Claude (Anthropic)<br>
Datos: sitemaps públicos EFE + AP
</div>
</div>
</div>
<div class="limitations">
<h3>Limitaciones del análisis</h3>
<p style="color:var(--muted);font-size:0.88rem;max-width:780px;">El clasificador de fuentes basado en diccionarios puede generar falsos positivos cuando un término del diccionario aparece en contexto negativo (por ejemplo: "Israel niega..."). Los artículos duplicados detectados en el dataset (posiblemente por ediciones o versiones múltiples) no fueron eliminados en su totalidad, lo que puede inflar ligeramente algunos conteos. El análisis se limita al período de 18 días del conflicto activo y no permite inferir si estos patrones son estructurales en ambas agencias o específicos de este conflicto. Para conclusiones más robustas sería necesario comparar con otro período sin conflicto activo y con una tercera agencia de referencia.</p>
</div>
</div>
</section>
<!-- FOOTER -->
<footer>
<div>
<strong>Ángel E. Pariente</strong><br>
Investigación y análisis de datos<br>
Sesgo editorial en cobertura del conflicto Israel,Irán<br>
Período analizado: 28 febrero, 18 marzo 2026
</div>
<div>
<strong>Fuentes de datos</strong><br>
EFE: efe.com/noticias/israel-3/ (sitemaps públicos)<br>
AP: apnews.com (ap-sitemap-202602.xml + 202603.xml)<br>
Total: 793 artículos · Metodología: scraping + análisis cuantitativo<br>
Herramientas: Python 3 · curl · Chart.js · Claude (Anthropic)
</div>
</footer>
<script>
const R = '#b82c1f';
const B = '#1a3f6f';
const G = '#8a6c1a';
const MU = '#8a8070';
const gridC = 'rgba(0,0,0,0.06)';
const txtC = '#18160f';
const base = {
responsive: true,
maintainAspectRatio: false,
plugins: { legend: { display: false } },
scales: {
x: { ticks: { color: txtC, font: { size: 10, family: "'IBM Plex Mono'" } }, grid: { color: gridC } },
y: { ticks: { color: MU, font: { size: 10, family: "'IBM Plex Mono'" } }, grid: { color: gridC } }
}
};
new Chart(document.getElementById('cLibano'), {
type: 'bar',
data: {
labels: ['2/3','3/3','4/3','5/3','6/3','7/3','8/3','9/3','11/3','12/3','13/3','15/3','16/3','17/3'],
datasets: [{
data: [6, 0, -6, 6.5, 3.5, 8, 9, 2, 3, 10, 1, 2, 5.5, 14.5],
backgroundColor: d => d.raw >= 0 ? B : R,
borderRadius: 2
}]
},
options: { ...base, scales: { ...base.scales, y: { ...base.scales.y, ticks: { ...base.scales.y.ticks, callback: v => v > 0 ? '+'+v : v } } } }
});
new Chart(document.getElementById('cCompareLI'), {
type: 'bar',
data: {
labels: ['EFE · Líbano', 'EFE · Irán'],
datasets: [{
data: [4.95, -1.04],
backgroundColor: [B, R],
borderRadius: 3,
barThickness: 60
}]
},
options: { ...base, scales: { ...base.scales, y: { ...base.scales.y, ticks: { ...base.scales.y.ticks, callback: v => v > 0 ? '+'+v : v } } } }
});
new Chart(document.getElementById('cExplicativos'), {
type: 'bar',
data: {
labels: [
'Khamenei (perfil)','Ataques a Irán','Where things stand','Guardias Revolucionarios',
'Ormuz (es)','Ormuz (en)','Kurdos (es)','Kurdos (en)','Sucesor Irán',
'Cómo funciona sucesión','Vuelos afectados','Kharg Island','Misil iraní EEUU',
'Noticias angustiosas','China y la guerra','Drones EEUU vs Irán','Mojtabá Jameneí',
'Cluster munitions','Weekend war','Por qué AP llamó guerra'
],
datasets: [{
data: [-170,-109,-85,-85,-82,-107,-87,-87,-119,-89,-64,-91,-131,-64,-74,-82,-119,-47,-74,-70],
backgroundColor: R,
borderRadius: 2
}]
},
options: {
...base,
indexAxis: 'y',
scales: {
x: { ...base.scales.x, ticks: { ...base.scales.x.ticks, callback: v => v } },
y: { ticks: { color: MU, font: { size: 9, family: "'IBM Plex Mono'" } }, grid: { color: gridC } }
}
}
});
new Chart(document.getElementById('cBalance'), {
type: 'bar',
data: {
labels: ['EFE', 'AP'],
datasets: [{
data: [1.5, -72.8],
backgroundColor: [B, R],
borderRadius: 3,
barThickness: 60
}]
},
options: {
...base,
scales: {
x: { ...base.scales.x },
y: { ...base.scales.y, ticks: { ...base.scales.y.ticks, callback: v => v > 0 ? '+'+v : v },
title: { display: true, text: '← más anti-Israel | más pro-Israel →', color: MU, font: { size: 9 } } }
}
}
});
new Chart(document.getElementById('cPct'), {
type: 'bar',
data: {
labels: ['EFE', 'AP'],
datasets: [{
data: [47, 99],
backgroundColor: [B, R],
borderRadius: 3,
barThickness: 60
}]
},
options: {
...base,
scales: {
x: { ...base.scales.x },
y: { min: 0, max: 100, ticks: { ...base.scales.y.ticks, callback: v => v + '%' }, grid: { color: gridC } }
}
}
});
new Chart(document.getElementById('cFrentes'), {
type: 'doughnut',
data: {
labels: ['EFE · Irán (61%)', 'EFE · Líbano (15%)', 'EFE · Otro (24%)'],
datasets: [{
data: [61, 15, 24],
backgroundColor: [R, B, MU],
borderWidth: 0,
borderRadius: 2
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
cutout: '60%',
plugins: {
legend: {
display: true,
position: 'bottom',
labels: { font: { size: 9, family: "'IBM Plex Mono'" }, color: txtC, padding: 8, boxWidth: 10 }
}
}
}
});
</script>
</body>
</html>