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