Подтвердить что ты не робот

Нормализация Юникода (форма C) в R: преобразовать все символы с акцентами в их однокодированные символы?

В Юникоде буквы с акцентами могут быть представлены двумя способами: самой подчеркнутой буквой и комбинацией голой буквы с акцентом. Например, é (+ U00E9) и e'(+ U0065 + U0301) обычно отображаются одинаково.

R отображает следующее (версия 3.0.2, Mac OS 10.7.5):

> "\u00e9"
[1] "é"
> "\u0065\u0301"
[1] "é"

Однако, конечно:

> "\u00e9" == "\u0065\u0301"
[1] FALSE

Есть ли функция в R, которая преобразует буквы с двумя символами Юникода в их односимвольную форму? В частности, здесь она рушится "\u0065\u0301" на "\u00e9".

Это было бы очень удобно обрабатывать большие количества строк. Кроме того, односимвольные формы могут быть легко преобразованы в другие кодировки через iconv - по крайней мере, для обычных символов Latin1 - и лучше обрабатываются plot.

Большое спасибо заранее.

4b9b3361

Ответ 1

Хорошо, похоже, что пакет был разработан для улучшения и упрощения инструментария манипуляции строкой в ​​R (наконец!). Он называется stringi и выглядит очень многообещающим. Его документация очень хорошо написана, и в частности я нахожу страницы encodings и гораздо более интересны, чем некоторые из стандартных R-документации по этому вопросу.

У него есть функции нормализации Unicode, которые я искал (здесь форма C):

> stri_trans_nfc('\u00e9') == stri_trans_nfc('\u0065\u0301')
[1] TRUE

Он также содержит умную функцию сравнения , которая объединяет эти вопросы нормализации и уменьшает боль, когда им приходится думать о них:

> stri_compare('\u00e9', '\u0065\u0301')
[1] 0
# i.e. equal ;
# otherwise it returns 1 or -1, i.e. greater or lesser, in the alphabetic order.

Благодаря разработчикам, Мареку Гаглоувски и Бартек Тартанусу, а также Курту Хорнику за информацию!