我的目标是确定给定的文本
中是否有target
字符串,但我想允许拼写错误/小派生并提取“导致”的子字符串“匹配(用于进一步的文本分析)。
示例:
target <- "target string"
text <- "the target strlng: Butter. this text i dont want to extract."
所需输出:
我希望将 target strlng
作为输出,因为它非常接近目标(编辑距离为 1)。接下来我想使用 target strlng
来提取单词 Butter
(这部分我已经介绍过,我只是添加它以获得详细的规范)。
我尝试过的:
使用 adist 不起作用,因为它比较两个字符串,而不是子字符串。
接下来我看了一下agrep
,它看起来非常接近。我可以得到我的目标已找到的输出,但不能得到“导致”匹配的子字符串
。
我尝试使用value = TRUE
,但它似乎适用于数组级别。我认为我不可能切换到数组类型,因为我不能用空格分割(我的目标字符串可能有空格,...)。
agrep(
pattern = target,
x = text,
value = TRUE
)
最佳答案
使用aregexec
,它类似于使用regexpr/regmatches
(或gregexpr
)进行精确匹配提取。
m <- aregexec('string', 'text strlng wrong')
regmatches('text strlng wrong', m)
#[[1]]
#[1] "strlng"
可以将其包装在使用 aregexec
和 regmatches
参数的函数中。请注意,在后一种情况下,函数参数 invert
位于点参数 ...
之后,因此它必须是命名参数。 p>
aregextract <- function(pattern, text, ..., invert = FALSE){
m <- aregexec(pattern, text, ...)
regmatches(text, m, invert = invert)
}
aregextract(target, text)
#[[1]]
#[1] "target strlng"
aregextract(target, text, invert = TRUE)
#[[1]]
#[1] "the "
#[2] ": Butter. this text i dont want to extract."
关于r - 从 agrep 中提取子字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58914919/