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

时间:2016-02-27 13:14:41

标签: r twitter encoding utf-8 emoji

我正在尝试对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

但似乎emojis“\ 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”进行分析,因为它适用于法语特殊字母(à,é,è,ê,ë,û等)。

那么你知道我怎么能超越它吗?<​​/ p>

由于

2 个答案:

答案 0 :(得分:2)

如图所示,该字符串是无效的UTF-8。你有UTF-16编码的UTF-8。因此\xED\xA0\xBD是高代理U+D83D,而\xED\xB2\x83是低代理U+DC83

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

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

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

答案 1 :(得分:0)

我使用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 _&#39; s answer的函数。或直接使用表情符号字典,如proposed

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)
}