如何用第二个对应的字符串替换字符向量中的特定字符串?

时间:2019-08-01 09:59:56

标签: r str-replace

我想对R中的向量进行定理: 然后,我有一个“原始”向量(例如c("Marc goes to the park","Marc went to the park",...));一个数据库,其中令牌向量(例如c("Marc","goes","to",...,"went",...)中的每个“令牌”在引理向量(例如c("Marc","go","to",...,"go",...)中都有一个“引理”)。

我想将“原始”向量转换为看起来像这样的“干净”向量:c("Marc go to the park","Marc go to the park",...)

这是我尝试的代码:

raw   <- c("meno pressioni", "meno pressione", "men Pressioni")
token <- c("meno", "pressioni", "pressione", "men",  "Pressioni")
lemma <- c("meno", "pressione", "pressione", "meno", "pressione")
for(i in 1:length(token)){
clean <- str_replace(raw, pattern=token[i], replacement=lemma[i])
}
clean

Here is the vector I obtained:

clean
[1] "meno pressioni" "meno pressione" "men pressione" 


And here what I wanted to obtain:

clean
[1] "meno pressione" "meno pressione" "meno pressione" 

我该怎么办?

还要感谢Haiden的建议,这是对我有用的解决方案(使用rebus库)。

for(i in 1:length(token)){raw<-str_replace(raw,pattern=or(START,SPC)%R%raw[i]%R%or(SPC,END),replacement=" "%R%lemma[i]%R%" ")}

1 个答案:

答案 0 :(得分:0)

for循环的每次迭代都使用raw作为参数来定义整洁。但是,未在循环中重新定义原始数据,因此,每次运行循环时,它看起来都是相同的原始数据。换句话说,运行

for(i in 1:length(token)){
     clean <- str_replace(raw, pattern=token[i], replacement=lemma[i])
}

与运行完全相同

clean <- str_replace(raw, pattern=token[length(token)], replacement=lemma[length(token)])

以下内容将起作用。

clean<-raw
for(i in 1:length(token)){
     clean <- str_replace(clean, pattern=token[i], replacement=lemma[i])
}

但是请注意,“ meno”中的“ men”也将替换为“ meno”,这意味着输出将为

> clean
[1] "menoo pressione" "menoo pressione" "meno pressione"

因此,您将要告诉str_replace这样检查单词边界:

clean <- str_replace(clean, pattern=paste0("\b", token[i], "\b"), replacement=paste0("\b", lemma[i], "\b"))

我还建议在启动循环之前先在干净的环境下运行tolower(),这样就无需同时替换'pressioni'和'Pressioni'。