如何从String-R语言中提取关键字

问题描述 投票:-2回答:1

在字符串的句子中提取关键字的最优雅方法是什么?

我有一个CSV关键字列表,我想预测与字符串中存在的关键字完全匹配。

sapply(keywords, regexpr, String, ignore.case=FALSE) 

我使用了上面的代码,但它也给出了近似匹配。

r
1个回答
0
投票

问题是正则表达式不知道“单词”是什么 - 它们寻找模式。请考虑以下关键字和字符串。

keywords = c("bad","good","sad","mad")
string = "Some good people live in the badlands which is maddeningly close to the sad harbor."

这里“坏”匹配“荒地”,因为前三个字符中出现了“坏”的模式。与“疯狂”和“疯狂”相同。

sapply(keywords, regexpr, string, ignore.case=FALSE)
#> bad good  sad  mad 
#>  30    6   73   48 

因此,我们需要修改模式以使其检测到我们真正想要的内容。问题是知道我们真正想要的是什么。如果我们想要一个不同的单词,那么我们可以在关键字周围添加边界。正如安德烈在评论中指出的那样,正则表达式中的\bword boundary

sapply(paste("\\b",keywords,"\\b",sep=""), regexpr, string, ignore.case=FALSE)
#> \\bbad\\b \\bgood\\b  \\bsad\\b  \\bmad\\b 
#>        -1          6         73         -1

注意,我所做的是使用paste函数在每个关键字之前和之后粘贴转义的\b。这将返回'bad'和'mad'的不匹配代码,但会找到'good'和'sad'的整个单词版本。

如果要查找带连字符的字符,则需要修改表达式的边界匹配部分。

© www.soinside.com 2019 - 2024. All rights reserved.