R可以将表情符号转换为等效的文本吗?

时间:2018-01-08 17:11:18

标签: r unicode encoding

昨天在我的问题中"Can R read html-encoded emoji characters?",用户rensa noted that

  

据我所知,在R控制台中没有打印表情符号的解决方案:它们总是以" U0001f600" (或者你有什么)但是,我上面描述的包可以帮助你在某些情况下绘制表情符号(我希望扩展ggflags以在某些时候显示任意的全彩表情符号)。他们还可以帮助您搜索表情符号以获取他们的代码,但他们无法获得代码AFAIK的名称。但也许您可以尝试将emojilib中的表情符号列表导入R并与数据框进行连接,如果您已将表情符号代码提取到列中,则获取英文名称。

这看起来如何?

(注意:我发布此问题的目的是为了立即回答,而不是将其发布在上面链接的问题中,因为它与该问题相关,但仍可能对其他人有用。)

1 个答案:

答案 0 :(得分:2)

下面的方法适用于将表情符号或unicode表示转换为名称。

我很高兴在CC0奉献下发布下面的代码段(即,将此实现放入公共域以供免费重用)。

# Get (MIT-licensed) emojilib data:
emoji_json_file <- "https://raw.githubusercontent.com/muan/emojilib/master/emojis.json"
json_data <- rjson::fromJSON(paste(readLines(emoji_json_file), collapse = ""))

get_name_from_emoji <- function(emoji_unicode, emoji_data = json_data){
  emoji_evaluated <- stringi::stri_unescape_unicode(emoji_unicode)

  # names(json_data)
  vector_of_emoji_names_and_characters <- unlist(
    lapply(json_data, function(x){
      x$char
    })
  )

  name_of_emoji <- attr(
    which(vector_of_emoji_names_and_characters == emoji_evaluated)[1],
    "names"
  )

  name_of_emoji
}

get_name_from_emoji("\\U0001f917")
# [1] "hugs"
get_name_from_emoji("") # An attempt actually pasting the hugs emoji in also works.
# [1] "hugs"