Tradução de dados textuais com googleLanguageR

O pacote googleLanguageR utiliza o serviço de API do Google Tradutor e nos permite traduzir textos automaticamente.

Miguel Cleaver https://github.com/mgcleaver
07-31-2019

Tradução de texto com o pacote googleLanguageR

Ao trabalhar com dados, pode ser que, em algum momento, seja necessário trazer informações textuais de uma língua estrangeira para a nossa língua. Se você dominar a língua na qual o dado se encontra você pode fazer a tradução por meio da análise de cada caso, mas a situação se complica à medida que o número de observações aumenta. Se você não tiver domínio da língua, provavelmente, a melhor alternativa é utilizar uma aplicação como a do Google Tradutor para o caso a caso. Assim mesmo o processo de fazer várias traduções via Google Tradutor pode se tornar maçante.

Uma solução mais sofisticada passaria pela utilização do pacote googleLanguageR, que consulta à API de Google Tradutor para traduzir textos. De experiência própria, sabemos que o Google Tradutor não é perfeito, mas funciona bem na maioria dos casos.

Além de traduzir textos, o pacote também acessa outras APIs do Google como as de Natural Language e de Cloud Speech. A única desvantagem de usar o googleLanguageR é que você deve ativar o serviço de API para sua conta Google e isso tem um custo financeiro.

Se você estiver interessado em usar o serviço, deve completar os seguintes passos da seção Installation deste link.

Note que como os serviços do Google são pagos, você deverá fornecer dados do seu cartão de crédito para ativar os serviço de API do Google.

Traduzindo nomes de países com o pacote googleLanguageR

O exemplo que será explorado aqui é um tanto quanto simples no quesito tradução, porém serve bem o propósito de exemplificar como o pacote googleLanguageR pode ser utilizado.

Suponhamos que você precise de uma tabela de correlação com os nomes de países em português e os respectivos códigos ISO alfa-3 (ISOA)1. Suponhamos, também, que você só tenha encontrado uma correlação com nomes de países em inglês na seção sobre o ISO 3166-1 alfa-3 do Wikipédia. Por meio das técnicas de web scraping já exploradas em um post anterior, podemos trazer os dados do Wikipédia para dentro do R.


library(rvest)
library(dplyr)

link_isoa <- "https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3"

paises_ingles <- read_html(link_isoa) %>% 
  html_nodes(".div-col li")

isoa <- paises_ingles %>% 
  html_node("span") %>% 
  html_text()

paises <- paises_ingles %>% 
  html_node("a") %>% 
  html_attr("title")

pais_isoa <- data.frame(ISOA = isoa,
                        pais_ing = paises,
                        stringsAsFactors = FALSE)

head(pais_isoa, 10)

   ISOA             pais_ing
1   ABW                Aruba
2   AFG          Afghanistan
3   AGO               Angola
4   AIA             Anguilla
5   ALA        Åland Islands
6   ALB              Albania
7   AND              Andorra
8   ARE United Arab Emirates
9   ARG            Argentina
10  ARM              Armenia

Considerando que o serviço da API do Google Tradutor já esteja habilitado em sua conta Google, podemos traduzir o nome dos países para, por exemplo, o português. Note que, além de ativar o serviço da API da sua conta, você pode criar, caso ainda não o tenha feito, um arquivo com o nome .Renviron no diretório de trabalho do seu R. Nesse arquivo é preciso criar a variável GL_AUTH = “caminho do arquivo da chave API.json” e, depois, salvá-lo. Por fim, a sessão do R deve ser reiniciada para que a mudança no arquivo .Renviron seja incorporada na sessão atual do R. Alternativamente, pode-se especificar diretamente na função gl_auth o caminho da sua chave API do Google.


# Carregamos pacote de tradução
library(googleLanguageR)

# Autenticação para utilizar a API do Google Tradutor
# Note que GL_AUTH define o local da sua chave API e deve constar
# no arquivo .Renviron

gl_auth(Sys.getenv("GL_AUTH"))


Depois de se autenticar, utilizamos a função gl_translate para fazer a tradução. O argumento t_string indica a coluna que desejamos traduzir; target é a língua para a qual queremos traduzir; format se refere ao formato do texto para tradução; e, por fim, source é a língua original do texto.


pais_isoa <- pais_isoa %>%
  mutate(
  pais_port = gl_translate(t_string = pais_ing,
                           target = 'pt',
                           format = 'text',
                           source = "en")$translatedText
)


Ao analisar rapidamente o resultado da tradução do Google Tradutor, encontramos alguns erros de tradução. Por exemplo, “Togo” foi traduzido para o português como “Ir” (houve uma pequena confusão com “to go” rs) e “Turkey”, como “Peru” (não podemos culpar o Google Tradutor completamente rs). Como mencionamos no início deste post, o Google Tradutor não é perfeito, mas, em regra, funciona bem e quebra um bom galho.


indice <- which(pais_isoa$pais_ing == "Togo")
indice2 <- which(pais_isoa$pais_ing == "Turkey")

# print de trecho com erros de tradução
pais_isoa[indice:(indice+9),]

# A tibble: 10 x 3
   ISOA  pais_ing            pais_port        
   <chr> <chr>               <chr>            
 1 TGO   Togo                Ir               
 2 THA   Thailand            Tailândia        
 3 TJK   Tajikistan          Tajiquistão      
 4 TKL   Tokelau             Tokelau          
 5 TKM   Turkmenistan        Turcomenistão    
 6 TLS   East Timor          Timor Leste      
 7 TON   Tonga               Tonga            
 8 TTO   Trinidad and Tobago Trinidad e Tobago
 9 TUN   Tunisia             Tunísia          
10 TUR   Turkey              Peru             

Depois do Google Tradutor ter efetuado a tradução de texto, basta corrigir manualmente os erros que identificamos, tarefa mais fácil do que fazer todas as traduções uma por uma.


# corrigir traduções erradas
pais_isoa[indice, 3] <- "Togo"
pais_isoa[indice2, 3] <- "Turquia"

rmarkdown::paged_table(pais_isoa)

Embora o exemplo para utilização do pacote googleLanguageR tenha sido simples, fica clara a utilidade potencial do pacote para tradução de dados textuais.

Se você quiser trazer a correlação aqui construída para o R, pode fazê-lo da seguinte forma:


library(data.table)
git <- "https://raw.githubusercontent.com/mgcleaver/correlacoes/master/paises_isoa.txt"
df <- fread(git, encoding = "UTF-8")

  1. Cada país tem um código de três letras definido pelo padrão ISO 3166 da Organização Mundial para Padronização.

Citation

For attribution, please cite this work as

Cleaver (2019, July 31). Fulljoin: Tradução de dados textuais com googleLanguageR. Retrieved from https://www.fulljoin.com.br/posts/2019-07-31-traduo-de-dados-textuais-com-googlelanguager/

BibTeX citation

@misc{cleaver2019tradução,
  author = {Cleaver, Miguel},
  title = {Fulljoin: Tradução de dados textuais com googleLanguageR},
  url = {https://www.fulljoin.com.br/posts/2019-07-31-traduo-de-dados-textuais-com-googlelanguager/},
  year = {2019}
}