Eu fiz muito trabalho neste tipo de análise. Como há erros, você não obterá 100% de precisão, mas há algumas coisas que você pode fazer para obter a maior parte do caminho e, em seguida, fazer um teste visual de BS. Aqui está a maneira geral de fazer isso. Não é código, porque é bem acadêmico escrevê-lo, não há estranheza, apenas muita manipulação de strings.
(Agora que você postou alguns dados de exemplo, fiz algumas pequenas alterações)
- Trabalhe para trás. Comece pelo CEP, que estará próximo ao final, e em um dos dois formatos conhecidos:XXXXX ou XXXXX-XXXX. Se isso não aparecer, você pode presumir que está na cidade, parte do estado abaixo.
- A próxima coisa, antes do zip, será o estado, e estará no formato de duas letras ou como palavras. Você também sabe quais serão - há apenas 50 deles. Além disso, você pode usar o som das palavras para ajudar a compensar os erros de ortografia.
- antes disso é a cidade, e é provavelmente na mesma linha do estado. Você pode usar um banco de dados de código postal para verificar a cidade e o estado com base no CEP, ou pelo menos usá-lo como um detector de BS.
- O endereço geralmente terá uma ou duas linhas. A segunda linha geralmente será o número do conjunto, se houver, mas também pode ser uma caixa postal.
- Será quase impossível detectar um nome na primeira ou na segunda linha, mas se não for prefixado com um número (ou se for prefixado com "attn:" ou "attention to:", isso pode lhe dar uma dica sobre se é um nome ou uma linha de endereço.
Eu espero que isso ajude de algum jeito.