如何检测"拼写错误"对于某个短语或正则表达式?

时间:2013-09-09 14:01:03

标签: .net regex algorithm spell-checking phrase

如何检测拼写错误,但仅针对特定短语。考虑它的另一种方法是如何检测某个正则表达式的拼写错误。

例如,我不想要一个通用的拼写检查器,我发现了多个资源。我不想要一个通用的拼写检查器,我再次找到了多个资源。

我如何为一个相对恒定的值写一个拼写检查器...说:

超级秘密13-12345

它应该总是说“超级秘密NN-NNNNN”(N表示任何0-9号码)。

它会将以下内容标记为“拼写错误”:

  1. Ssuper Secret 13-12345
  2. 超级秘密1312345
  3. Sper Scret 13-123456
  4. Spuer Secret 13-12345
  5. 超级秘密
  6. 13-12345
  7. NOT 将以下内容标记为“拼写错误”:

    1. 超级秘密13-12345
    2. 任何其他随机词
    3. 超人飞越丛林
    4. 我最担心的是额外的字符泄漏,转置字符或不遵循NN-NNNNN格式的数字。

      我觉得这是一个值得回答的问题,但我可能不会使用正确的词语向Google或SO询问。

      我在.NET中编写它,但显然可以移植任何东西。

2 个答案:

答案 0 :(得分:1)

这不是一个正则表达式的好地方:你需要一个正则表达式来检测每种可能的拼写错误。相反,你应该看Levenshtein distance。它的工作方式如下:

  1. 使用占位符替换所有无效字符,例如“!”。
  2. 用不同的占位符替换所有数字,例如“#”。
  3. 从“超级秘密## - #####”计算Levenshtein距离。
  4. 如果距离低于某个值且不为0,则返回true。否则,返回false。
  5. 实施后,请在步骤4中使用阈值来匹配所需的行为。

    编辑:“无效字符”可以表示除“Superct0123456789-”之外的任何字符,或者它可以表示除“ - ”之外的任何非字母数字。最终结果应该是相同的。

答案 1 :(得分:0)

为什么不搜索您的数字模式,并查找超级机密信息?如果不存在,则可以捕获其中的所有内容,看看是否是您要查找的拼写错误?然后,您可以添加一个简单的replace-或re.sub()-以输入正确的拼写?现在,您必须小心,并缓慢构建正则表达式。关于环顾四周的事情不是固定长度,但我现在忘记了是向前看还是向后看是否存在该问题。如果您遇到此问题,则有解决方法。为您的号码分别设置捕获组-严格和特定-为您的短语设置另一个-更加灵活,例如使用?作为量词和已知错误拼写的字符集[sS]。