R表情符号推文

时间:2018-10-30 19:17:39

标签: r regex twitter

我从twitter API和程序包rtweet中删除了推文,但我不知道如何使用带有表情符号的文本,因为它们的格式为'\ U0001f600',而我尝试过的所有正则表达式代码都失败了到现在。我什么都收不到。

例如

 text = 'text text. \U0001f600'
 grepl('U',text)

给我假

 grepl('000',text)

也给我假。

另一个问题是它们经常被粘贴在单词之前(例如i am here\U0001f600

那么我如何使R识别这种格式的表情符号?对于该格式的任何表情符号,我可以放入grepl中返回什么为TRUE的东西?

2 个答案:

答案 0 :(得分:1)

在R中,大多数情况下倾向于打包。在这种情况下,textclean及其附带的lexicon软件包中有很多字典。使用textclean,您可以使用两个功能,replace_emojireplace_emoji_identifier

text = c("text text. \U0001f600", "i am here\U0001f600")

# replace emoji with identifier:
textclean::replace_emoji_identifier(text)
[1] "text text. lexiconvygwtlyrpywfarytvfis " "i am here lexiconvygwtlyrpywfarytvfis " 

# replace emoji with text representation
textclean::replace_emoji(text)
[1] "text text. grinning face " "i am here grinning face " 

接下来,您可以使用sentimentr对表情符号进行情感评分或进行文本分析quanteda。如果您只想检查预期输出中的状态,则:

grepl("lexicon[[:alpha:]]{20}", textclean::replace_emoji_identifier(text))
[1] TRUE TRUE

答案 1 :(得分:0)

您的问题是您在代码中使用了单个字符\

text = 'text text. \U0001f600'

确实应该是\\

text = 'text text. \\U0001f600'

我在使用rtweet库时也有类似的经历。

就我而言,这些推文带来了一些Unicode代码点,而不仅仅是表情符号,并且具有以下格式:"some text<U+code-point>"。在这种情况下,我所做的就是将代码指向其图形表示“转换”:

library(stringi)

#I use gsub() to replace "<U+code-point>" with "\\ucode-point", the appropriate format
# And stri_unescape_unicode() to un-escape all Unicode sequences    
stri_unescape_unicode(gsub("<U\\+(\\S+)>",
                                   "\\\\u\\1", #replace by \\ucode-point
                                   "some text with #COVID<U+30FC>19"))
#[1] "some text with #COVIDー19"

如果未按我的情况(<>)分隔Unicode代码点,则应将正则表达式从"<U\\+(\\S+)>"更改为"U(\\S+)"。您在此处应格外小心,因为如果在代码点后出现空格字符,这将可以正常工作。如果您在代码点之前和之后都附加了单词,则它必须更加具体,并指出组成它的字符数,例如"U(....)"

您可以尝试使用“字符类”或仅指定十六进制数字"U([A-Fa-f0-9]+)"来完善此正则表达式。

请注意,在RStudio控制台中不会显示表情符号,您可以应用此功能,但要查看表情符号,必须为此目的使用R库。但是,可以看到其他字符:"#COVID<U+30FC>19"在RStudio控制台中显示为"#COVIDー19"

编辑:实际上,当"\\S+"这样的连续Unicode代码点对我来说,"<U+0001F926><U+200D><U+2642>"不起作用。在这种情况下,它仅替换了第一次出现的内容,我没有深入研究,只是将正则表达式更改为"<U\\+([A-Fa-f0-9]+)>""[A-Fa-f0-9]"代表十六进制数字。