【问题标题】:agrep working with del, ins argumentsagrep 与 del、ins 参数一起工作
【发布时间】:2015-09-08 18:23:28
【问题描述】:

如何使用此代码匹配“abteam”和“ab”?

agrep("abteam",c("acb","abd","ab"),value=T,ignore.case = TRUE,max = list(del = 10, ins = 10, sub = 10))

结果是character(0),虽然我指定了del=10ins=10。问题是什么? agrep 是如何工作的?

【问题讨论】:

    标签: r arguments string-matching agrep


    【解决方案1】:

    来自帮助文件:

    如果没有给出‘cost’,‘all’默认为10%,其他转换数边界默认为‘all’。

    据我了解,这意味着即使您设置了 delinssubcostall 也是一个限制因素。如果你想允许 10 次转换,你可以简单地设置max = 10。可以使用附加参数来限制特定的转换,例如:

    > x <- c("fooar","ooar","foobaz")
    > agrep("foobar", x, value=T, max = list(all = 3, del = 0, ins = 0))
    [1] "foobaz"
    

    在您的情况下,您可以使用max = list(all = 10 ,del = 10, ins = 10, sub = 10))

    【讨论】:

    • 谢谢!有用。是否可以重视字符串的特定部分?比如说,匹配应该基于名字而不是第二个名字。
    • 就我而言没有。如果你想要类似的东西,你必须提供自己的逻辑。
    • 说实话,这对我来说仍然没有意义。对于 OP 的示例,如果使用 agrep(pat, x, value=T, max = list(all = 10 ,del = 10, ins = 0, sub = 10)) 则不会返回任何内容。这没有任何意义 - 4 次删除,仅此而已,"abteam" 匹配 "ab"
    • 好点。有趣的是Python TRE library 返回匹配:import tre; fz=tre.Fuzzyness(maxerr=10, maxdel=10, maxins=0, maxsub=10); pt=tre.compile("abteam"); pt.search("ab", fz)
    • @zero323 - 好吧,那我就难住了。 agrep 让我非常困惑,以至于我过去通常使用 adist - 至少它提供了我可以测试的很好的清晰值。
    猜你喜欢
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多