X-Git-Url: http://www.iramuteq.org/git?a=blobdiff_plain;f=parse_factiva_txt.py;h=e45c41f8b7916e01908db300945044e3c410fc33;hb=refs%2Fheads%2F3.0;hp=18461e06c6f1ec3290f927b235c0c7d5f7befc98;hpb=6919f2ef8d85c176c7be824b606c4b71142e10fd;p=iramuteq diff --git a/parse_factiva_txt.py b/parse_factiva_txt.py index 18461e0..e45c41f 100644 --- a/parse_factiva_txt.py +++ b/parse_factiva_txt.py @@ -1,43 +1,41 @@ -#!/bin/env python # -*- coding: utf-8 -*- #Author: Pierre Ratinaud -#Copyright (c) 2012-2013 Pierre Ratinaud +#Copyright (c) 2008-2020 Pierre Ratinaud +#modification pour python 3 : Laurent Mérat, 6x7 - mai 2020 #License: GNU/GPL +#------------------------------------ +# import des modules python +#------------------------------------ import os import codecs import re -#txtdir = 'dev/factiva_txt' -#fileout = 'dev/factiva_txt_out.txt' -#encodage_in = 'utf8' -#encodage_out = 'utf8' - -mois = {u'janvier' : '01', - u'février' : '02', - u'mars' : '03', - u'avril' : '04', - u'mai' : '05', - u'juin' : '06', - u'juillet' : '07', - u'août' : '08', - u'septembre' : '09', - u'octobre' : '10', - u'novembre' : '11', - u'décembre' : '12', - u'january' : '01', - u'february': '02', - u'march' : '03', - u'april': '04', - u'may': '05', - u'june' : '06', - u'july': '07', - u'august': '08', - u'september' : '09', - u'october': '10', - u'november': '11', - u'december': '12'} +mois = {'janvier' : '01', + 'février' : '02', + 'mars' : '03', + 'avril' : '04', + 'mai' : '05', + 'juin' : '06', + 'juillet' : '07', + 'août' : '08', + 'septembre' : '09', + 'octobre' : '10', + 'novembre' : '11', + 'décembre' : '12', + 'january' : '01', + 'february': '02', + 'march' : '03', + 'april': '04', + 'may': '05', + 'june' : '06', + 'july': '07', + 'august': '08', + 'september' : '09', + 'october': '10', + 'november': '11', + 'december': '12'} def parsetxtpaste(txt): @@ -46,32 +44,33 @@ def parsetxtpaste(txt): à partir d'un copier/coller de la fenêtre de visualisation merci à Lucie Loubère pour l'astuce :) """ + no = ['NS','RE','IPD','CO','IN'] # les balises qui signalent une fin txt = txt.splitlines() keepline = False ucis = [] for line in txt : - if line.startswith(u'Article') : + if line.startswith('Article') : lp = line.split() if len(lp) > 2 : - if lp[2] == u'Article' or lp[2] == u'Next' or lp[2] == u'Previous': - ucis.append([[u'****'],'']) + if lp[2] == 'Article' or lp[2] == 'Next' or lp[2] == 'Previous': + ucis.append([['****'],'']) keepline = False if line.startswith('SN ') : #source - jsource = re.sub(u'[\'" !\.?;,:\+\-°&]', '', line[4:]) - source = u'_'.join([u'*source', jsource]).lower() - #source = '*source_' + line[4:].replace(' ','').replace('\'','').replace(u'´','').replace(u'’','').replace('-','').lower() + jsource = re.sub('[\'" !\.?;,:\+\-°&]', '', line[4:]) + source = '_'.join(['*source', jsource]).lower() + #source = '*source_' + line[4:].replace(' ','').replace('\'','').replace('´','').replace('’','').replace('-','').lower() ucis[-1][0].append(source) elif line.startswith('PD ') : #date datemois = line[4:].split(' ')[1].lower() datemois = mois.get(datemois, datemois) dateannee = line[4:].split(' ')[2] datejour = '%02d' % int(line[4:].split(' ')[0]) - am = '_'.join([u'*am', dateannee, datemois]) - amj = '_'.join([u'*amj', dateannee, datemois, datejour]) + am = '_'.join(['*am', dateannee, datemois]) + amj = '_'.join(['*amj', dateannee, datemois, datejour]) ucis[-1][0].append(am) ucis[-1][0].append(amj) - annee = '_'.join([u'*annee', dateannee]) + annee = '_'.join(['*annee', dateannee]) ucis[-1][0].append(annee) elif line.strip() in no : #fin keepline = False @@ -82,39 +81,36 @@ def parsetxtpaste(txt): else : pass if keepline and line.strip() not in ['LP', 'TD', ''] : - ucis[-1][1] = '\n'.join([ucis[-1][1],line]) + ucis[-1][1] = '\n'.join([ucis[-1][1],line.replace('*', ' ')]) return ucis - def print_ucis(ucis, ofile, encodage) : #elimination des articles vides ucis = [uci for uci in ucis if uci[1].strip() != ''] toprint = '\n\n'.join(['\n'.join([' '.join(uci[0]),uci[1]]) for uci in ucis]) - ofile.write(toprint.encode(encodage, errors='replace') + '\n') + ofile.write(toprint + '\n') + class ParseFactivaPaste : + def __init__(self, txtdir, fileout, encodage_in, encodage_out) : - files = os.listdir(txtdir) - files = [f for f in files if f.split('.')[-1] == 'txt'] + files = [] + for root, subfolders, subfiles in os.walk(txtdir) : + nf = [os.path.join(root, f) for f in subfiles if f.split('.')[-1] == 'txt'] + nf.sort() + files += nf tot = 0 with open(fileout,'w') as outf : for f in files : - print f - f = os.path.join(txtdir, f) - print f - with codecs.open(f, 'rU', encodage_in) as infile : + print(f) + with codecs.open(f, 'r', encodage_in) as infile : content = infile.read() ucis = parsetxtpaste(content) print_ucis(ucis, outf, encodage_out) tot += len(ucis) - print 'ok', len(ucis), 'articles', ' - total : ', tot - -#for dat in ['2001','2002','2003','2004', '2005','2006','2007','2008','2009','2010','2011'] : -# path = os.path.join(txtdir,dat) -# outfile = os.path.join(txtdir, 'corpus_' + dat + '.txt') -# doparse(path, outfile) - + print('ok', len(ucis), 'articles', ' - total : ', tot) +# execution en direct ??? if __name__ == '__main__' : doparse(txtdir, fileout, encodage_in, encodage_out) - print 'fini' + print('fini')