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):
|
ALCANCE (vs. CSV histórico de marzo 2026):
|
||||||
- Cubre las 5 secciones estándar: comentario, articulo, eucaristia, multimedia, effa.
|
- Cubre las 5 secciones estándar: comentario, articulo, eucaristia, multimedia, effa.
|
||||||
- NO cubre granularidad fina del CSV histórico:
|
- Sub-clasifica por posición dentro de "Evangelio y comentarios al Evangelio":
|
||||||
· `comentario_editorial` (subgrupo de comentario)
|
· pos 1 → `lectura` (cita del evangelio)
|
||||||
· `lectura` (lecturas bíblicas dentro de eucaristía)
|
· pos 2 → `comentario_editorial`
|
||||||
· `otro` (catch-all)
|
· pos 3+ → `comentario`
|
||||||
· `noticia` (subgrupo)
|
(regla del editor, confirmada contra el CSV histórico)
|
||||||
→ Estos quedan agrupados como `comentario` o `eucaristia` según su encabezado padre.
|
- NO cubre todavía:
|
||||||
- NO cubre encabezados de fiestas especiales ("Domingo de Resurrección", "Navidad",
|
· `lectura` dentro de eucaristía (lecturas bíblicas — el viejo las separa, aquí van todas a `eucaristia`)
|
||||||
"Vigilia Pascual", etc.) — quedan como sin sección y se ignoran.
|
· `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
|
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
|
SECTION_PATTERNS y SECTION_LABELS con reglas adicionales. El CSV histórico
|
||||||
@@ -59,6 +61,10 @@ CAT_PROPUESTA = {
|
|||||||
'effa': 'effa',
|
'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)
|
HREF_RX = re.compile(r'href=["\']([^"\']+)["\']', re.I)
|
||||||
WP_SLUG_RX = re.compile(r'(?:^|/)fea/([a-z0-9\-]+)/?(?:[?#]|$)', 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)
|
K2_ITEM_RX = re.compile(r'/item/(\d+)-[^/"]+\.html', re.I)
|
||||||
@@ -217,12 +223,21 @@ def main():
|
|||||||
sections = extract_sections(content)
|
sections = extract_sections(content)
|
||||||
for slug, urls in sections.items():
|
for slug, urls in sections.items():
|
||||||
label = SECTION_LABELS[slug]
|
label = SECTION_LABELS[slug]
|
||||||
cat = CAT_PROPUESTA[slug]
|
default_cat = CAT_PROPUESTA[slug]
|
||||||
|
# Filtrar a posts resueltos manteniendo orden
|
||||||
|
resolved = []
|
||||||
for url in urls:
|
for url in urls:
|
||||||
pid = url_to_post_id(url, slug_to_id, k2_to_id)
|
pid = url_to_post_id(url, slug_to_id, k2_to_id)
|
||||||
if pid is None:
|
if pid is None:
|
||||||
n_unresolved += 1
|
n_unresolved += 1
|
||||||
continue
|
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
|
n_resolved += 1
|
||||||
needed_titles.add(pid)
|
needed_titles.add(pid)
|
||||||
rows_out.append({
|
rows_out.append({
|
||||||
|
|||||||
Reference in New Issue
Block a user