julia - Julia 中的模糊正则表达式匹配

标签 julia fuzzy-comparison

有没有办法在 Julia 中进行模糊正则表达式匹配?

我构建了以下正则表达式测试:

toMatch = Regex(word,"i")
ismatch(toMatch,input_string)

我希望能够进行此测试,但允许匹配中有一定的自由度,并通过编辑距离来指定这一点。

我找到了 Levenshtein 包,它可以计算距离,但不知道如何将其合并到这个逻辑中。例如:

levenshtein("hello","hllo")`
> 1

最佳答案

(这个答案与正则表达式无关,但它涵盖了一些用例。)

我不知道这是否适合您的用例。但看起来您正在尝试查找文本中是否存在某个单词(或紧密的拼写错误)。如果文本由空格分隔,并且您的单词不包含空格,您可以尝试以下操作:

nopunct(s) = filter(c -> !ispunct(c), s)
nfcl(s) = normalize_string(s, decompose=true, compat=true, casefold=true,
                              stripmark=true, stripignore=true)
canonicalize(s) = nopunct(nfcl(s))
fuzzy(needle, haystack, n) = any(
    w -> levenshtein(w, canonicalize(needle)) < n,
    split(canonicalize(haystack)))

它的作用大致是:

nfcl 通过去除重音符号、忽略大小写和执行 unicode 标准化,标准化具有类似“人类”外观的字符串。这对于模糊匹配非常有用:

julia> nfcl("Ce texte est en français.")
"ce texte est en francais."

nopunct 去除标点符号,进一步简化字符串。

julia> nopunct("Hello, World!")
"Hello World"

canonicalize 只是结合了这两种转换。

然后我们检查干草堆中的任何单词(被空格分割)是否在针的 n 范围内。

示例:

julia> fuzzy("Robert", "My name is robrt.", 2)
true

julia> fuzzy("Robert", "My name is john.", 2)
false

这绝不是一个完整的解决方案,但它涵盖了许多常见用例。对于更高级的用例,您应该查看 the subject更深入。

关于julia - Julia 中的模糊正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37933471/

相关文章:

parallel-processing - Julia pmap : How to effectively send helper functions to other workers?

dictionary - 嵌套字典中无意义的MethodError?

math - Julia 中具有函数字段的不可变类型

julia - 如何在 Julia 中使用 Intel MKL 而不是 libopenblas

string - 使用三元组相似度运算符进行多列相似度比较 %

string - 将字符串与拼写错误匹配的快速方法

algorithm - 旅行商-限制长度

c# - 使用MinHash查找2张图像之间的相似性

excel - 如何模糊匹配相邻的单元格?

python - Jellyfish 的 Damerau–Levenshtein 距离计算有问题吗?