R 中的表情符号 [UTF-8 编码]

Emoji in R [UTF-8 encoding]

我正在尝试对 R 进行表情符号分析。 我在有表情符号的地方存储了一些推文。

这是我要分析的推文之一:

> tweetn2
[1] "Programme du week-end: \xed\xa0\xbd\xed\xb2\x83\xed\xa0\xbc \xed\xbe\xb6\xed\xa0\xbc 
    \xed\xbd\xbb\xed\xa0\xbc\xed\xbd\xbb\xed\xa0\xbc \xed\xbd\xbb\xed\xa0\xbc\xed\xbd\xbb"

为了确保我有 "UTF-8":

> Encoding(tweetn2)
[1] "UTF-8

” 现在,当我尝试识别某些字符时,它无法正常工作

> grepl("\xed",tweetn2)
[1] FALSE

> grepl("xed",tweetn2)
[1] FALSE

但表情符号“\xed\xa0\xbd”似乎不是"UTF-8"编码,因为我在写时收到错误消息:

> str(tweetn2)
Error in str.default(tweetn2) : invalid multibyte string, element 1

我找到了一种使用 iconv( ) 函数和 "ASCII" 编码的解决方案:
http://www.r-bloggers.com/emoticons-decoder-for-social-media-sentiment-analysis-in-r/

但我想继续使用 "UTF-8" 进行分析,因为它适用于法语特殊字母(à、é、è、ê、ë、û 等)

那么你知道我怎样才能超越它吗?

谢谢

如所示,该字符串是无效的 UTF-8。你所拥有的是用 UTF-8 编码的 UTF-16。所以\xED\xA0\xBD就是高代理U+D83D, -- and \xED\xB2\x83 is the low surrogate U+DC83

如果你应用神奇的 High,Low -> Codepoint formula,你最终会得到实际的代码点:

(0xD83D - 0xD800) * 0x400 + 0xDC83 - 0xDC00 + 0x10000 = 0x1F483

您会看到这是 dancer emoji。不幸的是,我没有给你建议,因为我对 R 不太熟悉。但我可以说你肯定想让自己处于这种数据被双重编码的位置!希望这能帮助您朝着正确的方向前进。

我使用 iconv(tweet, 'UTF-8', 'latin1', 'byte') 来保留带波浪号的字符:

> tweetn2
[1] "Prógrämmè dü week-eñd: \xed��\xed�\u0083\xed��\xed��\xed��\xed��\xed��\xed��\xed��\xed�� "
> iconv(tweetn2, 'UTF-8', 'latin1', 'byte')
[1] "Prógrämmè dü week-eñd: <ed><a0><bd><ed><b2><83><ed><a0><bc><ed><bd><bb><ed><a0><bc><ed><bd><bb><ed><a0><bc><ed><bd><bb><ed><a0><bc><ed><bd><bb> "

至于表情符号解码,我建议使用实现 nj_ 的函数 . Or directly using an emoji dictionary like the one I

unicode2hilo <- function(unicode){
   hi = floor((unicode - 0x10000)/0x400) + 0xd800
   lo = (unicode - 0x10000) + 0xdc00 - (hi-0xd800)*0x400
   hilo = paste('0x', as.hexmode(c(hi,lo)), sep = '')
   return(hilo)
}

hilo2unicode <- function(hi,lo){
   unicode = (hi - 0xD800) * 0x400 + lo - 0xDC00 + 0x10000 
   unicode = paste('0x', as.hexmode(unicode), sep = '')
   return(unicode)
}