我想对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%" ")}
答案 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'。