Как извлечь конкретный символ из текста в R - PullRequest
0 голосов
/ 01 апреля 2019

Я настраиваю новый проект в R и хочу извлечь конкретный символ из текста

X <- c("amazing tiny phone ^_^","so cute!!! <3")

Я хотел бы извлечь ^_^ и <3 из X в R

Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

@ GraemeForst Обобщение может быть достигнуто с помощью группирования и просмотра:

group <- "[\\^\\_\\<\\>3\\:\\(\\)\\;]"
pat <- sprintf(".*[\\s\\b](%s+)(?!\\1)", group)
  • group определяет группировку символов. В основном все символы, которые мы хотим извлечь.
  • pat определяет наш соответствующий шаблон. [\\s\\b] говорит, что перед возможным совпадением должен быть либо пробел, либо граница. И (?!\\1) говорят, что после матча не может быть элемента group.

Вот демоверсия:

X <- c("amazing tiny phone ^_^","so cute!!! <3", "I like pizza :)", "hello beautiful ;)")
gsub(pat, "\\1", grep(pat, X, value = TRUE, perl = TRUE), perl = TRUE)
# [1] "^_^" "<3"  ":)"  ";)" 

Это может быть уточнено и обобщено. Очень простой шаг, который можно добавить, - это расширение grouping.

.

Старый ответ

Вы можете использовать регулярные выражения для этого:

# create the pattern to be extracted
pat = ".*(\\^\\_\\^).*|.*(\\<3).*"  # escape special characters with "\\" and ".*" to specify there may be text before/after

# extract
gsub(pat, "\\1\\2", grep(pat, X, value = TRUE, perl = TRUE), perl = TRUE)
# [1] "^_^" "<3"
0 голосов
/ 01 апреля 2019

Более простой

X = c("amazing tiny phone ^_^","so cute!!! <3","^_^ and :) are my fav symbols")
    patt=c("=d" ,"<3" , ":o" , ":(" ,
    ":)" , "(y)" , ":*" , "^_^", ":d" ,";)" , ":'(") 

variable = sapply(X,function(x){
                    i = which(patt%in%strsplit(x," ")[[1]])
                    if (length(i)>0){
                        paste(patt[i],collapse=" ")
                                    } else{NA}
          })

names(variable)=NULL

> variable
[1] "^_^"    "<3"     ":) ^_^" NA  
...