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