Pessoal, eu tô tratando uma base que possui nomes de todos os países, e estou tendo problemas.
Meu objetivo inicialmente seria organizar os nomes pra fazer algumas contagens e filtragens (baseadas em outras variáveis da base), mas aí eu comecei a perceber q isso não funciona muito bem porque tenho nomes asiáticos e nomes escritos em línguas que o R não parece lidar muito bem (por exemplo, fui tentar fazer contagem de letras de nomes árabes e ele me retornou 0).
Queria saber se alguém tem algum método que usa para casos parecidos, ou tenha alguma sugestão de material que eu possa seguir.
O link para a base é esse:
https://drive.google.com/file/d/1hCnTycdcjT4n6oYtaxE1mzf2uEVch2NR/view?usp=sharing
E o código até agora é este:
## Adicionando primeiro nome de autores
df_autores_f_l <- data.table::fread("df_gist.csv") %>%
dplyr::select(id, authors_f = authors, authors_l = `authors/lastname`) %>%
dplyr::filter(authors_f != "", authors_f != "vazio")
autores_fn <- df_autores_f_l$authors_f
## Separa em uma lista de mais de um elemento
autores_fn_split <- autores_fn %>%
stringr::str_split(., '\\|')
rm(autores_fn, df_autores)
## Agora a ideia seria agrupar os nomes, para adicionar um ponto ao primeiro nome. Ao final seria: Maria Luiza -> M. L.
## Uso str_to_title porque alguns nomes estão com todas as letras em maiúsculo. Ex: CRISTINA SILVA -> Cristina Silva
autores_fn_split_ <- lapply(autores_fn_split, function(x) stringr::str_to_title(x))
## Depois seleciono apenas as iniciais de cada nome. Seguindo o exemplo anterior: Cristina Silva -> C S
autores_fn_split__ <- lapply(autores_fn_split_, function (x) stringr::str_extract_all(x, stringr::regex("[:upper:]")))
## Agora temos uma lista de listas, ao invés de uma lista de caractéres, cada elemento da lista é um autor
## Caso o autor possua mais de um primeiro nome, ele terá os elementos encadeados em uma string (Ex: "C S").
## A ideia é que fique, ao final, seguindo o exemplo: C S -> C. S. (para cada autor)
#autores_fn_split___ <- lapply(autores_fn_split__, function (x) paste0(x, "."))
# Acima não deu certo, porque existem autores que possuem mais de um nome, então só adicionar o ponto ao final não resolve.
# Ex: C S -> C S.
i=1
j=1
debug = F
for(i in 1:length(autores_fn_split__)){
for(j in 1:length(autores_fn_split__[[i]])){
if(autores_fn_split__[[i]][[j]] > 1){
if(debug){
print(paste0("i = ", i))
print(paste0("j = ", j))
print(autores_fn_split__[[i]][[j]])
}
}
}
}
Parei por aqui porque comecei a ter problemas com nomes árabes, mas teria problema com nomes asiáticos também, devido ao uso de outros tipos de alfabetos usados.