我想确定我的载体中哪些元素包含表情符号:
x = c('', 'no', '', '', 'no', '', '䨺', '감사')
x
# [1] "\U0001f602" "no" "\U0001f379" "\U0001f600" "no" "\U0001f61b" "䨺" "감사"
相关帖子仅涵盖其他语言,并且由于大多数是指专业图书馆,我无法想出一种翻译为R的方法:
第二个看起来非常有希望,但唉(不是通过提供perl = TRUE
来修复):
x[grepl('[\u{1F600}-\u{1F6FF}]', x)]
错误:无效\ u {xxxx}序列(第1行)
其他问题也有类似的问题。我们如何在R中匹配表情符号?
答案 0 :(得分:4)
我正在将编码转换为UTF-8,以将表情符号值的UTF-8值与remoji
库中UTF-8中的所有表情符号值进行比较。我正在使用stringr
库来查找向量中表情符号的位置。一个人可以自由使用grep或任何其他功能。
第一种方法:
library(stringr)
xvect = c('', 'no', '', '', 'no', '')
Encoding(xvect) <- "UTF-8"
which(str_detect(xvect,"[^[:ascii:]]")==T)
# [1] 1 3 4 6
在这种情况下,1,3,4和6是表情符号的字符。
已编辑:
第二种方法:
使用devtools使用以下命令安装名为remoji
的包,因为我们已经将表情符号项转换为 UTF -8。我们现在可以比较表情符号库中存在的所有表情符号的UTF- 8 值。使用trimws
删除空格
install.packages("devtools")
devtools::install_github("richfitz/remoji")
library(remoji)
emj <- emoji(list_emoji(), TRUE)
xvect %in% trimws(emj)
输出:
which(xvect %in% trimws(emo))
# [1] 1 3 4 6
上述两种方法都不是完全证据,第一种方法假设在矢量中没有除表情符号之外的任何ascii字符而第二种方法依赖于{{的库信息1}}。如果库中不存在某个表情符号信息,则最后一个命令可能产生FALSE而不是TRUE 。
最终修改:
根据OP( @MichaelChirico )和 @SymbolixAU 之间的讨论。感谢他们两个似乎是资本U的小错字的问题。新的正则表达式是remoji
。字符类中的范围取自F300到F6FF。如果表情符号位于此范围之外,则可以将此范围更改为新范围。这可能不是完整的列表,并且在一段时间内这些范围可能会不断增加/变化。