diff --git a/bananaSPLIT/libbananasplit/libsplit.py b/bananaSPLIT/libbananasplit/libsplit.py index ac8df90..3a5fa56 100644 --- a/bananaSPLIT/libbananasplit/libsplit.py +++ b/bananaSPLIT/libbananasplit/libsplit.py @@ -109,6 +109,116 @@ class bananaSPLITTER(QRunnable): self.log.error("Errore inaspettato durante l'eliminazione delle righe vuote!") raise BaseException("DelLines") del tempContent + + def newSplitFile(self): #porting del codice dal programma originale + self.log.info("Individuo il contenuto..") + self.bodyCounter=0 + self.duplicateNumber=0 + docNumber = 0 + docSkipped = 0 + docDate = {} + title = '' + prevLine = '' + newsPaperName = '' + titleBegin = False + tempBody = list() + docSep=re.compile(self.docStruct['docSep']) + + for l in self.rawFile: #per ogni linea del file + lineWords = l.lstrip().split(' ') #dividi la riga in parole + if self.status == 'first': + #prendo il numero di documento per vedere se ci sono buchi + try: + try: + nn = parse.parse("{current:d} Of {total} Documents",l.strip().capitalize()).named + if nn["current"]-docNumber==1: + pass + else: + if self.settings["showSkipped"]: + self.log.warn("Il conto dei documenti non torna! LexisNexis ne ha saltato qualcuno!\n Precedente:{0}-Attuale:{1}".format(docNumber,nn["current"])) + docSkipped+=1 + docNumber = nn["current"] + except: + pass #non segnalare eccezione se il parse fallisce + # ricerco la data + if (lineWords[self.settings['monthPosition']]).capitalize() in self.docStruct['language']['dateWords']: + try: + docDate=parse.parse(self.docStruct['dateFormat'],l).named + docDate['month']=docDate['month'].lstrip().rstrip().capitalize() + docDate['month']=self.docStruct['language']['dateWords'].index(docDate['month'])+1 + title = '' + titleBegin=True + # dopo la data inizia il titolo, ma prima si cerca il nome del giornale + if self.settings['getNewsPaperName']: + try: + if prevLine.split(' ')[0].strip().isalpha(): + newsPaperName = prevLine.strip() + else: + newsPaperName = self.settings['nameNotFoundStr'] + except: + self.log.warn("E' successo qualcosa mentre stavo cercando il nome della pubblicazione,\ + controlla i file di uscita! [{}]".format(prevLine.strip())) + else: + newsPaperName = self.settings['nameNotFoundStr'] + except: + self.log.warn("Ho trovato una riga ambigua.. potrebbe essere una data ma non so: [{}]". format(l.strip('\r\n'))) + pass + elif lineWords[0] in self.docStruct['language']['headWords']: + #cambio stato e inizializzo un nuovo documento da riempire + self.status = 'head' + newDoc=dict() + newDoc['title']=title + newDoc['date']=docDate + newDoc['newsPaperName'] = newsPaperName + titleBegin=False + else: + if titleBegin: + title += l.strip().capitalize() + except IndexError: + self.log.error("Errore inaspettato, contatta il tuo sviluppatore di fiducia!") + pass + elif self.status == 'head': + tempContent = list() + if lineWords[0] not in self.docStruct['language']['headWords']: #se la prima parola non e' tra quelle di inizio + tempBody.append(l) # vuol dire che ho trovato l'articolo e aggiungo la prima riga al contenuto del documento + self.status = 'body' + pass + elif self.status == 'body': + if not lineWords[0] in self.docStruct['language']['tailWords']: #se la prima parola non e' tra quelle di fine + if self.settings['delLF']: + tempBody.append(l.strip('\n')) #allora sto leggendo l'articolo + else: + tempBody.append(l) + else: + self.status = 'tail' + anomaly = False + if docSep.match(l) is not None: #controlla se ci sono articoli che non hanno le parole chiave finali + self.log.warn("Ho individuato una separatore valido prima che si chiusesse l'articolo precedente, controlla i tuoi file in uscita!\n\ + L'errore dovrebbe essere intorno all'articolo {} ma non sono sicuro! \n\t\t[{}]".format(docNumber, l.strip())) + self.status = 'tail' + anomaly = True + pass + elif self.status == 'tail': + if docSep.match(l) is not None or anomaly: + self.status = 'first' + anomaly = False + if self.settings['delWordBreak']: + tempContent=[ll.replace('-\n', '') for ll in tempContent] + newDoc['content']=copy.deepcopy(''.join(tempBody)) + self.contentList.append(copy.deepcopy(newDoc)) + tempBody=list() + self.bodyCounter +=1 + pass + else: + self.log.critical("Stato Interno Sconosciuto") + prevLine=l #salva sempre e comunque il contenuto della linea precedente + pass + #ricerca terminata, espongo i risultati + self.log.info("Nel file ho trovato {0} articoli..".format(self.bodyCounter)) + if docSkipped > 0: + self.log.warn("Attentione, LexisNexis ne ha saltati {} !!!".format(docSkipped)) + pass + pass def splitFile(self): #porting del codice dal programma originale self.log.info("Individuo il contenuto..")