use*_*557 10 r gsub topic-modeling
(我正在使用R.)对于一个名为"goodwords.corpus"的单词列表,我循环遍历语料库中的文档,并将单词"goodwords.corpus"中的每个单词替换为单词+ a数.
因此,例如,如果列表中包含"good"一词,并且列表中没有"晚安",则此文档:
I am having a good time goodnight
Run Code Online (Sandbox Code Playgroud)
会变成:
I am having a good 1234 time goodnight
Run Code Online (Sandbox Code Playgroud)
**我正在使用此代码(EDIT-使此可重现):
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)
}
Run Code Online (Sandbox Code Playgroud)
但是,问题是我希望gsub只替换整个单词.出现的问题是:"goodwords"在"goodwords.corpus"列表中,但是"goodnight"(不在列表中)也会受到影响.所以我明白了:
I am having a good 1234 time good 1234night
Run Code Online (Sandbox Code Playgroud)
无论如何,我可以告诉gsub只能替换整个单词,而不是可能是其他单词的一部分的单词吗?
我想用这个:
test <-gsub("\\<goodwords.corpus[[i]]\\>", paste(goodwords.corpus[[i]], "1234"), test)
}
Run Code Online (Sandbox Code Playgroud)
我读过\ <和\>会告诉gsub只查找整个单词.但显然这不起作用,因为当引用时,goodwords.corpus [[i]]将不起作用.
有什么建议?
Mat*_*erg 13
使用\b指示字边界:
> text <- "good night goodnight"
> gsub("\\bgood\\b", paste("good", 1234), text)
[1] "good 1234 night goodnight"
Run Code Online (Sandbox Code Playgroud)
在你的循环中,这样的事情:
for (word in goodwords.corpus){
patt <- paste0('\\b', word, '\\b')
repl <- paste(word, "1234")
test <-gsub(patt, repl, test)
}
Run Code Online (Sandbox Code Playgroud)
你是如此接近这个.您已经在使用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"
Run Code Online (Sandbox Code Playgroud)
(paste0仅仅是paste(..., sep='').)
(我在@MatthewLundberg的同时发布了这个帖子,他也是正确的.我实际上更熟悉使用\b恶习\<,但我想我会继续使用你的代码.)
| 归档时间: |
|
| 查看次数: |
7087 次 |
| 最近记录: |