Visitar un portal web de noticias o blogs técnicos hoy en día suele ir acompañado de una gran cantidad de ruido visual: barras de navegación, anuncios emergentes, widgets de redes sociales, pies de página con enlaces infinitos y secciones de comentarios. Cuando los desarrolladores necesitamos implementar una herramienta automatizada (como importar un artículo web para convertirlo a Markdown en local o resumirlo usando Inteligencia Artificial), extraer únicamente el artículo principal sin capturar el código basura es un reto mayor.
Para resolver este problema, la fundación **Mozilla** desarrolló **Readability.js**, la librería de extracción semántica que le da vida al popular **Modo de Lectura (Reader View)** de Firefox. Este motor de análisis heurístico corre 100% en local sobre el navegador del cliente y limpia páginas web basándose exclusivamente en el comportamiento del árbol DOM.
El objetivo de Readability: Analizar un documento HTML, ignorar los bloques que no pertenecen a la lectura central y retornar un objeto JSON limpio que contenga el título del artículo, el contenido principal en HTML semántico simplificado, el autor y un resumen de longitud de lectura.
Las Reglas Heurísticas del Algoritmo
Readability no lee el diseño visual renderizado en pantalla (CSS layout); en su lugar, examina detalladamente la estructura del árbol DOM y aplica una serie de puntuaciones matemáticas a cada nodo:
- Filtrado Inicial por Clases e IDs: El algoritmo analiza las clases y nombres de ID de cada nodo. Suma o resta puntos usando expresiones regulares predefinidas. Si una clase contiene strings como
comment,sidebar,ad,header,footer,sponsor, el nodo recibe una penalización alta. Si contiene strings comoentry,content,main,body,article, se le suman puntos. - Densidad de Enlaces (Link Density): Es una de las heurísticas más potentes. Se calcula dividiendo la cantidad de caracteres contenidos dentro de etiquetas de enlace (
<a>) por la cantidad total de caracteres del nodo. Si el ratio supera un umbral crítico (típico en menús de navegación o widgets de post relacionados), el elemento es descartado. - Puntuación por Contenido de Texto: El algoritmo evalúa etiquetas de párrafo (
<p>) y celdas de texto. Los párrafos que tengan más de 25 caracteres y signos de puntuación como comas o puntos suman puntos a sus nodos padres, acumulándose hacia arriba en el árbol jerárquico. - Cálculo del Candidato Principal: El elemento con la puntuación acumulada más alta es seleccionado como el contenedor raíz del artículo. Los elementos secundarios que estén fuera de él pero que tengan puntuaciones razonables (como subtítulos o imágenes representativas) son absorbidos.
Ejemplo de Integración Client-Side
Readability se puede importar de forma directa a través de un módulo para limpiar el contenido de un HTML de entrada antes de compilarlo a Markdown con herramientas locales:
// Importar Readability en navegador desde una red de distribución (CDN)
import { Readability } from 'https://esm.sh/@mozilla/readability';
async function importarArticuloLimpio(url) {
// 1. Fetch de la página web externa (usando un Proxy CORS si es necesario)
const response = await fetch(url);
const rawHtml = await response.text();
// 2. Parsear el HTML crudo a un documento DOM inerte en memoria
const parser = new DOMParser();
const docInerte = parser.parseFromString(rawHtml, "text/html");
// 3. Ejecutar el motor de Mozilla Readability
const reader = new Readability(docInerte);
const article = reader.parse();
if (article) {
console.log("Título:", article.title);
console.log("Autor:", article.byline);
// Contenido HTML completamente libre de anuncios y sidebars
const cleanHTML = article.content;
document.getElementById("editor-markdown").value = cleanHTML;
}
}
Importancia en Herramientas de Productividad
Para editores web como **Markdify**, la integración de esta tecnología es de gran valor. Permite que el flujo de trabajo de los desarrolladores que toman notas o redactan reportes a partir de fuentes documentales de internet se automatice. En lugar de copiar y pegar manualmente secciones dispersas, un solo script en el cliente puede purificar el artículo fuente, traduciéndolo a un Markdown estructurado listo para exportar a PDF.
Referencias Científicas y Documentación Oficial
- Mozilla GitHub Repository: Mozilla Readability.js source code and architecture
- IEEE Conference Paper: A Web Content Extraction Algorithm Based on DOM Tree (Guo et al.)
- Google Scholar Research: DOM-based Content Extraction via Text and Link Densities (Weninger et al.)
- Firefox Reader View: Firefox Support Manual: Reader View Features