问题标签 [agrep]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1738 浏览

shell - grep 一个数字大于 45 的字符串

我在一个目录中有多个文件。我想提取包含整数值大于 45 的所有文件中的每一行。

目前,我正在使用:

它向我显示了此字符串“IO 恢复后”的所有文件

0 投票
1 回答
135 浏览

r - 从 Rcpp 调用 agrep .Internal C 函数

简而言之:如何从 Rccp C++ 代码中调用当用户使用基本 Ragrep中的常规函数​​时调用的 C 内部函数?agrep

长篇大论:我在这里发现了多个关于如何从 Rcpp 中调用为另一个包创建的 C 或 C++ 函数的问题(例如,使用 Rcpp 和Rcpp中其他包中的C 函数:从 Rcpp 中的包调用 C 函数)。

然而,我试图实现的事情同时更简单,但记录也更少:它是从 Rcpp 中直接调用一个 .Internal C 函数,该函数随基础 R 而不是另一个包提供,无需接口使用 R (即,不执行Rcpp 中的 Call R 函数中所说的操作)。对于位于基本 R 的 agrep 包装器下方的 .Internal C 函数,我该如何做到这一点?

我在这里尝试调用的特定函数是 agrep 内部 C 函数。对于上下文,我最终要实现的是加快对 agrep 的调用,以便在必须针对数百万个 x 目标中的每一个检查数百万个模式时。

0 投票
2 回答
542 浏览

c++ - 有效地检查一个字符串是否是另一个字符串的近似子字符串(近似约束),直到给定的错误阈值?

取两个 C 或 C++ 中的字符串,s1s2. 检查一个是否包含另一个是相当简单

true如果s2是 的子字符串,则以下内容将返回s1

在 C 中:

在 C++ 中:

带升压:

我正在寻找的是一种有效的类似方法(在速度方面,而不是内存方面)查找字符串是否大约包含在 / 中是否大约是另一个的子字符串,直到给定的差异阈值。agrep与 Unix 系统中用于查找文件的 bash 命令非常相似。

例如,假设函数被调用approx_contains。如果包含在最大为 4 的 Levenshtein 距离内,则approx_contains(s1, s2, 4)可以返回真/假。s2s1

在网上搜索,我只发现了许多关于如何计算两个字符串之间的 Levenshtein 距离的参考资料和问题,或者是近似字符串模式匹配的理论算法,而不仅仅是检查一个字符串是否包含另一个字符串——这在这里变得很浪费。

非常努力地避免重新发明轮子,有人怎么能在 C 或 C++ 中进行这样的检查?

0 投票
1 回答
95 浏览

r - 在 R 中,使用 if 循环和 agrep 来分配值

模式列表如下所示:

X 来自 df 看起来像:

我试图做的:使用agrep根据df$X在pattern中找到匹配的名称,然后根据匹配结果为现有列'column2'赋值,例如,如果'aaa-053'匹配'aaa' ,那么 'aaa' 将是 'column2' 中的值,如果不匹配,则返回该列中的 na。

df 中的理想 column2 如下所示:

0 投票
2 回答
230 浏览

r - 单列中的模糊匹配字符串并记录可能的匹配

我有一个相对较大的数据集,大约 5k 行,其中包含期刊/研究论文的标题。这是数据集的一个小样本:

您可以看到那里有一些重复的标题,但格式/大小写不同。我想识别重复的标题并创建一个新变量来记录哪些行可能匹配。为此,我尝试使用此处建议的 agrep 函数:

这会识别匹配项,但会将结果保存为新变量列中的列表。有没有办法做到这一点(最好使用 base r 或 data.table),其中 agrep 的结果不保存为列表,而只识别哪些行是匹配的(例如,6:7)?

在此先感谢-希望我提供了足够的信息。

0 投票
0 回答
20 浏览

r - 与“agrep”近似匹配

我正在努力接受agrep用于模糊匹配的功能。假设你有这样的字符串:

进一步假设我想匹配那些最接近mm. 使用agrep,匹配的相互“接近度”或“距离”由“广义的 Levenshtein 编辑距离(将一个字符串转换为另一个字符串所需的插入、删除和替换的最小可能加权数”(来自 R 文档agrep)来衡量。据我了解,Levenshtein 距离有效地反映了转换的成本。因此,例如,如果参数cost设置为0,则agrep返回mmand mm mm,这是可以预期的,因为两个字符串需要零转换:

但是,如果cost设置为 的(荒谬的)一小部分1,则所有字符串都匹配,尽管看起来,例如转换mothermm涉及至少两个操作,即 (i) 删除other和 (ii) 将其替换为m因此应该更加“昂贵”来实现:

我的猜测是,我并不真正了解agrep它的论点是如何工作的,尤其是距离是如何计算的,因此非常感谢有关此问题的专家指导。

0 投票
0 回答
25 浏览

agrep - agrep 模糊搜索 - 结果数量没有意义

大家好!

这个问题源自这里的前一个问题,但代表它本身。

我正在使用agrep在大型 DNA 文本文件中搜索具有 2 个允许不匹配的字符串,该文件仅具有来自先前 agrep 搜索的具有相同设置的行。所以每一行都应该包含一个匹配项!我假设agrep每行搜索一次......


问题:_

wc -l temp_R1_GCTCTTCCGATCT_M2.txt-> 9583

agrep -2 -c 'GCTCTTCCGATCT' temp_R1_GCTCTTCCGATCT_M2.txt-> 9570

agrep -2 'GCTCTTCCGATCT' temp_R1_GCTCTTCCGATCT_M2.txt | wc -l-> 9566

-d '$'应该是标准 -.-
agrep -2 -c -d '$' 'GCTCTTCCGATCT' temp_R1_GCTCTTCCGATCT_M2.txt-> 9580

更奇怪的是:
agrep -2 -c 'GCTC' temp_R1_GCTCTTCCGATCT_M2.txt-> 9662(比所有行都多?)
agrep -2 -d '$' -c 'GCTC' temp_R1_GCTCTTCCGATCT_M2.txt-> 9609


数据Googledrive:.txt 文件 ZIP 文件


一个可能的答案来自man agrep

以下可能导致无限循环:agrep 模式 * > output_file。如果匹配的数量很高,它们可能会在 output_file 被完全读取之前存放在 output_file 中,从而导致 output_file 中的模式匹配更多(匹配针对整个目录)。目前尚不清楚这是否是一个“错误”(grep 也会这样做),但请注意。


我用不同的文件对此进行了测试。有时它确实有效,但在大多数情况下,我无法理解这是如何发生的。这-d '$'是非常恼人的。

最后,我将使用不同的方法进行模糊搜索,但这并不能让我入睡。到底是怎么回事?我可以完全信任agrep吗?

0 投票
2 回答
40 浏览

r - 通过R中的相似字符/字符串匹配两个向量

我有两个向量,比如

我想匹配它们,即“链接”每个元素v1与 上最相似的元素v2,这样结果是

以下代码给出了预期的结果,但这只是因为它已经手动“格式化”了

碰巧会agrep(df[2,1], v2, max.distance = 0.00001, ignore.case = T, value = T)导致"redx" "grean",即使我设置了max.distance = 0.00001.

这就是为什么我有 if 条件,但它不能保证选择最相似的答案。

我该如何克服这个问题?

先感谢您

0 投票
1 回答
79 浏览

r - 了解 R 中 agrep 模糊匹配中的约束

这看起来很简单,但由于某种原因,我不理解agrep涉及替换的模糊匹配的行为。当指定时,两个替换会产生预期的匹配all=2,但不会在指定时产生匹配substitutions=2。为什么是这样?

reprex 包于 2021-06-03 创建 (v2.0.0 )

0 投票
1 回答
29 浏览

r - 过滤 tibble 列以仅包含在单独的 tibble 中找到的值

问题

我有一个包含基本股票代码信息的小标题(在此处以 .csv 文件的形式提供:https ://www.nasdaq.com/market-activity/stocks/screener )。

我如何过滤这个 tibble(叫它symbolData)只为第二个小得多的 tibble(叫它DowJones)中列出的公司?请注意,数据集之间的公司名称并不完全一致(即“Apple Inc. - Common Stock”symbolData与 中的“Apple Inc.” DowJones)。


代表


以前的尝试

我已经尝试了很多方法,包括%in%/ %chin%grep/ greplagrepl/ agrepstr_detect,将DowJones数据框变成列表,以及其他各种我不记得的方法。到目前为止,我尝试过的所有操作都返回了一个空的 tibble,或者返回了与不同列长度相关的错误消息。一些例子: