multisplit
[iramuteq] / parse_factiva_mail.py
1 # -*- coding: utf-8 -*-
2 #Author: Pierre Ratinaud
3 #Copyright (c) 2008-2020 Pierre Ratinaud
4 #modification pour python 3 : Laurent Mérat, 6x7 - mai 2020
5 #License: GNU/GPL
6
7 #------------------------------------
8 # import des modules python
9 #------------------------------------
10 import os
11 import codecs
12
13
14 def parsetxtmail(txt):
15     """
16     parser de texte pour factiva
17     """
18
19     no = ['NS','RE','IPD','CO','IN']  # les balises qui signalent une fin
20     txt = txt.splitlines() #met le texte dans une liste de lignes
21     txt.pop(0) # la premiere ligne sert a rien
22     txt = txt[0:(len(txt)-10)] # les dernieres lignes ne servent a rien
23     keepline = False
24     ucis = []
25     for line in txt : #pour chaque ligne du texte...
26         if line.startswith('---------------------------------------------------------------') : # si la ligne commence avec...
27             ucis.append([['****'],'']) # c'est une nouvelle uci
28             keepline = False
29         elif line.startswith('SN  ') : #source
30             source = '*source_' + line[4:].replace(' ','').replace('\'','').replace('´','').replace('’','').replace('-','').lower()
31             ucis[-1][0].append(source)
32         elif line.startswith('PD ') : #date
33             mois_annee = '*ma_' + line[4:].split(' ')[1] + line[4:].split(' ')[2]
34             ucis[-1][0].append(mois_annee)
35             annee = '*annee_' + line[4:].split(' ')[2]
36             ucis[-1][0].append(annee)
37         elif line in no : #fin
38             keepline = False
39         elif line.startswith('RF  ') : #fin
40             keepline = False
41         elif line in ['LP', 'TD'] : #debut texte
42             keepline = True
43         else :
44             pass
45         if keepline and line not in ['LP', 'TD'] :
46             ucis[-1][1] = '\n'.join([ucis[-1][1],line])
47     return ucis
48
49 def print_ucis(ucis, ofile, encodage) :
50     ucis = [uci for uci in ucis if uci[1].strip() != '']
51     toprint = '\n'.join(['\n'.join([' '.join(uci[0]),uci[1]]) for uci in ucis])
52     ofile.write(toprint)
53
54
55 class ParseFactivaMail :
56
57     def __init__(self, txtdir, fileout, encodage_in, encodage_out) :
58         files = os.listdir(txtdir) #liste des fichiers dans txtdir
59         with open(fileout,'w') as outf : #ouverture du fichier en sortie
60             for f in files : #pour chaque fichier en entree...
61                 f= os.path.join(txtdir, f) #chemin du fichier
62                 with codecs.open(f, 'r', encodage_in) as infile : #ouverture du fichier
63                     content = infile.read() #lecture du fichier
64                 ucis = parsetxtmail(content)
65                 print_ucis(ucis, outf, encodage_out)