Existem diversas maneiras de estruturar textos com Python: você pode utilizar técnicas de manipulação de strings (semelhantes aos splits das planilhas) e também expressões regulares (que são mais poderosas, porém mais complexas). No caso do seu texto, me parece que as expressões regulares poderiam funcionar bem (dado que o formato não é tão complexo), mas isso depende de sua familiaridade com elas (não são tão simples de aprender).
De qualquer forma, como o padrão do texto muda ao longo do tempo, o ideal seria você fazer um código para cada padrão de texto e daí fazer uma série de if/elif/elifs no código para detectar o padrão em questão e então aplicar o código que extrai a estrutura para esse padrão. Enfim, lidar com extração de dados estruturados de textos não é algo sempre muito simples, depende da padronização (e da quantidade de padrões).
Fiz dois exemplos de código: um usando funções de manipulação de strings em Python e outro com expressões regulares. Ao final de ambos códigos um dicionário chamado dados
é criado e mostrado na tela.
Código com manipulação simples de string:
from pprint import pprint
texto = "Ocorrência: 13/01 - 12h58 - Moto x Moto\nLocalização: Rua Pedro Lobo - Bairro: Centro"
dados = {}
# Primeiro, extrai dados baseado em suas posições:
linha_1, linha_2 = texto.splitlines()
dados["data"], dados["hora"], dados["descricao"] = linha_1.split(" - ")
dados["endereco"], dados["bairro"] = linha_2.split(" - ")
# Segundo, limpa dados:
dados["data"] = dados["data"].split(": ")[1]
dados["hora"] = dados["hora"].replace("h", ":")
dados["endereco"] = dados["endereco"].split(": ")[1]
pprint(dados) # Mostra dados
Código com expressões regulares:
import re
from pprint import pprint
texto = "Ocorrência: 13/01 - 12h58 - Moto x Moto\nLocalização: Rua Pedro Lobo - Bairro: Centro"
regexp_data_hora_descricao = re.compile("Ocorrência: (.*) - (.*) - (.*)\n")
regexp_endereco_bairro = re.compile("Localização: (.*) - Bairro: (.*)")
dados = {}
dados["data"], dados["hora"], dados["descricao"] = regexp_data_hora_descricao.findall(texto)[0]
dados["endereco"], dados["bairro"] = regexp_endereco_bairro.findall(texto)[0]
dados["hora"] = dados["hora"].replace("h", ":")
pprint(dados)
O resultado, em ambos casos, será:
{'bairro': 'Centro',
'data': '13/01',
'descricao': 'Moto x Moto',
'endereco': 'Rua Pedro Lobo',
'hora': '12:58'}
Nota 1: no código acima eu assumi que o tweet está em duas linhas (por isso o \n
), dado que é o que parece pela imagem. Caso não esteja em duas linhas, você terá que mudar a expressão regular.
Nota 2: caso os caracteres delimitadores ("\n", “-”, “:”) apareçam em outras partes do tweet você precisará alterar os códigos.
Nota 3: você ainda precisará fazer um código que lê o CSV, identifica o padrão do texto e o código para extrair outros padrões.