diff --git a/RAAspotter.py b/RAAspotter.py
index 86aa130d75c98f6740692fde86a40a0c65d5ebf6..e31532fc5f9eac4e904e8727c068217a85e7e4e4 100644
--- a/RAAspotter.py
+++ b/RAAspotter.py
@@ -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)