Segue um script para identificar datas e anos em um determinado texto. O que ele faz, basicamente, é receber um texto ou um arquivo, procurar pelas datas que contém e apresentar, no terminal, uma lista com as datas encontradas e uma lista com os anos. A lista com os anos vem em ordem cronológica.
O script está em python3. Isto ajuda bastante, especialmente porque não é preciso lidar com a questão do tipo de codificação de caracteres.
Abaixo de cada trecho há uma explicação, entre aspas triplas, para quem gosta de saber o que está havendo. Espero que isso ajude. Se você quiser só copiar e customizar o script para sua necessidade ou usar tal como está.
Para quem não sabe, um script é basicamente um arquivo de texto com um código dentro para ser executado. Se você estiver usando Linux, você pode editar o arquivo com o gedit, o kate, o Vim ou qualquer outro editor de texto que você tenha instalado. No Windows você pode usar o notepad mesmo.
Salve o arquivo com o script com a terminação .py. Por exemplo: script.py.
#!/usr/bin/python3 """ Informa o sistema como executar o arquivo. No caso, damos o endereço da instalação do python3. Esta linha não é necessária quando você chama o arquivo como um argumento para o python. """ import re """Importa o módulo re, que trata de expressões regulares""" import sys """Importa o módulo sys, que usaremos para pegar o argumento passado pela linha de comando""" try: arquivo = open(sys.argv[1], 'r') text = arquivo.read() except: text = sys.argv[1] """ O try/except tenta (try) executar uma ação, se não der certo (except), executa a outra. No try tentamos abrir o arquivo constante do segundo (1 é o segundo, o primeiro é 0) argumento. O 'r' indica que o arquivo deve ser aberto como somente leitura. Em seguida lemos o conteúdo do arquivo e o armazenamos na variável "text" Se não conseguirmos abrir o arquivo (o arquivo provavelmente não existe), trataremos o argumento como um texto qualquer. """ def get_year(text): """cria a função get_year, que recebe o parâmetro year.""" datas = re.findall('[^\d](\d{4})[^\d]', text) """a variável datas é o resultado da função re.findall. Esta função usa uma expressão regular para procurar combinações em todo um texto, no caso no texto da variável text""" return(datas) def get_date(string): """cria a função get_date, que recebe o parâmetro string."""" datas = re.findall('[^\d](\d{1,2}[^\d]\d{1,2}[^\d]\d{2,4})[^\d]', string) """a variável datas é o resultado da função re.findall. Esta função usa uma expressão regular para procurar combinações em todo um texto, no caso no texto da variável text for i in get_month_name()+get_month_name(abbreviation=True): """o for passa por todos os itens resultantes da função get_month_name com e sem abreviações...""" datas += re.findall('[^\d](\d{1,2}\s{0,1}(,|de){0,1}\s{0,1}'+i+'\s{0,1}(,|de){0,1}\s{0,1}\d{2,4})[^\d]', string) """... e acrescenta o resultado de uma busca com expressões regulares à variável datas.""" result = [] """no trecho abaixo coloca-se o primeiro item de cada lista, ou o texto, se não for uma lista, na lista result""" for i in datas: if i.__class__ == str: result.append(i) else: result.append(i[0]) """retorna a variável result""" return result def get_month_name(month=None, abbreviation=False): """retorna uma lista dos nomes dos meses, dos nomes abreviados ou o número de um determinado mês""" months = ['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro'] mon = [i[0:3] for i in months] if month.__class__ == int: return months[month+1] elif month.__class__ == str: month = month.lower() if month in months: return months.index(month)+1 elif abbreviation: return mon else: return months """Os trechos abaixo imprimem o resultado na tela""" print('Datas (na ordem em que apareceram no texto)') print(get_date(frase)) print('Anos (em ordem cronológica):') print(sorted(get_year(frase)))
Comentar