2013-09-26 19 views
5

Sto cercando una funzione che possa estrarre il nome di dominio da un URL in R. Qualsiasi funzione che sia simile a tldextract in R? EDIT: Attualmente sto utilizzando l'approccio di seguito:Funzione per estrarre il nome di dominio dall'UR in R

domain=substr(as.character("www.google.com"), 
    which(strsplit("www.google.com",'')[[1]]=='.')[1]+1, nchar("www.google.com")) 

Ma sto cercando una funzione predefinita che può salvare lo sforzo di codifica.

+0

Aggiungere esempi, mostrare ciò che si è tentato fino ad ora. –

+0

-1 Fino ai dati di esempio forniti e cosa hai provato! –

+0

codice che sto usando attualmente aggiunto –

risposta

2

Non conosco una funzione in un pacchetto per farlo. Non credo ci sia nulla nell'installazione di base di R. Utilizzare una funzione definita dall'utente e memorizzarla in un punto in cui è possibile effettuare il source in un secondo momento o creare il proprio pacchetto con esso.

x1 <- "http://stackoverflow.com/questions/19020749/function-to-extract-domain-name-from-url-in-r" 
x2 <- "http://www.talkstats.com/" 
x3 <- "www.google.com" 

domain <- function(x) strsplit(gsub("http://|https://|www\\.", "", x), "/")[[c(1, 1)]] 

domain(x3) 
sapply(list(x1, x2, x3), domain) 
## [1] "stackoverflow.com" "talkstats.com"  "google.com" 
+0

Questo era esattamente quello che stavo cercando. Una funzione che può gestire qualsiasi tipo possibile di URL. –

9

È inoltre possibile utilizzare il relativamente nuovo urltools pacchetto:

library(urltools) 

URLs <- c("http://stackoverflow.com/questions/19020749/function-to-extract-domain-name-from-url-in-r", 
      "http://www.talkstats.com/", "www.google.com") 

suffix_extract(domain(URLs)) 

##    host subdomain  domain suffix 
## 1 stackoverflow.com  <NA> stackoverflow com 
## 2 www.talkstats.com  www  talkstats com 
## 3 www.google.com  www  google com 

E 'sostenuta da Rcpp quindi è malvagio veloce (molto più che con built-in R apply funzioni

0

io. ho appena scritto questa regex che può essere applicata alle e-mail e ai siti web per l'estrazione e la corrispondenza sul dominio.La regex può essere modificata per estrarre parti diverse, ed è vettorizzata.Faccio qualche elaborazione aggiuntiva che è totalmente o soggetto a talune.

invalid_domains = "yahoo.com|aol.com|gmail.com|hotmail.com|comcast.net|me.com|att.net|verizon.net|live.com|sbcglobal.net|msn.com|outlook.com|ibm.com" 
 
domain <- function(x){ 
 
    to_return <- tolower(as.character(x)) 
 
    to_return <- gsub('.*[[email protected]/]+([^[email protected]:/]+[.][a-z]+)(/.*$|$)','\\1',x,ignore.case=T) # extract domain. \\1 selects just the first group. 
 
    to_return <- gsub(".ocm", ".com", to_return) # correct mispellings 
 
    # to_return <- ifelse(grepl(invalid_domains,to_return),NA,to_return) # (optional) check for invalid domains, especially when working with emails. 
 
    to_return <- ifelse(grepl('[.]',to_return),to_return,NA) # if there is no . this is an invalid domain, return NA 
 
    return(to_return) 
 
}

Problemi correlati