r - 让 gsub 只替换整个单词?

标签 r gsub topic-modeling

(我正在使用 R。)对于名为“goodwords.corpus”的单词列表,我正在遍历语料库中的文档,并将列表“goodwords.corpus”中的每个单词替换为单词 + a数字。

因此,例如,如果“good”一词在列表中,而“晚安”一词不在列表中,则此文档:

I am having a good time goodnight

会变成:
I am having a good 1234 time goodnight

**我正在使用此代码(编辑 - 使其可重现):
goodwords.corpus <- c("good")
test <- "I am having a good time goodnight"
for (i in 1:length(goodwords.corpus)){
test <-gsub(goodwords.corpus[[i]], paste(goodwords.corpus[[i]], "1234"), test)
}

但是,问题是我希望 gsub 只替换整个单词。出现的问题是:“good”在“goodwords.corpus”列表中,但不在列表中的“goodnight”也受到影响。所以我明白了:
I am having a good 1234 time good 1234night

无论如何我可以告诉 gsub 只替换整个单词,而不是可能是其他单词一部分的单词吗?

我想用这个:
test <-gsub("\\<goodwords.corpus[[i]]\\>", paste(goodwords.corpus[[i]], "1234"), test)
}

我读过\< 和\> 会告诉 gsub 只查找整个单词。但显然这不起作用,因为 goodwords.corpus[[i]] 在引号中不起作用。

有什么建议?

最佳答案

你很接近得到这个。您已经在使用 paste要形成替换字符串,为什么不使用它来形成模式字符串?

goodwords.corpus <- c("good")
test <- "I am having a good time goodnight"
for (i in 1:length(goodwords.corpus)){
    test <-gsub(paste0('\\<', goodwords.corpus[[i]], '\\>'), paste(goodwords.corpus[[i]], "1234"), test)
}
test
# [1] "I am having a good 1234 time goodnight"

( paste0 仅仅是 paste(..., sep='') 。)

(我和@MatthewLundberg 同时发布了这个,他的也是正确的。我实际上更熟悉使用 \b\< ,但我想我会继续使用你的代码。)

关于r - 让 gsub 只替换整个单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22888646/

相关文章:

r - 我应该使用 mget()、.. 还是 with=FALSE 来选择 data.table 的列?

r - tools::texi2dvi - 它发生了什么事?

r - 如何根据列表删除多个列值

ruby - 为什么 `gsub!` 返回 `nil` ?

用多个元素替换向量中的一个元素

r - R 中的主题建模 : Building topics based on a predefined list of terms

r - 如何让 ggplot 正确排序构面?

R 流水线函数

python - 使用潜在狄利克雷分配进行主题预测

machine-learning - 主题和潜在狄利克雷分配