代码之家  ›  专栏  ›  技术社区  ›  dev101

regex/启发式检测重复单词,例如“gfgfgfgf”“dadadada”“sdsdsd”

  •  -4
  • dev101  · 技术社区  · 7 年前

    如何使用正则表达式搜索单词中的重复模式,以便检测“垃圾”或伪单词,如“gfgfgfg”和类似的,但不限于 创造性的 像“aweesssoome”、“omgg”等词。

    1. 如果是“ 绿色绿色绿色荧光 g“regex search/detection/result应该是肯定的(“gf”检测到的基本模式,它最终构建了整个单词,记住“hanging”最后一个字符“g”)

    2. 就单词而言” 阿韦索米 “它应该返回false,因为没有重复的模式用于构造 整个单词 .


    可能重复 标记方式 拉贾菲 :

    问题 Detect repetitions in string Simple test 在我在regex101.com上发布的链接中可以作为一个证据,看看为什么它不能满足我的要求。

    上面的方法同样可以检测相邻单词的重复,并限制创造性的(“有效的”)单词,这不是一个理想的效果。

    “this is”--检测“is”作为两个独立单词中的重复(“is is”模式匹配)。

    “awesooommeee”--检测“o”、“m”和“e”等单个字母的重复。


    寻找这个解决方案有点困难,所以我不得不问这个问题。

    首先,一点背景故事:

    • 我有一篇关于 重述
    • 有时(每周左右)有人试图搞笑,并以类似的形式发布垃圾评论:

    SDSDSDS

    你明白了。他们是在测试一个自动化的reCaptcha旁路系统作为概念的证明,还是仅仅是为了搞笑,我不知道,也不在乎(很可能两者兼而有之)。

    (编辑)有趣的是,没有其他帖子会受到这类垃圾评论的影响。

    但是,它也必须足够好,以避免误报。

    例如,如果一个评论有一个重复的单词,就像上面所说的,那么它绝对是一个垃圾邮件。

    另一方面,如果它只是在正常句子的中间有一个错别字,它应该通过。

    现在,我已经可以“听到”下面的评论为什么不使用Akismet。或解决方案X。或解决方案Y。为什么外部评论系统不喜欢 . 因为,我不能。一定是内部的。我希望简单一点。我已经有一些东西可以防止很多垃圾,但对于这种特殊情况,它们都会失败。

    这是一个正则表达式示例,它是这个答案的变体 here

    (.+\w)(?=\1+)/gu
    

    see live regex101 example

    它的问题是,在下面的例子中,它将通过大部分时间,但它也会触发误报:

    正确/正确检测:

    爸爸爸爸

    萨德萨德

    萨萨萨萨

    SDSDSDS

    快进快退

    布拉布拉赫

    爱你爱你

    波波波波普

    嗨,我不认为这是垃圾邮件。

    检测不当/不正确(假阳性):

    我很喜欢这个。真是太棒了!

    现在,这很棘手。过滤器完全按照指示执行,但是,“ooovv”和“oommee”模式并不像上面列出的第一个模式(“gfgfgfgf”等)那样完全重复。过滤器检测“oo”模式重复。是的,没错,但不是我想要的目标。

    有没有人知道我该如何改进正则表达式检测,使其更聪明一点?

    谢谢!

    1 回复  |  直到 6 年前
        1
  •  0
  •   dev101    6 年前

    我终于解决了!一行正则表达式:)

    寻找 我找到了必要的线索。

    这是一个问题: Matching on repeated substrings in a regex the particular answer 这激励我找到了解决办法。

    捕获组 回溯 为了同时包含字母和数字,在上述原始答案的稍加修改的regex中:

    ^([a-z0-9]{2,}).*(\1)$/gumi
    

    例子: https://regex101.com/r/xG40cL/1

    上述解决方案的另一个变体是包含单个字符,这样具有偶数和奇数字符(偶数和奇数对称)的单词也将匹配(例如“ooo”、“iii”等):

    ^([a-z0-9]{1,}).*(\1)$/gumi
    

    https://regex101.com/r/m9aqNk/1

    它仍然不是完美的,但绝对更好,更接近理想的情况。

    很抱歉每个人都这么痛苦,因为现在我明白了我正在寻找的关于regex的正确术语(它被称为 回溯