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

时间:2017-12-20 14:18:07

标签: r

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

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

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

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

1 个答案:

答案 0 :(得分: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'的整个单词版本。

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

相关问题