Script para identificar datas e anos em um texto

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

Filtered HTML

  • Endereços de páginas de internet e emails viram links automaticamente.
  • Tags HTML permitidas: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Quebras de linhas e parágrafos são feitos automaticamente.

Plain text

  • Nenhuma tag HTML permitida.
  • Endereços de páginas de internet e emails viram links automaticamente.
  • Quebras de linhas e parágrafos são feitos automaticamente.