script(cats): sub-clasifica evangelio por posición (lectura/editorial/comentario)
Regla del editor confirmada contra CSV histórico: dentro de "Evangelio y comentarios al Evangelio" el orden es siempre: pos 1 → lectura del evangelio pos 2 → comentario editorial pos 3+ → comentarios Mejora diff contra CSV marzo 2026: 8.655 → 9.286 mismas cats (de 1.599 a 968 divergencias, -631 resueltas). Residual mayoritario son posts que ya no aparecen en las cartas actuales (links eliminados, k2 ids sin mapping) o granularidad fina no implementada (lectura dentro de eucaristía, secciones especiales). Refs #42. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user