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)
}
我正在尝试对 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_ 的函数
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)
}