[Cascavel-pm] Parse de Endereço (Was: Re: Separando campos)

Gabriel Vieira gabriel.vieira em gmail.com
Terça Março 20 09:00:24 PDT 2007


A idéia é muito interessante, creio que valeria para endereços que não
fossem do Brasil também (com ajustes, claro).

A dificuldade será em estabelecer o padrão de preenchimento do endereço para
um parse bem adequado.

Gostei da idéia.

On 3/20/07, Daniel Ruoso <daniel em ruoso.com> wrote:
>
> Seg, 2007-03-19 às 11:39 -0300, Veronica Soraia escreveu:
> > olá tenho um problema , não estou conseguindo resolver (sou iniciante
> > rsrsr), é o seguinte, tenho um arquivo q vem com o endereço junto com
> > essas duas opções : AV 29 JUNHO 00602, e , R MARGARIDAS 13 QD8 C 13.
>
> Vendo esse problema, me lembrei de uma migração que tive que fazer uma
> vez de um banco de dados lazarento em access para um banco de dados
> PostgreSql. Uma das diferenças dos bancos de dados era que o endereço no
> banco novo era completamente estruturado (conforme utilizado pelos
> correios) em Tipo de Logradouro, Logradouro, Número e Complemento,
> enquanto no banco de dados anterior foi preenchido completamente à mão
> por um conjunto indefinido de pessoas.
>
> O parse não foi perfeito, mas os casos que consegui localizar enquanto
> estava escrevendo o script foram atendidos... De repente valia a pena
> fazer um módulo Brasil::Parse::Endereco :)... e fazer test cases...
>
> bem... aí vai o código que eu fiz na altura:
>
> <code>
> sub extrair_endereco {
>         my $endereco = shift;
>         my $original = $endereco;
>         my ($t,$l,$n,$c) = ('','','','');
>
>         if ($endereco =~ /^rua\,*\s*(.+)$/i) {
>                 $t = "Rua";
>                 $endereco = $1;
>         } elsif ($endereco =~ /^av\.*\,*\s*(.+)$/i) {
>                 $t = "Avenida";
>                 $endereco = $1;
>         } elsif ($endereco =~ /^trav\.*\,*\s*(.+)$/i) {
>                 $t = "Travessa";
>                 $endereco = $1;
>         }
>
>         if ($endereco =~ /^([^,]+)\s*,\s*(.+)$/i) {
>                 $l = $1;
>                 $endereco = $2;
>         } elsif ($endereco =~ /^(.+)\s*N\.*º\s*(.+)$/i) {
>                 $l = $1;
>                 $endereco = $2;
>         } elsif ($endereco =~ /^(.\D+)\s+(\d+?.+)$/i) {
>                 $l = $1;
>                 $endereco = $2;
>         }
>
>         if ($endereco =~ /^(\S+)\s+(.+)$/) {
>                 $n = $1;
>                 $c = $2;
>         } else {
>                 $n = $endereco;
>                 $c = '';
>         }
>
>         return ($t,$l,$n,$c);
> }
> </code>
>
> Alguém acha a idéia interessante?
>
> daniel
>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>



-- 
Gabriel Vieira
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070320/3d384d93/attachment.html 


Mais detalhes sobre a lista de discussão Cascavel-pm