我正在尝试对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>
由于
答案 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)
}