Преобразование из NCR в Unicode в R - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть несколько html файлов (я работаю с ними как с обычными текстами), которые используют десятичный NCR для кодирования специальных символов. Есть ли способ их удобного преобразования в Unicode с использованием R?
Коды NCR не всегда имеют однозначное соответствие с Unicode, и это становится довольно запутанным, поскольку ѣ равно не \u1123, а \u0463:

> stri_unescape_unicode("\u1123")
[1] "ᄣ"

и

> stri_unescape_unicode("\u0463")
[1] "ѣ"

1 Ответ

1 голос
/ 02 февраля 2020

1123 - десятичный эквивалент шестнадцатеричного 0463, а Unicode использует шестнадцатеричный. Таким образом, чтобы получить преобразование, вам нужно вычеркнуть не-ди git символы, преобразовать цифры в шестнадцатеричные символы, вставить «\ u» перед ними, затем использовать stri_unescape_unicode.

Эта функция будет делать все это:

ncr2uni <- function(x)
{
  # Strip out non-digits and and convert remaining numbers to hex
  x <- as.hexmode(as.numeric(gsub("\\D", "", x)))

  # Left pad with zeros to length 4 so escape sequence is recognised as Unicode 
  x <- stringi::stri_pad_left(x, 4, "0")

  # convert to Unicode
  stringi::stri_unescape_unicode(paste0("\\u", x))
}

Теперь вы можете сделать

ncr2uni(c("&#1123;", "&#1124;", "&#1125;"))
# [1] "ѣ" "Ѥ" "ѥ"
...