<font color="#993399"><font size="4"><font face="comic sans ms,sans-serif">Valeu.</font></font></font><div><font color="#993399"><font size="4"><font face="comic sans ms,sans-serif">Abs<br></font></font></font><br><div class="gmail_quote">
Em 17 de março de 2013 15:43, Daniel Marcelino <span dir="ltr"><<a href="mailto:dmarcelino@live.com" target="_blank">dmarcelino@live.com</a>></span> escreveu:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Dá pra fazer tudo tranquilamente. Inclusive, se você perceber que há<br>
muito erro por vício de digitação etc, você pode tentar implementar um<br>
pequeno dicionário de substituições e passar como função no R.<br>
Acabei de ver que a solução que eu te passei não corrige as barras<br>
"\". Para isso você teria que passar essa outra:<br>
<br>
nomea=data.frame(nome=c("?GER\\D","\\HART$MUT","R%ALF\\","STEFAN8","?ROBERT"))<br>
<div class="im"><br>
nomea$nome2<- gsub('[^A-z]', '', nomea$nome)<br>
<br>
</div>nomea$nome2<- gsub('[^[:alnum:]]', '', nomea$nome)<br>
<br>
> nomea<br>
nome nome2<br>
1 GER\\D GERD<br>
<div class="im HOEnZb">2 \\HARTMUT HARTMUT<br>
3 RALF\\ RALF<br>
4 STEFAN STEFAN<br>
5 ROBERT ROBERT<br>
<br>
<br>
<br>
</div><div class="HOEnZb"><div class="h5">2013/3/17 Fátima Lima Paula <<a href="mailto:fatima.lima.paula@gmail.com">fatima.lima.paula@gmail.com</a>>:<br>
> Valeu, Daniel.<br>
> Acho que, como falei com meus orientadores isso se resolve levanco os<br>
> nomespara o excel.<br>
> É que a gente queria ver se daria para fazer no R.<br>
> Obrigada.<br>
> Abs<br>
><br>
> Em 17 de março de 2013 15:24, Daniel Marcelino <<a href="mailto:dmarcelino@live.com">dmarcelino@live.com</a>><br>
> escreveu:<br>
><br>
>> Fátima, dá pra fazer isso, só não sei ainda se incorporando uma<br>
>> solução ad-hoc é a melhor coisa a ser feita na função original.<br>
>> Preciso pensar um pouco mais sobre as implicações dessa alteração para<br>
>> as bases de dados que a função foi inicialmente implementada.<br>
>> Uma forma de você resolver isso "bypass" é passando o comando abaixo<br>
>> nas variáveis que contêm nomes antes de aplicar o soundex. Por<br>
>> exemplo:<br>
>><br>
>> nomea=data.frame(nome=c("GER?D","HARTMUT","RALF","STEFAN","ROBERT"))<br>
>><br>
>> nomea$nome2<- gsub('[^A-z]', '', nomea$nome)<br>
>><br>
>> > nomea<br>
>> nome nome2<br>
>> 1 GER?D GERD<br>
>> 2 HARTMUT HARTMUT<br>
>> 3 RALF RALF<br>
>> 4 STEFAN STEFAN<br>
>> 5 ROBERT ROBERT<br>
>><br>
>> > soundexBR(nomea$nome)<br>
>> [1] "J-6?3" "A-635" "R-410" "S-315" "R-163"<br>
>><br>
>> > soundexBR(nomea$nome2)<br>
>> [1] "J-630" "A-635" "R-410" "S-315" "R-163"<br>
>> ><br>
>><br>
>> Fátima, o problema é que se o erro de entrada de dados estiver na<br>
>> primeira letra do nome, e se o caracter errado estiver ocupando o<br>
>> lugar de uma letra (por ex. % ao invés de H), a string gerada ficará<br>
>> incorreta. Isso pode ser um problema. A solução que eu te passei<br>
>> apenas retira os caracteres estranhos dos nomes, mas não "advinha"<br>
>> qual letra deveria estar no lugar, percebe?<br>
>> A boa notícia é que se sua base de dados tiver muitos erros de<br>
>> entrada, nada te garante também que um nome, aparentemente correto,<br>
>> digo, com apenas letras (Naria ao invés de Maria), não esteja sendo<br>
>> codificado de forma errada ("N-600", "M-600").<br>
>><br>
>> Daniel<br>
>><br>
>> 2013/3/17 Fátima Lima Paula <<a href="mailto:fatima.lima.paula@gmail.com">fatima.lima.paula@gmail.com</a>>:<br>
>> > Olá Daniel Marcelino, precisaria de uma ajuda sua no soundex.<br>
>> > Verifiquei que erros de digitação não são captados pelo SoundexBR.<br>
>> > Exemplo:<br>
>> > ?MARIA e MARIA, PE8DRO e PEDRO.<br>
>> > Será que seria tranquilo para você implementar algumas coisas?<br>
>> > Estou enviando um script que fiz com teste para alguns caracteres.<br>
>> > Desde já muito obrigada.<br>
>> > Abs<br>
>> > Fátima<br>
>> > soundexBR<-function(termo){<br>
>> > termo<-toupper(termo)<br>
>> > # 1. Retire toda pontuação da palavra;<br>
>> > termo<-gsub("[ÃÁÀÂÄ]","A",termo)<br>
>> > termo<-gsub("[ÉÈÊ?Ë]","E",termo)<br>
>> > termo<-gsub("[ÍÌÏÎI]","I",termo)<br>
>> > termo<-gsub("[ÓÕÒÔÖ]","O",termo)<br>
>> > termo<-gsub("[ÚÙÛÜU]","U",termo)<br>
>> > termo<-gsub("Ç","C",termo)<br>
>> > #1.a Substituir todas as letras duplas por uma única letra<br>
>> > #<a href="http://www.archives.gov/genealogy/census/soundex.html" target="_blank">http://www.archives.gov/genealogy/census/soundex.html</a><br>
>> > termo<-gsub("([A-Z])\\1", "\\1", termo)<br>
>> > # 2. Fique com a primeira letra;<br>
>> > N<-nchar(termo)<br>
>> > # Modificação PT-BR (Coeli e Camargo)<br>
>> > termo<-ifelse(substr(termo,1,2)=="WA",sub("W","V",termo),termo)<br>
>> > termo<-ifelse(substr(termo,1,1)=="H",substr(termo,2,N),termo)<br>
>> ><br>
>> > termo<-ifelse(substr(termo,1,2)=="KA"|substr(termo,1,2)=="KO"|substr(termo,1,2)=="KU",sub("K","C",termo),termo)<br>
>> > termo<-ifelse(substr(termo,1,1)=="Y",sub("Y","I",termo),termo)<br>
>> ><br>
>> > termo<-ifelse(substr(termo,1,2)=="CE"|substr(termo,1,2)=="CI",sub("C","S",termo),termo)<br>
>> ><br>
>> > termo<-ifelse(substr(termo,1,2)=="GE"|substr(termo,1,2)=="GI",sub("G","J",termo),termo)<br>
>> > ############## Segunda Parte #######################<br>
>> > termo.1<-substr(termo,1,1)<br>
>> > termo<-substr(termo,2,N)<br>
>> > # 3. Mude todas as ocorrências das letras a seguir por '0' (zero):<br>
>> > 'A','E','I','O','U','H','W','Y';<br>
>> > termo<-gsub("[A,E,I,O,U,H,W,Y]",0,termo)<br>
>> > # 4. Mude as letras restantes de acordo com a tabela abaixo:<br>
>> > # Número Letra<br>
>> > # 1 'B','F','P','V'<br>
>> > termo<-gsub("[B,F,P,V]",1,termo)<br>
>> > # 2 'C','G','J','K', 'Q','S','X','Z'<br>
>> > termo<-gsub("[C,G,J,K,Q,S,X,Z]",2,termo)<br>
>> > # 3 'D','T'<br>
>> > termo<-gsub("[D,T]",3,termo)<br>
>> > # 4 'L'<br>
>> > termo<-gsub("L",4,termo)<br>
>> > # 5 'M','N'<br>
>> > termo<-gsub("[M,N]",5,termo)<br>
>> > # 6 'R'<br>
>> > termo<-gsub("R",6,termo)<br>
>> > # 5. Remova todos os zeros da string resultante;<br>
>> > termo<-gsub(0,"",termo)<br>
>> > # Eliminar dois numeros iguais consecutivos por um único numero<br>
>> > #<a href="http://www.archives.gov/genealogy/census/soundex.html" target="_blank">http://www.archives.gov/genealogy/census/soundex.html</a><br>
>> > termo<-gsub("([0-9])\\1", "\\1", termo)<br>
>> > # Remontar<br>
>> > termo<-paste(termo.1,termo,sep="")<br>
>> ><br>
>> > # 6. Preencha a string resultante com zeros à direita e retorne desta<br>
>> > forma:<br>
>> > #<letra maiuscula><digito><digito><digito><br>
>> > termo<-paste(termo,"0000",sep="")<br>
>> > termo<-substr(termo,1,4)<br>
>> > return(termo)<br>
>> > }<br>
>> ><br>
>> > soundexBR("termo")<br>
>> > soundexBR("terno")<br>
>> ><br>
>> > nomea=data.frame(nome=c("GER?D","HARTMUT","RALF","STEFAN","ROBERT"))<br>
>> > nomea<br>
>> > nomeb=data.frame(nome=c("HARTMUT","GERD","ROBERT","STEFAN","RALF"))<br>
>> > nomeb<br>
>> > fonoa=soundexBR(nomea$nome)<br>
>> > fonob=soundexBR(nomeb$nome)<br>
>> > library(RecordLinkage)<br>
>> > pairs.mat = outer(fonoa,fonob, "==")<br>
>> > pairs.mat<br>
>> > #Ponto de interrogação<br>
>> > nomea=data.frame(nome=c("GER?D","HARTMUT","?RALF","STEFAN","ROBERT"))<br>
>> > nomea<br>
>> > nomeb=data.frame(nome=c("HARTMUT?","GERD","ROBERT","STEFAN","RALF"))<br>
>> > nomeb<br>
>> > fonoa=soundexBR(nomea$nome)<br>
>> > fonob=soundexBR(nomeb$nome)<br>
>> > pairs.mat = outer(fonoa,fonob, "==")<br>
>> > pairs.mat<br>
>> > #Não funciona com o ? no início<br>
>> ><br>
>> > ###############################################################################<br>
>> > #Barras inclinadas /<br>
>> > nomea=data.frame(nome=c("GER/D","/HARTMUT","RALF/","STEFAN","ROBERT"))<br>
>> > nomea<br>
>> > nomeb=data.frame(nome=c("HARTMUT","GERD","ROBERT","STEFAN","RALF"))<br>
>> > nomeb<br>
>> > fonoa=soundexBR(nomea$nome)<br>
>> > fonob=soundexBR(nomeb$nome)<br>
>> > pairs.mat = outer(fonoa,fonob, "==")<br>
>> > pairs.mat<br>
>> > #Não funciona com a barra inclinada<br>
>> > #Barras inclinadas \<br>
>> > nomea=data.frame(nome=c("GER\D","\HARTMUT","RALF\","STEFAN","ROBERT"))<br>
>> > nomea<br>
>> > #O R rejeita a \<br>
>> > #Parênteses (<br>
>> > nomea=data.frame(nome=c("GER(D","(HARTMUT","RALF(","STEFA)N","ROBERT)"))<br>
>> > nomea<br>
>> > nomeb=data.frame(nome=c("HARTMUT","GERD","ROBERT","STEFAN","RALF"))<br>
>> > nomeb<br>
>> > fonoa=soundexBR(nomea$nome)<br>
>> > fonob=soundexBR(nomeb$nome)<br>
>> > pairs.mat = outer(fonoa,fonob, "==")<br>
>> > pairs.mat<br>
>> > #Só funciona com o parênteses depois do nome<br>
>> > #Dois pontos e ponto e vírgula<br>
>> > nomea=data.frame(nome=c("GER:D",":HARTMUT","RALF:","STEFA;N","ROBERT;"))<br>
>> > nomea<br>
>> > nomeb=data.frame(nome=c("HARTMUT","GERD","ROBERT","STEFAN","RALF"))<br>
>> > fonob=soundexBR(nomeb$nome)<br>
>> > pairs.mat = outer(fonoa,fonob, "==")<br>
>> > pairs.mat<br>
>> > #Só funciona com o : e ; depois do nome<br>
>> > #Dólar e ponto<br>
>> > nomea=data.frame(nome=c("GER$D","%HARTMUT","RALF%","STEFA.N","ROBERT."))<br>
>> > nomeb=data.frame(nome=c("HARTMUT","GERD","ROBERT","STEFAN","RALF"))<br>
>> > nomeb<br>
>> > fonoa=soundexBR(nomea$nome)<br>
>> > fonob=soundexBR(nomeb$nome)<br>
>> > pairs.mat = outer(fonoa,fonob, "==")<br>
>> > pairs.mat<br>
>> > #Idem<br>
>> > #Números<br>
>> ><br>
>> > nomea=data.frame(nome=c("GER1D","2HARTMUT","RALF3","S4TEFA.N","RO5BERT6"))<br>
>> > nomea<br>
>> > nomeb=data.frame(nome=c("HARTMUT","GERD","ROBERT","STEFAN","RALF"))<br>
>> > nomeb<br>
>> > fonoa=soundexBR(nomea$nome)<br>
>> > fonob=soundexBR(nomeb$nome)<br>
>> > pairs.mat = outer(fonoa,fonob, "==")<br>
>> > pairs.mat<br>
>> > #Não funciona com números<br>
>> ><br>
>> ><br>
>> > _______________________________________________<br>
>> > R-br mailing list<br>
>> > <a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
>> > <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
>> > Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça<br>
>> > código<br>
>> > mínimo reproduzível.<br>
>><br>
>><br>
>><br>
>> --<br>
>> \begin{signature}<br>
>> Daniel Marcelino<br>
>> ☁ <a href="mailto:dm.silva@umontreal.ca">dm.silva@umontreal.ca</a><br>
>> ☎ <a href="tel:%28514%29%20343%206111%20%233799" value="+15143436111">(514) 343 6111 #3799</a><br>
>> Skype: d.marcelino<br>
>> ✎ 3200 Jean Brillant, Office C5071<br>
>> Montreal, QC; H3T 1N8<br>
>> Canada<br>
>> \end{signature}<br>
>><br>
>> "Small steps toward a much better world"<br>
>> _______________________________________________<br>
>> R-br mailing list<br>
>> <a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
>> <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
>> Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça<br>
>> código mínimo reproduzível.<br>
><br>
><br>
><br>
> _______________________________________________<br>
> R-br mailing list<br>
> <a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
> <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
> Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código<br>
> mínimo reproduzível.<br>
<br>
<br>
<br>
--<br>
\begin{signature}<br>
Daniel Marcelino<br>
☁ <a href="mailto:dm.silva@umontreal.ca">dm.silva@umontreal.ca</a><br>
☎ <a href="tel:%28514%29%20343%206111%20%233799" value="+15143436111">(514) 343 6111 #3799</a><br>
Skype: d.marcelino<br>
✎ 3200 Jean Brillant, Office C5071<br>
Montreal, QC; H3T 1N8<br>
Canada<br>
\end{signature}<br>
<br>
"Small steps toward a much better world"<br>
_______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.</div></div></blockquote></div><br></div>