2016-11-30 7 views
2

Я пытаюсь очистить текст. У меня есть список emojis, который я не хочу удалить из текста. Я хотел бы поставить пространство перед этими emojis, только если его уже нет.Поместите пробел перед emojis

emojis = as.character(outer(c(":", ";", ":-", ";-","="),c(")", "(", "]", "[", "D", "o", "O", "P", "p","8"),FUN = paste,sep="")) 

Если бы у меня был твит, который сказал.

Tweet = "I am so happy:)" 

Я хотел бы, чтобы быть

Tweet = "I am so happy :)" 

после того, как код выполняется.

Это довольно простая идея, но я не смог найти код для этого.

Полный список смайликов, которые нуждаются в пространстве перед ними:

":)" ";)" ":-)" ";-)" "=)" ":(" ";(" ":-(" ";-(" "=(" ":]" ";]" ":-]" ";-]" "=]" ":[" ";[" ":-[" ";-[" "=[" ":D" ";D" ":-D" ";-D" "=D" ":o" ";o" ":-o" ";-o" "=o" ":O" ";O" ":-O" ";-O" "=O" ":P" ";P" ":-P" ";-P" "=P" ":p" ";p" ":-p" ";-p" "=p" ":8" ";8" ":-8" ";-8" "=8" 
+0

Как вы получаете твит 'Tweet =" Я так счастлив :) "'? –

+0

@RonakShah Извините, может быть, это было непонятно, в твитте только сказано: «Я так счастлив :)» Текст просто называется Tweet. – Kristofersen

+0

@ Hack-R - как это не воспроизводимый пример? Список emojis определен в R-коде, пример текущих данных приведен в R-коде, и предусмотрен предполагаемый вывод. Если бы все вопросы здесь были одинаковыми. – thelatemail

ответ

4

Регулярное выражение может помочь.

emojis = as.character(outer(c(":", ";", ":-", ";-","="),c("\\)", "\\(", "\\]", "\\[", "D", "o", "O", "P", "p","8"),FUN = paste,sep="")) 
pat <- paste0("(\\w+)(", paste(emojis, collapse="|"), ")") 
Tweet = "I am so happy:)" 
sub(pat, "\\1 \\2", Tweet) 
#[1] "I am so happy :)" 
+1

Спасибо за ответ. Это почти делает то, что я хочу. Список emojis также имеет emojis, который начинается с; и = хотя, и этот код не будет работать для этого. Как включить это в суб? – Kristofersen

+0

Отредактировано. И примечание, я добавил обратную косую черту к emojis, который в них нуждался. –

+0

Спасибо, это прекрасно. – Kristofersen

Смежные вопросы