Как удалить URL без http в текстовом документе, используя r - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь удалить URL-адреса, которые могут начинаться или не начинаться с http / https, из большого текстового файла, который я сохранил в urldoc в R. URL-адрес может начинаться как tinyurl.com/ydyzzlkk или aclj.us/2y6dQKw или pic.twitter.com/ZH08wej40K. По сути, я хочу удалить данные до «/» после нахождения пробела и после «/», пока не найду пробел. Я пробовал со многими образцами и искал много мест. Не удалось выполнить задачу. Я бы очень помог мне, если бы вы могли внести свой вклад.

Это последнее утверждение, которое я попробовал и застрял в вышеуказанной проблеме. urldoc = gsub ("? [a-z] + \ .. \ /. [\ s] $", "", urldoc)

Ввод будет позором для его профессии. pic.twitter.com/ZH08wej40K В крупной победе религиозной свободы, админ. Потрошил институт, продолжая этот путь. goo.gl/YmNELW ничего похожего на админа. предложение: tinyurl.com/ydyzzlkk

Вывод, который я ожидаю, таков: позор его профессии. В крупной победе за свободу вероисповедания, Админ. Потрошил институт, продолжая этот путь. ничего похожего на админа. предложение:

Спасибо.

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Это может сработать:

text <- " http:/thisisanurl.wde , thisaint , nope , uihfs/yay"
words <- strsplit(text, " ")[[1]]
isurl <- sapply(words, function(x) grepl("/",x))
result <- paste0(words[!isurl], collapse = " ")
result
[1] " , thisaint , nope ,"
0 голосов
/ 30 октября 2018

См. Уже ответил, но вот альтернатива, если вы не сталкивались stringi до

# most complete package for string manipulation
library(stringi)

# text and regex
text <- "A disgrace to his profession. pic.twitter.com/ZH08wej40K In a major victory for religious liberty, the Admin. has eviscerated institution continuing this path. goo.gl/YmNELW nothing like the admin. proposal: tinyurl.com/ydyzzlkk" 
pattern <- "(?:\\s)[^\\s\\.]*\\.[^\\s]+"

# see what is captured
stringi::stri_extract_all_regex(text, pattern)

# remove (replace with "")
stringi::stri_replace_all_regex(text, pattern, "")
0 голосов
/ 30 октября 2018

Согласно вашим спецификациям вы можете использовать следующее регулярное выражение:

\s*[^ /]+/[^ /]+

См. Демоверсию regex .

Детали

  • \s* - 0 или более пробельных символов
  • [^ /]+ (или [^[:space:]/]) - любые 1 или более символов, кроме пробела (или пробела) и /
  • / - косая черта
  • [^ /]+ (или [^[:space:]/]) - любые 1 или более символов, кроме пробела (или пробела) и /.

R демо :

urldoc = gsub("\\s*[^ /]+/[^ /]+","", urldoc)

Если вы хотите учесть какие-либо пробелы, замените буквенное пространство на [:space:],

urldoc = gsub("\\s*[^[:space:]/]+/[^[:space:]/]+","", urldoc)
...