From 33f72317521adbde108ea4b762b1bc7c8c2fd004 Mon Sep 17 00:00:00 2001 From: David Huggins-Daines Date: Thu, 6 Jun 2024 12:21:54 -0400 Subject: [PATCH] feat: marquer les elements de sequence aussi --- README.md | 7 +++++-- alexi/__init__.py | 2 +- alexi/annotate.py | 32 ++++++++++++++++++++++++-------- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 57ae6e9..abfa54c 100644 --- a/README.md +++ b/README.md @@ -66,8 +66,8 @@ annoter, par exemple: --pages 1,2,3 Dans le PDF, pour le moment, des rectangles colorés sont utiliser pour -représenter les différents éléments annotés et aider à répérer les -erreurs. Notamment: +représenter les blocs annotés et aider à répérer les erreurs. +Notamment: - Les chapitres et annexes sont en rouge - Les sections et articles sont en rose (plus foncé plus le type @@ -77,6 +77,9 @@ erreurs. Notamment: - Les en-têtes et pieds de page sont en jaune-vert-couleur-de-bile - Tout le reste est en noir (alinéas, tableaux, figures) +Pour les éléments de séquence (il y a juste les titres et les numéros) +ceux-ci sont indiqués par un remplissage vert clair transparent. + Avec un logiciel de feuilles de calcul dont LibreOffice ou Excel, on peut alors modifier `1314-page1.csv` pour corriger la segmentation. Il est *très important* de spécifier ces paramètres lorsqu'on ouvre et diff --git a/alexi/__init__.py b/alexi/__init__.py index 052268a..af2607b 100644 --- a/alexi/__init__.py +++ b/alexi/__init__.py @@ -14,7 +14,7 @@ import sys from pathlib import Path -from . import download, extract, annotate +from . import annotate, download, extract from .analyse import Analyseur, Bloc, merge_overlaps from .convert import Converteur, write_csv from .format import format_html diff --git a/alexi/annotate.py b/alexi/annotate.py index 3a2cb6e..831a93a 100644 --- a/alexi/annotate.py +++ b/alexi/annotate.py @@ -15,12 +15,10 @@ from alexi.analyse import group_iob from alexi.convert import Converteur, write_csv -from alexi.label import Identificateur, DEFAULT_MODEL as DEFAULT_LABEL_MODEL -from alexi.segment import ( - Segmenteur, - DEFAULT_MODEL as DEFAULT_SEGMENT_MODEL, - DEFAULT_MODEL_NOSTRUCT, -) +from alexi.label import DEFAULT_MODEL as DEFAULT_LABEL_MODEL +from alexi.label import Identificateur +from alexi.segment import DEFAULT_MODEL as DEFAULT_SEGMENT_MODEL +from alexi.segment import DEFAULT_MODEL_NOSTRUCT, Segmenteur LOGGER = logging.getLogger(Path(__file__).stem) @@ -67,9 +65,8 @@ def annotate_pdf( outpage += 1 while len(pdf) > len(pages): pdf.del_page(outpage) - blocs = group_iob(iob) for page, (page_number, group) in zip( - pdf, itertools.groupby(blocs, attrgetter("page_number")) + pdf, itertools.groupby(group_iob(iob), attrgetter("page_number")) ): page_height = page.get_height() LOGGER.info("page %d", page_number) @@ -99,6 +96,25 @@ def annotate_pdf( pdfium_c.FPDFPageObj_SetStrokeWidth(path, 1) pdfium_c.FPDFPage_InsertObject(page, path) pdfium_c.FPDFPage_GenerateContent(page) + for page, (page_number, group) in zip( + pdf, itertools.groupby(group_iob(iob, "sequence"), attrgetter("page_number")) + ): + page_height = page.get_height() + LOGGER.info("page %d", page_number) + for bloc in group: + x0, top, x1, bottom = bloc.bbox + width = x1 - x0 + height = bottom - top + y = page_height - bottom + LOGGER.info("element %s à %d, %d, %d, %d", bloc.type, x0, y, width, height) + path = pdfium_c.FPDFPageObj_CreateNewRect( + x0 - 1, y - 1, width + 2, height + 2 + ) + pdfium_c.FPDFPath_SetDrawMode(path, pdfium_c.FPDF_FILLMODE_ALTERNATE, False) + pdfium_c.FPDFPageObj_SetFillColor(path, 50, 200, 50, 50) + pdfium_c.FPDFPageObj_SetStrokeWidth(path, 1) + pdfium_c.FPDFPage_InsertObject(page, path) + pdfium_c.FPDFPage_GenerateContent(page) pdf.save(outpath)