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 ...@@ -12,6 +12,8 @@ from pyvirtualdisplay import Display
from pdfminer.high_level import extract_text from pdfminer.high_level import extract_text
import hashlib
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class RAAspotter: class RAAspotter:
...@@ -20,6 +22,7 @@ class RAAspotter: ...@@ -20,6 +22,7 @@ class RAAspotter:
date = "" date = ""
name = "" name = ""
filename = "" filename = ""
sha256 = ""
def __init__(self, url, date, name, filename): def __init__(self, url, date, name, filename):
if not url == "": if not url == "":
...@@ -31,6 +34,11 @@ class RAAspotter: ...@@ -31,6 +34,11 @@ class RAAspotter:
if not filename == "": if not filename == "":
self.filename = 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=""): def __init__(self, data_dir, user_agent=""):
logger.debug('Initialisation de RAAspotter') logger.debug('Initialisation de RAAspotter')
self.user_agent = user_agent self.user_agent = user_agent
...@@ -87,9 +95,9 @@ class RAAspotter: ...@@ -87,9 +95,9 @@ class RAAspotter:
def download_file(self, raa): def download_file(self, raa):
try: 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) 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.write(file.content);
f.close() f.close()
except (requests.exceptions.ConnectionError, requests.exceptions.ChunkedEncodingError): except (requests.exceptions.ConnectionError, requests.exceptions.ChunkedEncodingError):
...@@ -98,14 +106,11 @@ class RAAspotter: ...@@ -98,14 +106,11 @@ class RAAspotter:
except Exception as exc: except Exception as exc:
logger.warning(f'ATTENTION: Impossible de télécharger le fichier {raa.url}: {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): def parse_pdf(self, raa, keywords):
if not os.path.isfile(self.data_dir+raa.filename): if not os.path.isfile(f'{self.data_dir}{raa.get_sha256()}.pdf'):
logger.warning(f'ATTENTION: le fichier {raa.filename} n\'existe pas') logger.warning(f'ATTENTION: le fichier {raa.get_sha256()}.pdf n\'existe pas')
else: else:
text = extract_text(self.data_dir+raa.filename) text = extract_text(f'{self.data_dir}{raa.get_sha256()}.pdf')
found = False found = False
for keyword in keywords: for keyword in keywords:
if re.search(keyword, text, re.IGNORECASE|re.MULTILINE): if re.search(keyword, text, re.IGNORECASE|re.MULTILINE):
...@@ -115,15 +120,15 @@ class RAAspotter: ...@@ -115,15 +120,15 @@ class RAAspotter:
RAAspotter.print_output(f' Le terme \033[1m{keyword}\033[0m a été trouvé.') 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 # É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.write(text)
f.close() f.close()
os.remove(self.data_dir+raa.filename) os.remove(f'{self.data_dir}{raa.get_sha256()}.pdf')
if found: if found:
RAAspotter.print_output('') RAAspotter.print_output('')
def ocr(self, raa, retry_on_failure=True): 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}') logger.debug(f'Lancement de ocrmypdf: {cmd}')
try: try:
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT) output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
...@@ -138,7 +143,7 @@ class RAAspotter: ...@@ -138,7 +143,7 @@ class RAAspotter:
def parse_raa(self, elements, keywords): def parse_raa(self, elements, keywords):
for raa in elements: for raa in elements:
# Si le fichier n'a pas déjà été parsé, on le télécharge et on le parse # 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}') logger.info(f'Nouveau fichier : {raa.name} ({raa.date}). URL : {raa.url}')
self.download_file(raa) self.download_file(raa)
self.ocr(raa, True) 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