Удалить все знаки препинания, кроме обратной косой черты в R
Я пытаюсь извлечь ссылки HTML из набора данных. Я использую strsplit, а затем grep, чтобы найти подстроку со ссылками, но результат имеет нежелательные символы в начале или конце строки.... Как я могу извлечь только строку с нужным шаблоном или сохранить строку с желаемый шаблон
Он то, чем я сейчас занимаюсь.
1) Я разделил фрагмент текста, используя strplit и " " (пробел) в качестве разделителя
2) Далее я grep результат 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" или после извлечения грязных данных, как я могу удалить ненужные знаки препинания
Спасибо заранее.
3 ответа
qdapRegex
Пакет имеет удивительную функцию под названием rm_url
это идеально подходит для этого примера.
install.packages('qdapRegex')
library(qdapRegex)
urls <- YOUR_VECTOR_OF_URLS
rm_url(urls, extract = T)
Использование 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
Если в какой-то момент данные являются HTML, вы можете попробовать это:
library(XML)
urls <- getNodeSet(htmlParse(htmldata), "//a[contains(@href, 'support.google.com')]/@href"))