用replaceu emoji()替换R中的Emojis()函数因编码不同而不起作用-UTF8/Unicode?

用replaceu emoji()替换R中的Emojis()函数因编码不同而不起作用-UTF8/Unicode?,r,unicode,emoji,data-cleaning,sentiment-analysis,R,Unicode,Emoji,Data Cleaning,Sentiment Analysis,我正在尝试清理文本数据,并用文字替换表情符号,以便稍后进行情绪分析 因此,我正在使用textclean软件包中的replace_emoji函数。这应该用相应的单词替换所有表情符号 我使用的数据集是一个文本语料库,这也是我在下面的示例代码中使用tm软件包中的VCorpus函数的原因: text <- "text goes here bla bla <u+0001f926><u+0001f3fd><u+200d><u+2640><u+fe0

我正在尝试清理文本数据,并用文字替换表情符号,以便稍后进行情绪分析

因此,我正在使用textclean软件包中的
replace_emoji
函数。这应该用相应的单词替换所有表情符号

我使用的数据集是一个文本语料库,这也是我在下面的示例代码中使用tm软件包中的
VCorpus
函数的原因:

text <- "text goes here bla bla <u+0001f926><u+0001f3fd><u+200d><u+2640><u+fe0f>" #text with emojis

text.corpus <- VCorpus(VectorSource(text)) #Transforming into corpus
text.corpus <- tm_map(text.corpus, content_transformer(function(x) replace_emoji(x, emoji_dt = lexicon::hash_emojis)))  #This function should change Emojis into words

inspect(text.corpus[[1]]) #inspecting the corpus shows that the Unicode was NOT replaced with words

head(hash_emojis) #This shows that the encoding in the lexicon is different than the encoding in my text data. 
text我发现你的问题有问题。今天晚些时候,当你们读到我的答案时,我会把这个标记为副本

以我的例子:

library(stringi)
library(magrittr)

"text goes here bla bla <u+0001F600><u+0001f602>"  %>% 
  stri_replace_all_regex("<u\\+([[:alnum:]]{4})>", "\\\\u$1") %>% 
  stri_replace_all_regex("<u\\+([[:alnum:]]{5})>", "\\\\U000$1") %>% 
  stri_replace_all_regex("<u\\+([[:alnum:]]{6})>", "\\\\U00$1") %>% 
  stri_replace_all_regex("<u\\+([[:alnum:]]{7})>", "\\\\U0$1") %>% 
  stri_replace_all_regex("<u\\+([[:alnum:]]{8})>", "\\\\U$1") %>% 
  stri_replace_all_regex("<u\\+([[:alnum:]]{1})>", "\\\\u000$1") %>% 
  stri_replace_all_regex("<u\\+([[:alnum:]]{2})>", "\\\\u00$1") %>% 
  stri_replace_all_regex("<u\\+([[:alnum:]]{3})>", "\\\\u0$1") %>% 
  stri_unescape_unicode() %>% 
  stri_enc_toutf8() %>% 
  textclean::replace_emoji()

[1] "text goes here bla bla grinning face face with tears of joy "
库(stringi)
图书馆(magrittr)
“文本在此处显示bla bla”%>%
stri\u替换所有正则表达式(“,“\\\\u$1”)%>%
stri\U替换所有正则表达式(“,”\\\\U000$1”)%>%
stri\U替换所有正则表达式(“,”\\\\U00$1”)%>%
stri\U replace\U all\U正则表达式(“,“\\\\U0$1”)%>%
stri\U替换所有正则表达式(“,“\\\\U$1”)%>%
stri\U替换所有正则表达式(“,”\\\\u000$1”)%>%
stri\U替换所有正则表达式(“,”\\\\u00$1”)%>%
stri\U replace\U all\U正则表达式(“,“\\\\u0$1”)%>%
stri_unescape_unicode()%>%
stri_enc_toutf8()%>%
textclean::replace_emoji()
[1] “文字传到这里,布拉布拉咧嘴笑着,脸上带着喜悦的泪水”
现在请注意unicode表示。示例答案的大写字母为“U”,我将其改为小写字母“U”,以反映您的示例

要组合所有内容:

# create a function to use within tm_map
unicode_replacement <- function(text) {
  text %>% 
    stri_replace_all_regex("<u\\+([[:alnum:]]{4})>", "\\\\u$1") %>% 
    stri_replace_all_regex("<u\\+([[:alnum:]]{5})>", "\\\\U000$1") %>% 
    stri_replace_all_regex("<u\\+([[:alnum:]]{6})>", "\\\\U00$1") %>% 
    stri_replace_all_regex("<u\\+([[:alnum:]]{7})>", "\\\\U0$1") %>% 
    stri_replace_all_regex("<u\\+([[:alnum:]]{8})>", "\\\\U$1") %>% 
    stri_replace_all_regex("<u\\+([[:alnum:]]{1})>", "\\\\u000$1") %>% 
    stri_replace_all_regex("<u\\+([[:alnum:]]{2})>", "\\\\u00$1") %>% 
    stri_replace_all_regex("<u\\+([[:alnum:]]{3})>", "\\\\u0$1") %>% 
    stri_unescape_unicode() %>% 
    stri_enc_toutf8()
}

library(tm)
library(textclean)
text.corpus <- VCorpus(VectorSource(text)) #Transforming into corpus
text.corpus <- tm_map(text.corpus, content_transformer(unicode_replacement))
text.corpus <- tm_map(text.corpus, content_transformer(function(x) replace_emoji(x, emoji_dt = lexicon::hash_emojis)))  

inspect(text.corpus[[1]]) 

<<PlainTextDocument>>
Metadata:  7
Content:  chars: 92

text goes here bla bla <f0><9f><a4><a6><f0><9f><8f><bd><e2><80><8d> female sign <ef><b8><8f>
#创建要在tm#U地图中使用的函数
unicode_替换%
stri\u替换所有正则表达式(“,“\\\\u$1”)%>%
stri\U替换所有正则表达式(“,”\\\\U000$1”)%>%
stri\U替换所有正则表达式(“,”\\\\U00$1”)%>%
stri\U replace\U all\U正则表达式(“,“\\\\U0$1”)%>%
stri\U替换所有正则表达式(“,“\\\\U$1”)%>%
stri\U替换所有正则表达式(“,”\\\\u000$1”)%>%
stri\U替换所有正则表达式(“,”\\\\u00$1”)%>%
stri\U replace\U all\U正则表达式(“,“\\\\u0$1”)%>%
stri_unescape_unicode()%>%
stri_enc_toutf8()
}
图书馆(tm)
图书馆(textclean)

text.corpus
编码的问题
/在对象中存储表情符号:-(.讨厌这些问题,因为它们可能依赖于操作系统。如果我测试“text goes here bla bla hey@phiver。是的,没错!我也尝试过各种变体,所有这些都有效-但正如你提到的,出于某种原因,它不采用表情符号的unicode表示形式(不幸的是,这是我数据集中的表示形式)。因此,我还考虑将存储在lexicon/hash_emojis数据集中的编码转换为unicode,以便它能够识别我数据中的表示形式。但是,我也无法做到这一点。Hi@phiver-你真的帮了大忙,又一次拯救了这一天!:-)非常感谢!它工作得非常好。