Упрощение символов с орнаментом в R

У меня есть имена некоторых музыкальных исполнителей, с которыми я работаю в рамках Spotify API. У меня возникли проблемы с некоторыми строками из-за акцентов персонажей. Я плохо разбираюсь в кодировке символов.

Я предоставлю больше контекста чуть ниже, но, по сути, мне интересно, есть ли в R способ «упростить» символы с помощью украшений.

По сути, меня интересует, есть ли функция, которая будет принимать c("ë", "ö") в качестве входных данных и возвращать c("e", "o"), удаляя украшения с символов.


Я не думаю, что смогу создать воспроизводимый пример из-за проблем с аутентификацией API, но для некоторого контекста, когда я пытаюсь запустить:

artistName <- "Tiësto"
GET(paste0("https://api.spotify.com/v1/search?q=", 
           artistName,
           "&type=artist"), 
    config(token = token))

В API отправляется следующее:

https://api.spotify.com/v1/search?q=Tiësto&type=artist

Возвращает мне ошибку 400 bad request. Я пытаюсь изменить строки, которые я передаю функции GET, чтобы получить полезный результат.

Редактировать: я не ищу решение типа gsub, так как оно зависит от того, как я предвосхищаю виды акцентированных символов, которые могут появиться в моих данных. Мне интересно, есть ли уже функция, которая выполняет такой перевод между разными кодировками символов.


person Ross    schedule 15.08.2017    source источник


Ответы (2)


Вот что я нашел, и может работать для вас. Проще и удобнее применять к любой форме данных.

> artistName <- "Tiësto"
> iconv(artistName, "latin1", "ASCII//TRANSLIT")
[1] "Tiesto"
person Sagar    schedule 15.08.2017
comment
Это решение приятно и удобно, если оно работает в системе OP, но оно зависит от платформы, поэтому может не работать для всех (на моем Mac это приводит к "Ti\"esto"). - person Oriol Mirosa; 15.08.2017
comment
@OriolMirosa - не знал об этом. Спасибо за ваш комментарий. - person Sagar; 15.08.2017

На основании ответов на этот вопрос можно сделать следующее:

artistName <- "Tiësto"

removeOrnaments <- function(string) {
  chartr(
    "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ",
    "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy",
    string
  )
}

removeOrnaments(artistName)

# [1] "Tiesto"
person Oriol Mirosa    schedule 15.08.2017