说我在文件中有一行:
string <- "thanks so much for your help all along. i'll let you know when...."
我想返回一个值,指示单词know
是否在help
的6个单词内。
答案 0 :(得分:3)
这基本上是蜡笔作为基本功能的答案的粗略实现:
withinRange <- function(string, term1, term2, threshold = 6) {
x <- strsplit(string, " ")[[1]]
abs(grep(term1, x) - grep(term2, x)) <= threshold
}
withinRange(string, "help", "know")
# [1] TRUE
withinRange(string, "thanks", "know")
# [1] FALSE
我建议您了解可用的文本工具,并使用它们编写这样的函数。注意泰勒的评论:如果实施,这可以匹配多个术语(“你”将匹配“你”和“你的”)导致有趣的结果。您需要确定如何处理这些情况以获得更有用的功能。
答案 1 :(得分:2)
你无法单独从正则表达式获得这个。我建议使用空格作为分隔符进行拆分,然后循环或使用内置函数对两个项进行数组搜索并减去索引的差异(数组位置)。
编辑:好的,我想了一下,也许这会对你有用作为正则表达式:
\bhelp(\s+[^\s]+){1,5}+\s+know\b
这需要相同的“空间是分隔符”概念。首先匹配帮助然后贪婪地达到5“单词”然后寻找“知道”(因为“知道”将是第6个)。
答案 2 :(得分:0)
拆分你的字符串:
> words <- strsplit(string, '\\s')[[1]]
构建索引向量:
> indices <- 1:length(words)
名称索引:
> names(indices) <- words
计算单词之间的距离:
> abs(indices["help"] - indices["know"]) < 6
FALSE
编辑在函数中
distance <- function(string, term1, term2) {
words <- strsplit(string, "\\s")[[1]]
indices <- 1:length(words)
names(indices) <- words
abs(indices[term1] - indices[term2])
}
distance(string, "help", "know") < 6
编辑加号
索引单词有很大的优势,一旦完成,你就可以处理很多关于文本的统计数据。