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

RAAspotter: utilise le hash sha256 du nom de fichier original comme nom local

Cela permet d'éviter des problèmes de noms de fichiers trop longs tout
en gardant des noms de fichiers uniques.
parent 6f58245b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -12,6 +12,8 @@ from pyvirtualdisplay import Display
from pdfminer.high_level import extract_text
import hashlib
logger = logging.getLogger(__name__)
class RAAspotter:
......@@ -20,6 +22,7 @@ class RAAspotter:
date = ""
name = ""
filename = ""
sha256 = ""
def __init__(self, url, date, name, filename):
if not url == "":
......@@ -31,6 +34,11 @@ class RAAspotter:
if not filename == "":
self.filename = filename
def get_sha256(self):
if (self.sha256 == ""):
self.sha256 = hashlib.sha256(self.filename.encode('utf-8')).hexdigest()
return self.sha256
def __init__(self, data_dir, user_agent=""):
logger.debug('Initialisation de RAAspotter')
self.user_agent = user_agent
......@@ -87,9 +95,9 @@ class RAAspotter:
def download_file(self, raa):
try:
os.makedirs(os.path.dirname(self.data_dir+raa.filename), exist_ok=True)
os.makedirs(os.path.dirname(f'{self.data_dir}{raa.get_sha256()}.pdf'), exist_ok=True)
file = self.session.get(raa.url)
f = open(self.data_dir+raa.filename,'wb')
f = open(f'{self.data_dir}{raa.get_sha256()}.pdf','wb')
f.write(file.content);
f.close()
except (requests.exceptions.ConnectionError, requests.exceptions.ChunkedEncodingError):
......@@ -98,14 +106,11 @@ class RAAspotter:
except Exception as exc:
logger.warning(f'ATTENTION: Impossible de télécharger le fichier {raa.url}: {exc}')
def get_txt_file(filename):
return re.sub('(\.pdf)$', '.txt', filename)
def parse_pdf(self, raa, keywords):
if not os.path.isfile(self.data_dir+raa.filename):
logger.warning(f'ATTENTION: le fichier {raa.filename} n\'existe pas')
if not os.path.isfile(f'{self.data_dir}{raa.get_sha256()}.pdf'):
logger.warning(f'ATTENTION: le fichier {raa.get_sha256()}.pdf n\'existe pas')
else:
text = extract_text(self.data_dir+raa.filename)
text = extract_text(f'{self.data_dir}{raa.get_sha256()}.pdf')
found = False
for keyword in keywords:
if re.search(keyword, text, re.IGNORECASE|re.MULTILINE):
......@@ -115,15 +120,15 @@ class RAAspotter:
RAAspotter.print_output(f' Le terme \033[1m{keyword}\033[0m a été trouvé.')
# Écrit le texte du PDF dans un fichier texte pour une analyse future, puis supprime le PDF
f = open(RAAspotter.get_txt_file(self.data_dir+raa.filename),'w')
f = open(f'{self.data_dir}{raa.get_sha256()}.txt','w')
f.write(text)
f.close()
os.remove(self.data_dir+raa.filename)
os.remove(f'{self.data_dir}{raa.get_sha256()}.pdf')
if found:
RAAspotter.print_output('')
def ocr(self, raa, retry_on_failure=True):
cmd = ['ocrmypdf', '-l', 'eng+fra', '--output-type', 'pdfa', '--redo-ocr', '--skip-big', '500' , self.data_dir+raa.filename, self.data_dir+raa.filename]
cmd = ['ocrmypdf', '-l', 'eng+fra', '--output-type', 'pdfa', '--redo-ocr', '--skip-big', '500' , f'{self.data_dir}{raa.get_sha256()}.pdf', f'{self.data_dir}{raa.get_sha256()}.pdf']
logger.debug(f'Lancement de ocrmypdf: {cmd}')
try:
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
......@@ -138,7 +143,7 @@ class RAAspotter:
def parse_raa(self, elements, keywords):
for raa in elements:
# Si le fichier n'a pas déjà été parsé, on le télécharge et on le parse
if not os.path.isfile(RAAspotter.get_txt_file(self.data_dir+raa.filename)):
if not os.path.isfile(f'{self.data_dir}{raa.get_sha256()}.txt'):
logger.info(f'Nouveau fichier : {raa.name} ({raa.date}). URL : {raa.url}')
self.download_file(raa)
self.ocr(raa, True)
......
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