【问题标题】:How can I replace emojis with text and treat them as single words?如何用文本替换表情符号并将它们视为单个单词?
【发布时间】:2021-08-07 02:29:40
【问题描述】:

我必须使用 R 对包含表情符号的文本片段进行主题建模。使用 replace_emoji()replace_emoticon 函数让我分析它们,但结果存在问题。

红心 emoji 被翻译为“红心 ufef”。然后在分析过程中分别处理这些词并影响结果。

像“心”这样的词可以有非常不同的含义,就像“红心 ufef”和“破碎的心”一样 replace_emoji_identifier() 函数也无济于事,因为标识符使分析变得困难。

使用dput()可重现的虚拟数据集(包括步骤force to lowercase

Emoji_struct <- c(
      list(content = "???????? wow", "???? look at that", "????this makes me angry????", "????❤\ufe0f, i love it!"),  
      list(content = "????????", "???? thanks for helping",  "???? oh no, why? ????", "careful, challenging ❌❌❌")
)

当前编码(data_orig是几个文件的列表):

library(textclean)
#The rest should be standard r packages for pre-processing

#pre-processing:
data <- gsub("'", "", data) 
data <- replace_contraction(data)
data <- replace_emoji(data) # replace emoji with words
data <- replace_emoticon(data) # replace emoticon with words
data <- replace_hash(data, replacement = "")
data <- replace_word_elongation(data)
data <- gsub("[[:punct:]]", " ", data)  #replace punctuation with space
data <- gsub("[[:cntrl:]]", " ", data) 
data <- gsub("[[:digit:]]", "", data)  #remove digits
data <- gsub("^[[:space:]]+", "", data) #remove whitespace at beginning of documents
data <- gsub("[[:space:]]+$", "", data) #remove whitespace at end of documents
data <- stripWhitespace(data)

期望的输出:

[1] list(content = c("fire fire wow", 
                     "facewithopenmouth look at that", 
                     "facewithsteamfromnose this makes me angry facewithsteamfromnose", 
                     "smilingfacewithhearteyes redheart \ufe0f, i love it!"), 
         content = c("smilingfacewithhearteyes smilingfacewithhearteyes", 
                     "smilingfacewithsmilingeyes thanks for helping", 
                     "cryingface oh no, why? cryingface", 
                     "careful, challenging crossmark crossmark crossmark"))

有什么想法吗?小写也可以。 最好的祝福。注意安全。保持健康。

【问题讨论】:

    标签: r emoji topic-modeling data-preprocessing


    【解决方案1】:

    回答

    replace_emoji 中的默认转换表替换为删除了空格/标点符号的版本:

    hash2 <- lexicon::hash_emojis
    hash2$y <- gsub("[[:space:]]|[[:punct:]]", "", hash2$y)
    
    replace_emoji(Emoji_struct[,1], emoji_dt = hash2)
    

    示例

    单个字符串:

    replace_emoji("wow!? that is cool!", emoji_dt = hash2)
    #[1] "wow! facewithopenmouth that is cool!"
    

    字符向量:

    replace_emoji(c("1: ?", "2: ?"), emoji_dt = hash2)
    #[1] "1: smilingfacewithsmilingeyes "
    #[2] "2: smilingfacewithhearteyes "
    

    列表:

    list("list_element_1: ?", "list_element_2: ❌") %>%
      lapply(replace_emoji, emoji_dt = hash2)
    #[[1]]
    #[1] "list_element_1: fire "
    #
    #[[2]]
    #[1] "list_element_2: crossmark "
    

    基本原理

    要将表情符号转换为文本,replace_emoji 使用lexicon::hash_emojis 作为转换表(哈希表):

    head(lexicon::hash_emojis)
    #              x                        y
    #1: <e2><86><95>            up-down arrow
    #2: <e2><86><99>          down-left arrow
    #3: <e2><86><a9> right arrow curving left
    #4: <e2><86><aa> left arrow curving right
    #5: <e2><8c><9a>                    watch
    #6: <e2><8c><9b>           hourglass done
    

    这是data.table 类的对象。我们可以简单地修改这个哈希表的y 列,以便我们删除所有的空格和标点符号。请注意,这还允许您添加新的 ASCII 字节表示和随附的字符串。

    【讨论】:

    • 这适用于虚拟数据集。问题是我得到了一个混合了文字和表情符号的列表。你的代码在那里不工作,或者我不能让它工作,因为它返回Error in data[, 1] : incorrect number of dimensions你有解决方案吗?
    • 您能否提供一个新的虚拟集来更好地代表实际数据?
    • 好了。现在应该可以解决问题了...您的解决方案将所有单词变成了一个大词,而R不会让我将其拆分成单词...而且我不太明白如何在您的中使用lapply解决方案。
    • 我根据新要求更新了答案,并提供了有关如何实施新表情符号的建议。
    • 谢谢。 :) 这就是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 2019-09-25
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    相关资源
    最近更新 更多