<commit_before>#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, os, subprocess, argparse


# ArgumentParser configuration

parser = argparse.ArgumentParser(description='Parsea PDF de votaciones.')

parser.add_argument('infile', type=argparse.FileType('r'), \
        help='archivo PDF a procesar')
parser.add_argument('outfile', nargs='?', default=sys.stdout,  type=argparse.FileType('w'),\
        help='archivo de salida con la informacion procesada (stdout si se omite)')
parser.add_argument('--outformat', choices=['csv','json'], default='csv',\
        help='formato de salida (CSV o JSON)')
parser.add_argument('--keep-textfile', action='store_true',\
        help='mantiene el archivo generado por pdftotext')


def call_pdftotext(filename):
    ''' Uses pdftotext to create a text file based on the 
    given filename of a pdf file.

    Returns the name of the text file.
    '''
    subprocess.call('pdftotext -nopgbrk -layout %s' % filename, shell=True)
    return infilename[:-3] + 'txt'


def deactivate_readflag(line):
    ''' Returns True if the readflag must be deactivated. Returns False if not.'''
    return line.strip()[0]=='[' \
        or line.find('Página') != -1 \
        or line.find('Observaciones') != -1


def activate_readflag(line):
    ''' Returns True if the readflag must be activated. Returns False if not.'''
    return line.find('Apellido y Nombre') != -1


if __name__ == '__main__':
    
    # parse actual arguments
    
    args = parser.parse_args()
    infile = args.infile
    outfile = args.outfile
    outformat = args.outformat
    keep_textfile = args.keep_textfile
    infilename = infile.name

    # pdftotext call

    textfilename = call_pdftotext(infilename)

    # process input file and write to output file
    
    textfile = open(textfilename, 'r')
    line = textfile.readline()
    readflag = False
    while line:
    
        # ignore blank lines
        if not line.strip():
            line = textfile.readline()
            continue
        
        if deactivate_readflag(line):
            readflag = False
        
        if readflag:
            data = [e.strip() for e in line.strip().split('  ') if e]
            if len(data) == 4: 
                # Apellido y Nombre, Bloque, Provincia, Voto
                outfile.write( ','.join(data) + '\n' )
        
        if activate_readflag(line):
            readflag = True
        
        line = textfile.readline()
    
    textfile.close()
    
    if not keep_textfile:
        os.remove(textfilename)
    
    infile.close()
    outfile.close()
<commit_msg>Agrego lectura del header de las actas y las observaciones<commit_after>#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, os, subprocess, argparse


# ArgumentParser configuration

parser = argparse.ArgumentParser(description='Parsea PDF de votaciones.')

parser.add_argument('infile', type=argparse.FileType('r'), \
        help='archivo PDF a procesar')
parser.add_argument('outfile', nargs='?', default=sys.stdout,  type=argparse.FileType('w'),\
        help='archivo de salida con la informacion procesada (stdout si se omite)')
parser.add_argument('--outformat', choices=['csv','json'], default='csv',\
        help='formato de salida (CSV o JSON)')
parser.add_argument('--keep-textfile', action='store_true',\
        help='mantiene el archivo generado por pdftotext')


def call_pdftotext(filename):
    ''' Uses pdftotext to create a text file based on the 
    given filename of a pdf file.

    Returns the name of the text file.
    '''
    subprocess.call('pdftotext -nopgbrk -layout %s' % filename, shell=True)
    return infilename[:-3] + 'txt'


def deactivate_readflag(line):
    ''' Returns True if the readflag must be deactivated. Returns False if not.'''
    return line.strip()[0]=='[' \
        or line.find('Página') != -1 \
        or line.find('Observaciones') != -1


def activate_readflag(line):
    ''' Returns True if the readflag must be activated. Returns False if not.'''
    return line.find('Apellido y Nombre') != -1

def split_data(line):
    ''' Returns list of in ... '''
    return [e.strip() for e in line.strip().split('  ') if e]


if __name__ == '__main__':
    
    # parse actual arguments
    
    args = parser.parse_args()
    infile = args.infile
    outfile = args.outfile
    outformat = args.outformat
    keep_textfile = args.keep_textfile
    infilename = infile.name

    # pdftotext call

    textfilename = call_pdftotext(infilename)

    # process input file and write to output file
    
    textfile = open(textfilename, 'r')
    line = textfile.readline()

    # process header

    while line.find("Período")==-1:
        line = textfile.readline().strip()
    periodo, sesion, reunion = line.split(' - ')
    
    line = textfile.readline().strip()
    titulo = line
    
    line = textfile.readline().strip()
    acta, version, fecha, hora = split_data(line)    
    acta = acta.split(' ')[-1]
    fecha = fecha.split(' ')[-1]
    hora = hora.split(' ')[-1]

    while line.find("Base Mayoría")==-1:
        line = textfile.readline()
    base, tipo, quorum = split_data(line)
    base = base.split(':')[-1].strip()
    tipo = tipo.split(':')[-1].strip()
    quorum = quorum.split(':')[-1].strip()

    while line.find("Miembros del cuerpo") == -1:
        line = textfile.readline()
    miembros, basura, resultado = split_data(line)
    miembros = miembros.split(':')[-1]

    while line.find("Presidente") == -1:
        line = textfile.readline()
    presidente = line.split(':')[-1].strip()

    # process individual votes 

    line = textfile.readline()
    readflag = False
    while line and line.find("Observaciones")==-1:
    
        # ignore blank lines
        if not line.strip():
            line = textfile.readline()
            continue
        
        if deactivate_readflag(line):
            readflag = False
        
        if readflag:
            data = split_data(line)          
            if len(data) == 4: 
                # Apellido y Nombre, Bloque, Provincia, Voto
                outfile.write( ','.join(data) + '\n' )
        
        if activate_readflag(line):
            readflag = True
        
        line = textfile.readline()
    
    # Observaciones...
    
    if line:
        observaciones = []
        line = textfile.readline()
        while line and line.find("Modificación")==-1:
            if not line.strip():
                line = textfile.readline()
                continue
            observaciones.append(line)
            line = textfile.readline()
        texto_observaciones = ''.join(observaciones)
    

    # close files
    
    textfile.close()
    if not keep_textfile:
        os.remove(textfilename)
    
    infile.close()
    outfile.close()

{'fraction_non_alphanumeric': 0.12968427264679847, 'fraction_numerical': 0.004131012097964001, 'mean_word_length': 2.4657464212678937, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5858434', 'n_tokens_mistral': 2137, 'n_tokens_neox': 2092, 'n_words': 542}