【问题标题】:R tweets with emojisR 带有表情符号的推文
【发布时间】:2019-04-03 21:58:41
【问题描述】:

我从 twitter API 和包 rtweet 中删除了推文,但我不知道如何处理带有表情符号的文本,因为它们的格式为 '\U0001f600' 并且我尝试的所有正则表达式代码到现在都失败了.我什么也得不到。

例如

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

给我假

 grepl('000',text)

也给我 FALSE。

另一个问题是他们经常坚持之前的单词(例如i am here\U0001f600

那么我怎样才能让 R 识别这种格式的表情符号呢?对于该格式的任何表情符号,我可以在 grepl 中添加什么内容将返回 TRUE?

【问题讨论】:

  • 没有U,没有000,见ideone.com/LvqDEj。有????。你到底想用这些字符/字符串做什么?
  • 如果你想用 rtweet 去掉这些字符,你可以使用 rtweet::plain_tweets(name of your text column)
  • @WiktorStribiżew 我想用它们做很多事情(计算它们,订购它们,看看哪些发生最多)但首先我想摆脱它们,因为它们看起来不像在我的 wordcloud 中很好。
  • @HarroCyranka 我想保留它们并隔离它们,因为我想稍后研究它们
  • @WiktorStribiżew 我的问题有什么无法回答的?我只是想知道如何将表情符号从文本中分离出来......

标签: r regex twitter


【解决方案1】:

在 R 中,大多数东西都有一个包。在这种情况下,textclean 附带了 lexicon 包,其中包含很多字典。使用 textclean 您可以使用 2 个函数,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

【讨论】:

    【解决方案2】:

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

    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 代码点没有像我的情况 () 那样分隔,您应该将正则表达式从 "&lt;U\\+(\\S+)&gt;" 更改为 "U(\\S+)" 。您应该在这里小心,因为如果在代码点之后出现空格字符,这将正常工作。如果您在代码点之前和之后都附加了单词,则它必须更具体并指出组成它的字符数,例如"U(....)"

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-13
      • 2021-10-11
      • 2023-03-04
      • 2012-12-09
      • 2018-10-28
      • 2020-05-20
      • 2014-09-29
      • 2021-08-07
      • 1970-01-01
      相关资源
      最近更新 更多