如何解决如何用文本替换表情符号并将它们视为单个单词?
我必须使用 R 对包含表情符号的文本片段进行主题建模。使用 replace_emoji()
和 replace_emoticon
函数让我可以分析它们,但结果存在问题。>
红心表情符号被翻译为“红心ufef”。然后在分析过程中分别处理这些词并损害结果。
像“heart”这样的术语可以有非常不同的含义,如“red heart ufef”和“broken heart”所见
函数 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,content = c("smilingfacewithhearteyes smilingfacewithhearteyes","smilingfacewithsmilingeyes thanks for helping","cryingface oh no,why? cryingface",challenging crossmark crossmark crossmark"))
有什么想法吗?小写也可以。 最好的祝福。注意安全。保持健康。
解决方法
回答
用删除了空格/标点符号的版本替换 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 字节表示和伴随的字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。