正则表达式拼写错误

时间:2008-12-24 21:20:30

标签: regex

我有一个从数据库中的列表创建的正则表达式,以匹配游戏中建筑物类型的名称。问题是拼写错误,有时那些在游戏中为团队编写说明的人会拼错一个建筑名称,显然正则表达式不会捡起来(即拼写为“大学”和“大学”)。

有关于制作1或2个字母的正则表达式拼写错误拼写的建议吗?

正则表达式是动态生成的,并且可以在能够处理更多负载的本地计算机上运行,​​所以我作为最后的手段以算法方式创建每个单词的版本,其中缺少一个字母,然后另一个单词添加了字母。

我正在使用PHP,但我希望这个问题的任何解决方案都不是特定于PHP的。

6 个答案:

答案 0 :(得分:14)

请允许我向您介绍Levenshtein Distance,衡量字符串之间的差异,将一个字符串转换为另一个字符串所需的转换次数。

它也是built into PHP

因此,我将输入文件拆分为非单词字符,并测量每个单词与目标建筑物列表之间的距离。如果距离低于某个阈值,则假设它是拼写错误。

我认为你可以通过这种方式获得更多的运气,而不是为每种特殊情况制作正则表达式。

答案 1 :(得分:3)

通过查看以前的结果,谷歌实施“你的意思是”也可能有所帮助:

How do you implement a "Did you mean"?

答案 2 :(得分:3)

  

What is Soundex() ? – Teifion (28 mins ago)

soundex类似于levennshtein函数Triptych提到的。这是一种比较字符串的方法。请参阅:http://us3.php.net/soundex

您还可以查看metaphone和similar_text。我会把它放在评论中,但我还没有足够的代表那样做。 :d

答案 3 :(得分:2)

在我们有时使用Soundex()解决这些问题的日子里。

答案 4 :(得分:2)

你很幸运;算法人员已经对正则表达式的近似匹配做了大量工作。这些工具中最古老的可能agrep最初是在亚利桑那大学开发的,现在有一个很好的开源版本。您只需告诉agrep您愿意容忍多少错误,并从那里开始匹配。除了行之外,它还可以匹配其他文本块。 link above链接到较新的GPLed版agrep以及许多特定于语言的库,用于正则表达式的近似匹配。

答案 5 :(得分:1)

这可能有点矫枉过正,但Google的Peter Norvig写了一篇关于用Python编写拼写检查程序的excellent article。这绝对值得一读,可能适用于您的情况。

在文章的最后,他还列出了用其他各种语言提供的算法实现。