【问题标题】:remove emoji from string in R从R中的字符串中删除表情符号
【发布时间】:2016-11-08 00:11:57
【问题描述】:

我有一个推文列表,其中许多包含需要删除的表情符号。在 R 中执行此操作的最有效方法是什么?

我尝试了以下方法,该方法应该将所有以“\”开头的单词替换为空格,但我收到此错误

some_tweets <- gsub("\\\w+ *", "", some_tweets)
Error: '\w' is an unrecognized escape in character string starting ""\\\w"

以下是数据示例:

> head(some_tweets)
[1] "ஆமா நான் பாக்கவே இல்லை \U0001f625\U0001f625\U0001f625"                               
[2] "எனக்கு அனுப்பலாமே \U0001f913\U0001f913\U0001f913"                                  
[3] "அவர் ஏன்டா ப்ளாக் பண்ணார் \U0001f602\U0001f602\U0001f602\U0001f602"                        
[4] "ஆமா"                                                                           
[5] "RT : சும்மார்றா சுன்னி.. ~ ஆதவன்"                                                      
[6] "கைலியை எல்லாம் லூஸ் பண்ணிகிட்டு உக்காந்து இருக்கேன் அடுத்து போடுங்கயா \U0001f608\U0001f608\U0001f608"


> dput(head(some_tweets))
c("ஆமா நான் பாக்கவே இல்லை \U0001f625\U0001f625\U0001f625", 
"எனக்கு அனுப்பலாமே \U0001f913\U0001f913\U0001f913", 
"அவர் ஏன்டா ப்ளாக் பண்ணார் \U0001f602\U0001f602\U0001f602\U0001f602", 
"ஆமா", "RT : சும்மார்றா சுன்னி.. ~ ஆதவன்", 
"கைலியை எல்லாம் லூஸ் பண்ணிகிட்டு உக்காந்து இருக்கேன் அடுத்து போடுங்கயா \U0001f608\U0001f608\U0001f608"
)

【问题讨论】:

  • 您只是在使用gsub 而没有使用正则表达式。您需要使用正则表达式。
  • \\\\w+ * 工作吗?
  • 我试过\\\\w+ *但它不起作用
  • 输出应该是什么样的?
  • 它应该保留所有的泰米尔语字符,而所有的表情符号(以“\U”开头的应该被删除

标签: r regex twitter unicode substitution


【解决方案1】:

查看regular-expressions.info on Unicode,它对正则表达式中的 Unicode 进行了详尽的解释。这里重要的部分是您可以将 Unicode 字符与\p{xx} 匹配,其中xx 是它们所在类的名称(例如L 用于字母,M 用于标记)。在这里,您的表情符号似乎在 SoOther_Symbol 的简写)和 CnUnassigned 的简写)类中,因此我们可以将它们替换为:

gsub('\\p{So}|\\p{Cn}', '', some_tweets, perl = TRUE)
## [1] "ஆமா நான் பாக்கவே இல்லை "                                       
## [2] "எனக்கு அனுப்பலாமே "                                           
## [3] "அவர் ஏன்டா ப்ளாக் பண்ணார் "                                       
## [4] "ஆமா"                                                        
## [5] "RT : சும்மார்றா சுன்னி.. ~ ஆதவன்"                               
## [6] "கைலியை எல்லாம் லூஸ் பண்ணிகிட்டு உக்காந்து இருக்கேன் அடுத்து போடுங்கயா "

请注意,您需要设置perl = TRUE,因为在 R 的默认 POSIX 1003.2 正则表达式中未启用此表示法;见?base::regex?grep

【讨论】:

  • 感谢 alistaire -- 我遇到了同样的问题,您的解决方案运行良好。
  • 感谢您分享详细正则表达式信息的链接,以便我可以开始修补自己的解决方案。
【解决方案2】:

您可以通过这种方式轻松地从 R 中的字符串中删除所有表情符号:

library(rtweet) # To get emojis dataset
emojis # Look at emojis

library(stringr)
str_remove_all(string = emojis$code, pattern = '[:emoji:]')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 2021-06-13
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2018-01-28
    相关资源
    最近更新 更多