gpt4 book ai didi

r - 从 agrep 中提取子串匹配

转载 作者:行者123 更新时间:2023-12-04 10:59:39 28 4
gpt4 key购买 nike

我的目标是确定是否给定 text有一个 target字符串,但我想允许拼写错误/小派生并提取“导致”匹配的子字符串(将其用于进一步的文本分析)。

示例:

target <- "target string"
text <- "the target strlng: Butter. this text i dont want to extract."

所需输出:

我要 target strlng作为输出,因为它非常接近目标(levenshtein 距离为 1)。接下来我想使用 target strlng提取词 Butter (这部分我已经涵盖了,我只是添加它以获得详细的规范)。

我试过的:

使用 adist 不起作用,因为它比较两个字符串,而不是子字符串。

接下来我看了一下 agrep这似乎非常接近。我可以有输出,我的目标被找到了,但不是 substring这“导致”了比赛。

我试过 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出现在点参数之后 ...所以它必须是一个命名参数。
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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com