R:使用查找表替换数据帧中的子字符串

R:使用查找表替换数据帧中的子字符串,r,text-mining,R,Text Mining,我有一个包含一系列字符串的数据帧,其中一些字符串包含两个单词短语,我想把它们压缩成一个“伪单词” 在这个例子中,“联合王国”、“沙特阿拉伯”和“欧盟”是我感兴趣的短语。我想用“英国”替换所有“英国”,用“沙特阿拉伯”替换所有“沙特阿拉伯”等等 我的文本字符串数据框如下所示: text.df <- as.data.frame( c( "Lorem ipsum dolor sit saudi arabia adipiscing elit.", # Contains "saudi arabi

我有一个包含一系列字符串的数据帧,其中一些字符串包含两个单词短语,我想把它们压缩成一个“伪单词”

在这个例子中,“联合王国”、“沙特阿拉伯”和“欧盟”是我感兴趣的短语。我想用“英国”替换所有“英国”,用“沙特阿拉伯”替换所有“沙特阿拉伯”等等

我的文本字符串数据框如下所示:

text.df <- as.data.frame(
c(
  "Lorem ipsum dolor sit saudi arabia adipiscing elit.", # Contains "saudi arabia"
  "Ut enim ad minim veniam united kingdom exercitation.", # Contains "united kingdom"
  "Excepteur sint european union deserunt saudi arabia laborum", # Contains "european union" and "saudi arabia"
  "Sed ut perspiciatis unde omnis error sit voluptate." # Contains nothing of interest
 ))
colnames(text.df) <- 'content'
lookup <- data.frame(matrix(ncol = 2, nrow = 3))
lookup$X1 <- c('united kingdom', 'european union', 'saudi arabia')
lookup$X2 <- c('unitedkingdom', 'europeanunion', 'saudiarabia')
如果有人能帮忙,我们将不胜感激!提前感谢。

库(qdap)
library(qdap)

text.df <- as.data.frame(
  c(
    "Lorem ipsum dolor sit saudi arabia adipiscing elit.", # Contains "saudi arabia"
    "Ut enim ad minim veniam united kingdom exercitation.", # Contains "united kingdom"
    "Excepteur sint european union deserunt saudi arabia laborum", # Contains "european union" and "saudi arabia"
    "Sed ut perspiciatis unde omnis error sit voluptate." # Contains nothing of interest
  ), stringsAsFactors = F)
colnames(text.df) <- 'content'

lookup <- data.frame(matrix(ncol = 2, nrow = 3))
lookup$X1 <- c('united kingdom', 'european union', 'saudi arabia')
lookup$X2 <- c('unitedkingdom', 'europeanunion', 'saudiarabia')

# provide patterns, replacements, actual texts to update
mgsub(lookup$X1, lookup$X2, text.df$content)

# [1] "Lorem ipsum dolor sit saudiarabia adipiscing elit."       
# [2] "Ut enim ad minim veniam unitedkingdom exercitation."      
# [3] "Excepteur sint europeanunion deserunt saudiarabia laborum"
# [4] "Sed ut perspiciatis unde omnis error sit voluptate." 
text.df您可以尝试以下方法:

library(stringr)
transform_word <- function(text){
 for (i in 1:nrow(lookup))
  text <- stringr::str_replace_all(text,lookup$X1[i],lookup$X2[i])
 return(text)
}

text.df[,'content'] <- sapply(text.df[,'content'],transform_word)
库(stringr)
变换词
library(stringr)
transform_word <- function(text){
 for (i in 1:nrow(lookup))
  text <- stringr::str_replace_all(text,lookup$X1[i],lookup$X2[i])
 return(text)
}

text.df[,'content'] <- sapply(text.df[,'content'],transform_word)