diff --git a/scripts/regenerar_clasificacion_csv.py b/scripts/regenerar_clasificacion_csv.py index 390628e..3426a61 100644 --- a/scripts/regenerar_clasificacion_csv.py +++ b/scripts/regenerar_clasificacion_csv.py @@ -8,14 +8,16 @@ Output: post_id, post_title, categoria_propuesta, seccion_original, carta_id, ca ALCANCE (vs. CSV histórico de marzo 2026): - Cubre las 5 secciones estándar: comentario, articulo, eucaristia, multimedia, effa. -- NO cubre granularidad fina del CSV histórico: - · `comentario_editorial` (subgrupo de comentario) - · `lectura` (lecturas bíblicas dentro de eucaristía) - · `otro` (catch-all) - · `noticia` (subgrupo) - → Estos quedan agrupados como `comentario` o `eucaristia` según su encabezado padre. -- NO cubre encabezados de fiestas especiales ("Domingo de Resurrección", "Navidad", - "Vigilia Pascual", etc.) — quedan como sin sección y se ignoran. +- Sub-clasifica por posición dentro de "Evangelio y comentarios al Evangelio": + · pos 1 → `lectura` (cita del evangelio) + · pos 2 → `comentario_editorial` + · pos 3+ → `comentario` + (regla del editor, confirmada contra el CSV histórico) +- NO cubre todavía: + · `lectura` dentro de eucaristía (lecturas bíblicas — el viejo las separa, aquí van todas a `eucaristia`) + · `otro` (catch-all del catch-all) + · `noticia` (subgrupo poco usado, 12 filas en el viejo) + · Encabezados de fiestas especiales ("Domingo de Resurrección", "Navidad", "Vigilia Pascual", etc.) Para regenerar el CSV con cobertura completa habría que ampliar el mapping en SECTION_PATTERNS y SECTION_LABELS con reglas adicionales. El CSV histórico @@ -59,6 +61,10 @@ CAT_PROPUESTA = { 'effa': 'effa', } +# Sub-clasificación posicional dentro de la sección "Evangelio y comentarios al Evangelio". +# El editor SIEMPRE coloca: 1º lectura del evangelio, 2º comentario editorial, 3º+ comentarios. +SUBCAT_EVANGELIO_BY_POS = ['lectura', 'comentario_editorial'] # resto = 'comentario' + HREF_RX = re.compile(r'href=["\']([^"\']+)["\']', re.I) WP_SLUG_RX = re.compile(r'(?:^|/)fea/([a-z0-9\-]+)/?(?:[?#]|$)', re.I) K2_ITEM_RX = re.compile(r'/item/(\d+)-[^/"]+\.html', re.I) @@ -217,12 +223,21 @@ def main(): sections = extract_sections(content) for slug, urls in sections.items(): label = SECTION_LABELS[slug] - cat = CAT_PROPUESTA[slug] + default_cat = CAT_PROPUESTA[slug] + # Filtrar a posts resueltos manteniendo orden + resolved = [] for url in urls: pid = url_to_post_id(url, slug_to_id, k2_to_id) if pid is None: n_unresolved += 1 continue + resolved.append(pid) + for pos, pid in enumerate(resolved): + # Sub-clasificación posicional para evangelio + if slug == 'comentario' and pos < len(SUBCAT_EVANGELIO_BY_POS): + cat = SUBCAT_EVANGELIO_BY_POS[pos] + else: + cat = default_cat n_resolved += 1 needed_titles.add(pid) rows_out.append({