首页 > 解决方案 > 如何获取 r 数据框中描述中单词的超链接?

问题描述

我有一个带有文字和描述的数据框。要求是检查描述中是否存在单词列中的任何单词。基本上,我们必须针对所有描述运行所有单词,如果这些单词存在,我们必须在描述中超链接这些单词。

我已经尝试过 gsub,如代码所示。这是一个例子。实际数据约为 30k 行。

data = data.frame("word"=c('python py', 'java'),
  "description"=c('Java is a statically typed and Python py is a dynamically typed', 'java is a programming language'))

ll <- as.list(data$word)

for (i in 1:nrow(data)){
  for (j in ll){
    url <- paste0("http://www.google.com/ ",j)
    data$new[i] <- gsub(j,url,data$description[i])
  }
}

它只更新最后一行,我不确定如何使其成为链接。

预期的结果是使描述中的 python 和 java 成为可点击链接。在后台它必须重定向到一个 url(例如:www.google.com/python py(对于 python py)/www.google.com/java(对于 java))

标签: rloopshyperlinkpattern-matchinggsub

解决方案


一个选项是str_replacefrom stringr,它可以通过在替换中传递值向量来替换相应的元素。

library(stringr)
data = data.frame("word"=c('python py', 'java'), 
 "description"=c('Java is a statically typed and Python py is a dynamically typed',
     'java is a programming language'), stringsAsFactors = FALSE)

如果打算在“描述”中插入链接

pat <- str_c("\\b(?i)(", data$word, ")\\b")
str_replace(data$description, pat, "http://www.google.com/\\1") 
#[1] "Java is a statically typed and http://www.google.com/Python py is a dynamically typed"
#[2] "http://www.google.com/java is a programming language"  

更新

用于替换所有出现的单词

data$new <- data$description
for(i in seq_len(nrow(data))) for(j in seq_along(ll)) {
   url <- paste0("http://www.google.com/",ll[[j]])
   data$new[i] <- sub(ll[[j]], url, data$new[i], ignore.case = TRUE)
   }

data$new
#[1] "http://www.google.com/java is a statically typed and http://www.google.com/python py is a dynamically typed"
#[2] "http://www.google.com/java is a programming language"       

推荐阅读