我从twitter API和程序包rtweet
中删除了推文,但我不知道如何使用带有表情符号的文本,因为它们的格式为'\ U0001f600',而我尝试过的所有正则表达式代码都失败了到现在。我什么都收不到。
例如
text = 'text text. \U0001f600'
grepl('U',text)
给我假
grepl('000',text)
也给我假。
另一个问题是它们经常被粘贴在单词之前(例如i am here\U0001f600
)
那么我如何使R识别这种格式的表情符号?对于该格式的任何表情符号,我可以放入grepl中返回什么为TRUE的东西?
答案 0 :(得分:1)
在R中,大多数情况下倾向于打包。在这种情况下,textclean
及其附带的lexicon
软件包中有很多字典。使用textclean,您可以使用两个功能,replace_emoji
和replace_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]"
代表十六进制数字。