如何将表情符号与R正则表达式匹配? [英] How can I match emoji with an R regex?

查看:0
本文介绍了如何将表情符号与R正则表达式匹配?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想确定我的向量中包含表情符号的元素:

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中匹配表情符号?

推荐答案

我正在将编码转换为Utf-8,以便将emoji的值的Utf-8值与Utf-8中的remoji库中的所有emoji的值进行比较。我正在使用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

上述两种方法都不是完全证明,第一种方法假定向量中除emoji外没有任何ASCII字符,而第二种方法依赖remoji的库信息。如果库中不存在某个表情符号信息,则最后一个命令可能会生成FALSE而不是TRUE

最终编辑:

根据OP(@MichaelChirico)和@SymbolixAU的讨论。多亏了他们两个,看起来大写字母U的小打字错误有问题,新的正则表达式是xvect[grepl('[U{1F300}-U{1F6FF}]', xvect)]。Character类中的范围从F300到F6FF。当然,如果一个表情符号不在这个范围内,你可以把这个范围改成一个新的范围。这可能不是完整的列表,在一段时间内,这些范围可能会不断增加/更改。

这篇关于如何将表情符号与R正则表达式匹配?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆