Skip to content
Extraits de code Groupes Projets
Valider c05431d4 rédigé par Bastien Le Querrec's avatar Bastien Le Querrec
Parcourir les fichiers

RAAspotter: supprime les formulaires avant OCRisation

parent 06685497
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -22,6 +22,8 @@ from bs4 import BeautifulSoup ...@@ -22,6 +22,8 @@ from bs4 import BeautifulSoup
from pyvirtualdisplay import Display from pyvirtualdisplay import Display
from pypdf import PdfReader from pypdf import PdfReader
from pypdf import PdfWriter
from pypdf.generic import NameObject, NumberObject
from stem import Signal from stem import Signal
from stem.control import Controller from stem.control import Controller
...@@ -88,6 +90,7 @@ class RAAspotter: ...@@ -88,6 +90,7 @@ class RAAspotter:
# Supprime le PDF d'origine et la version OCRisée # Supprime le PDF d'origine et la version OCRisée
os.remove(f'{raa_data_dir}{self.get_sha256()}.pdf') os.remove(f'{raa_data_dir}{self.get_sha256()}.pdf')
os.remove(f'{raa_data_dir}{self.get_sha256()}.ocr.pdf') os.remove(f'{raa_data_dir}{self.get_sha256()}.ocr.pdf')
os.remove(f'{raa_data_dir}{self.get_sha256()}.flat.pdf')
def write_properties(self, data_dir): def write_properties(self, data_dir):
raa_data_dir = f'{data_dir}/raa/' raa_data_dir = f'{data_dir}/raa/'
...@@ -112,10 +115,9 @@ class RAAspotter: ...@@ -112,10 +115,9 @@ class RAAspotter:
f.write(json.dumps(properties)) f.write(json.dumps(properties))
f.close() f.close()
def parse(self, data_dir, not_before, keywords): def parse_metadata(self, data_dir):
self.get_pdf_dates(data_dir) self.get_pdf_dates(data_dir)
self.write_properties(data_dir) self.write_properties(data_dir)
self.extract_content(data_dir)
def __init__(self, data_dir, user_agent=''): def __init__(self, data_dir, user_agent=''):
logger.debug('Initialisation de RAAspotter') logger.debug('Initialisation de RAAspotter')
...@@ -425,7 +427,7 @@ class RAAspotter: ...@@ -425,7 +427,7 @@ class RAAspotter:
'--skip-big', '500', '--skip-big', '500',
'--invalidate-digital-signatures', '--invalidate-digital-signatures',
'--optimize', '0', '--optimize', '0',
f'{self.data_dir}/raa/{raa.get_sha256()}.pdf', f'{self.data_dir}/raa/{raa.get_sha256()}.flat.pdf',
f'{self.data_dir}/raa/{raa.get_sha256()}.ocr.pdf' f'{self.data_dir}/raa/{raa.get_sha256()}.ocr.pdf'
] ]
logger.debug(f'Lancement de ocrmypdf: {cmd}') logger.debug(f'Lancement de ocrmypdf: {cmd}')
...@@ -442,6 +444,21 @@ class RAAspotter: ...@@ -442,6 +444,21 @@ class RAAspotter:
logger.warning('ATTENTION : Impossible d\'OCRiser le document', exc.returncode, exc.output) logger.warning('ATTENTION : Impossible d\'OCRiser le document', exc.returncode, exc.output)
shutil.copy(f'{self.data_dir}/raa/{raa.get_sha256()}.pdf', f'{self.data_dir}/raa/{raa.get_sha256()}.ocr.pdf') shutil.copy(f'{self.data_dir}/raa/{raa.get_sha256()}.pdf', f'{self.data_dir}/raa/{raa.get_sha256()}.ocr.pdf')
def flatten_pdf(self, raa):
# OCRmyPDF ne sait pas gérer les formulaires, donc on les enlève avant OCRisation
reader = PdfReader(f'{self.data_dir}/raa/{raa.get_sha256()}.pdf')
writer = PdfWriter()
for page in reader.pages:
if page.get('/Annots'):
for annot in page.get('/Annots'):
writer_annot = annot.get_object()
writer_annot.update({
NameObject("/Ff"): NumberObject(1)
})
writer.add_page(page)
writer.write(f'{self.data_dir}/raa/{raa.get_sha256()}.flat.pdf')
def search_keywords(self, raa, keywords): def search_keywords(self, raa, keywords):
text = open(f'{self.data_dir}/raa/{raa.get_sha256()}.txt').read() text = open(f'{self.data_dir}/raa/{raa.get_sha256()}.txt').read()
...@@ -477,8 +494,10 @@ class RAAspotter: ...@@ -477,8 +494,10 @@ class RAAspotter:
url = quote(raa.url, safe='/:') url = quote(raa.url, safe='/:')
logger.info(f'Nouveau fichier : {raa.name} ({raa.date_str}). URL : {url}') logger.info(f'Nouveau fichier : {raa.name} ({raa.date_str}). URL : {url}')
self.download_file(raa) self.download_file(raa)
raa.parse_metadata(self.data_dir)
self.flatten_pdf(raa)
self.ocr(raa, True) self.ocr(raa, True)
raa.parse(self.data_dir, self.not_before, keywords) raa.extract_content(self.data_dir)
self.search_keywords(raa, keywords) self.search_keywords(raa, keywords)
def get_raa(self, page_content): def get_raa(self, page_content):
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter