2017-08-06 149 views
2

在R分析感伤分析的Facebook评论。表情符号在<>符号之间的文本中编码。R - 如何分割文本和标点符号以及异常?

实施例:

"Jesus te ama!!! <U+2764> Ou não...?<U+1F628> (fé em stand by)" 

<U+2764><U+1F628>(分别为重黑色心脏和恐惧的脸, )是表情符号。

因此,除了表情符号代码,我需要分割文字/数字和标点/符号。 我所做的,使用GSUB功能,这一点:

a1 <- "([[:alpha:]])([[:punct:]])" 
a2 <- "([[:punct:]])([[:alpha:]])" 
b <- "\\1 \\2" 
gsub(a1, b, gsub(a2, b, "Jesus te ama!!! <U+2764> Ou não...?<U+1F628> (fé em stand by)")) 

......可是,结果,在逻辑上,也影响表情符号代码:

[1] "Jesus te ama !!! < U +2764> Ou não ...?< U +1F628> (fé em stand by)" 

的目标是创建一个例外<之间的文本>,外部拆分它,不要分裂内部 - 即:

[1] "Jesus te ama !!! <U+2764> Ou não ...? <U+1F628> (fé em stand by)" 

需要注意的是:

  1. 有时句子/字/ PUNCT和一个表情符号代码之间的空间是不存在的(需要被创建)
  2. 这是要求一个PUNCT序列停留加入(例如“!!!” “......?”)

我该怎么办呢?

+0

我的权利前段时间有同样的问题,尽管我丢弃了大多数表情符号,但只留下了六打,这对我的特殊情绪分析来说特别常见和相关。 因此,我替换了一致字符串的相关unicode(即gsub(“U + 1F642 | U + 263A”,“emoji_happy_faces”,df $ comment),之后我才用tm软件包删除了标点符号。 (所有表情符unicdoes可以在这里找到:http://unicode.org/emoji/charts/full-emoji-list.html) –

回答

1

您可以使用下面的正则表达式的解决方案:

a1 <- "(?<=<)U\\+\\w+>(*SKIP)(*F)|(?<=\\S)(?=<U\\+\\w+>)|(?<=[[:alpha:]])(?=[[:punct:]])|(?<=[[:punct:]])(?=[[:alpha:]])" 
gsub(a1, " ", "Jesus te ama!!! <U+2764> Ou não...?<U+1F628> (fé em stand by)", perl=TRUE) 
# => [1] "Jesus te ama !!! <U+2764> Ou não ...? <U+1F628> (fé em stand by)" 

online R demo

这PCRE正则表达式(见调用gsubperl=TRUE参数)相匹配:

  • (?<=<)U\\+\\w+>(*SKIP)(*F) - 一个U+和1+字符字符>之后如果前面有< - ,匹配值被丢弃与PCRE动词(*SKIP)(*F)和下一个匹配从该匹配
  • |的结束找 - 或
  • (?<=\\S)(?=<U\\+\\w+>) - 非空白字符必须立即存在以左当前位置,并且<U+,1+字字符和>必须存在立即到当前位置
  • |权 - 或
  • (?<=[[:alpha:]])(?=[[:punct:]]) - 一个字母必须存在立即到当前位置的左侧,并且标点符号必须立即存在于curre的右侧NT位置
  • | - 或
  • (?<=[[:punct:]])(?=[[:alpha:]]) - 一个标点符号必须立即出现在当前位置的左边,一个字母必须立即出现在当前位置
+0

'(?<=<)U\\+\\w+>(*跳过)(* F)|'部分允许跳过替换在''里面,'(?<= \\ S)(?= )'部分可以在句子/词/ punct和表情符号之间插入空格。 –

1
> str <- "Jesus te ama!!! <U+2764> Ou não...?<U+1F628> (fé em stand by)" 
> strsplit(str,"[[:space:]]|(?=[.!?])",perl=TRUE) 
[[1]] 
[1] "Jesus"  "te"  "ama"  "!"   "!"   "!"   
[7] ""   "<U+2764>" ""   "Ou"  "não"  "."   
[13] "."   "."   "?"   "<U+1F628>" "(fé"  "em"  
[19] "stand"  "by)"  
相关问题