我正在构建一个应用程序,它根据用户的电影输入返回结果。如果用户搞砸了并且忘记将电影的标题隔开,有没有办法我仍然可以接受输入并返回正确的数据?例如,“outofsight”仍将被解释为“outofsight”。
问问题
86 次
5 回答
3
没有正则表达式可以以一种好的和可靠的方式做到这一点。您可以尝试像Solr这样的搜索服务器。
或者,您可以在用户输入的 GUI(如果有的话)中自动完成,这样可以减轻用户最终可能会犯的一些常见错误。
例子:
- 用户想要搜索“outofsight”
- 开始输入“out”
- 将“看不见”视为建议
- 从建议中选择“看不见”
- ???
- 利润!!!
于 2012-06-18T20:13:33.943 回答
2
没有正则表达式可以告诉您单词 break 应该在哪里。例如,如果输入是“offlight”,它应该返回“Off Light”还是“Of Flight”?
于 2012-06-18T19:53:44.457 回答
1
你不能用正则表达式来做到这一点,除非你想存储一个或多个模式来匹配每个电影记录。那将是愚蠢的。
捕捉轻微拼写错误的更好方法是计算用户键入的内容与您的电影标题之间的Levenshtein 距离。但是,当您的电影列表很大时,这将成为一个相当缓慢的操作,因此您最好使用像 Lucene/Solr 这样擅长此类事情的专用搜索引擎。
于 2012-06-18T21:29:18.990 回答
1
如果没有字典和某种模糊搜索算法,这是不可能的。对于后者,请参阅如何在 Ruby 中进行模糊子字符串匹配?.
于 2012-06-18T19:50:03.287 回答
1
您可以取一个字符串并放在\s*
每个字符之间。
所以outofsight
将转换为:
o\s*u\s*t\s*o\s*f\s*s\s*i\s*g\s*h\s*t
...和匹配out of sight
。
于 2012-06-18T20:06:28.843 回答