Удалить все знаки препинания, кроме обратной косой черты в R

Я пытаюсь извлечь html-ссылки из набора данных. Я использую strsplit, а затем grep, чтобы найти подстроку со ссылками, но в результате есть нежелательные символы либо в начале, либо в конце строки.... Как я могу извлечь только строку с желаемым шаблоном или сохранить строку с желаемый узор

Он то, чем я сейчас занимаюсь.

1) Я разделил фрагмент текста, используя strplit и " " (пробел) в качестве разделителя

2) Затем я получаю результат strsplit, чтобы найти шаблон

например grep("https:\/\/support.google.com\/blogger\/topic\/[0-9]",r)

3) И несколько вариантов результата показаны ниже....

https://support.google.com/blogger/topic/12457 
https://support.google.com/blogger/topic/12457.
[https://support.google.com/blogger/topic/12457]  
<<https://support.google.com/blogger/topic/12457>>
https://support.google.com/blogger/topic/12457,
https://support.google.com/blogger/topic/12457),
xxxxxxhttps://support.google.com/blogger/topic/12457),hhhththta
etc...

Как я могу просто извлечь "https://support.google.com/blogger/topic/12457" или после извлечения грязных данных, как я могу удалить ненужные знаки препинания

Спасибо заранее.


person ybi    schedule 26.11.2014    source источник
comment
Попробуйте gsub(".*(http.*\\d).*", "\\1", x), если все они заканчиваются цифрой   -  person Rich Scriven    schedule 26.11.2014


Ответы (3)


В пакете qdapRegex есть замечательная функция rm_url, которая идеально подходит для этого примера.

install.packages('qdapRegex')
library(qdapRegex)

urls <- YOUR_VECTOR_OF_URLS
rm_url(urls, extract = T)
person maloneypatr    schedule 26.11.2014

Если в какой-то момент данные представляют собой HTML, вы можете попробовать следующее:

library(XML)
urls <- getNodeSet(htmlParse(htmldata), "//a[contains(@href, 'support.google.com')]/@href"))
person Nick DiQuattro    schedule 26.11.2014

Использование rex может немного упростить эту задачу.

# generate dataset
x <- c(
"https://support.google.com/blogger/topic/12457
https://support.google.com/blogger/topic/12457.
https://support.google.com/blogger/topic/12457] 
<<https://support.google.com/blogger/topic/12457>>
https://support.google.com/blogger/topic/12457,
https://support.google.com/blogger/topic/12457),
xxxxxxhttps://support.google.com/blogger/topic/12457),hhhththta")

# extract urls
# note you don't have to worry about escaping the html string yourself
library(rex)    
re <- rex(
  capture(name = "url",
    "https://support.google.com/blogger/topic/",
    digits
    ))

re_matches(x, re, global = TRUE)[[1]]
#>                                             url
#>1 https://support.google.com/blogger/topic/12457
#>2 https://support.google.com/blogger/topic/12457
#>3 https://support.google.com/blogger/topic/12457
#>4 https://support.google.com/blogger/topic/12457
#>5 https://support.google.com/blogger/topic/12457
#>6 https://support.google.com/blogger/topic/12457
#>7 https://support.google.com/blogger/topic/12457
person Jim    schedule 28.11.2014