【问题标题】:Get R to keep UTF-8 Codepoint representation获取 R 以保持 UTF-8 代码点表示
【发布时间】:2017-11-11 21:51:12
【问题描述】:

此问题与utf-8 package for R 有关。我有一个奇怪的问题,我希望我正在使用的数据集中的表情符号保持代码点表示(即作为'\U0001f602')。我想使用Data Combine package 中的'FindReplace' 函数将UTF-8 编码转换为dataset of YouTube comments 中表情符号的散文描述(使用我提供的字典here)。唯一的问题是,当我将输出“保存”为 R 中的对象时,utf8_encode 生成的漂亮 utf-8 编码可以使用我的字典,它会消失...

首先我要稍微调整一下字典:

emojis$YouTube <- tolower(emojis$Codepoint)

emojis$YouTube <- gsub("u\\+","\\\\U000", emojis$YouTube)

转为字符以便能够使用utf8_encode:

emojimovie$test <- as.character(emojimovie$textOriginal)

这很好用,提供 \U0001f595 (等)的输出,当它在控制台中“打印”时可以与字典条目匹配。

utf8_encode(emojimovie$test)

但是,当我这样做时:

emojimovie$text2 <- utf8_encode(emojimovie$test)

然后:

emoemo <- FindReplace(data = emojimovie, Var = "text2", replaceData = emojis, from = "YouTube", to = "Name", exact = TRUE)

我得到了所有的 NA。当我使用 View 查看 $text2 中的输出时,我没有看到 \U0001f595,而是看到了实际的表情符号。我认为这就是FindReplace 函数不起作用的原因——当它被保存到一个对象时,它只是再次被表示为表情符号并且该函数找不到任何匹配项。然而,当我尝试gsub("\U0001f602", "lolface", emojimovie$text2) 时,我实际上可以匹配和替换东西,但我不想对所有大约 2,000 个左右的表情符号都这样做......我已经尝试尽可能多地阅读关于 utf- 的内容8,但我不明白为什么会这样。我难住了! :P

【问题讨论】:

    标签: r encoding utf-8


    【解决方案1】:

    如上所示,您正在尝试将 UTF-8 表情符号转换为文本版本。我会建议去另一个方向。类似的东西

    emojis <- read.csv('Emoji Dictionary 2.1.csv', stringsAsFactors = FALSE)
    
    # change U+1F469 U+200D U+1F467 to \U1F469\U200D\U1F467
    escapes <- gsub("[[:space:]]*\\U\\+", "\\\\U", emojis$Codepoint)
    
    # convert to UTF-8 using the R parser
    codes <- sapply(parse(text = paste0("'", escapes, "'"),
                          keep.source = FALSE), eval)
    

    这会将 U+1F469 等文本表示形式转换为 UTF-8 字符串。然后,您可以在原始数据中搜索这些字符串。

    注意:如果您使用的是 Windows,请确保您拥有最新版本的 R;在旧版本中,解析器会为您提供错误的字符串结果,例如 "\U1F469"

    utf8::utf8_encode 应该仅在您使用 UTF-8 并尝试将其打印到屏幕上时使用。

    【讨论】:

    • 是的,这行得通!太感谢了 - !从来没有想过要另辟蹊径:P 再次感谢!
    猜你喜欢
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多