2017-08-06 59 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)"  
相關問題