RegExp作为表条目

我正在构建一个应用程序,从SMS文本通过Twilio获取输入。我想构建一个表格,将传入的SMS正文与相应的响应进行匹配。 例如,想象一下我正在构建一个NFL短信的东西。 “Redskins”中有人发短信,我们发回信息,“红皮队在联邦快递球场打球” 有人在“小马队”中发表文章,我们发回信息,“小马队是印第安纳州的骄傲。” 这是棘手的部分: 当然,我们的Rails应用程序需要通过正则表达式来解释传入的团队名称,因为很多人会发短信:Redskins或REDSKINS或REDSKIN或Redskin或REDskin ..... 有一个或两个团队,人们可以将RegExp和响应硬编码到控制器......但是有30个团队,这似乎是错误的。 (并且有120个参赛项目 - 比如所有职业体育 - 更糟糕的是)。 有没有任何关于从输入阶段获取团队名称的任何提示,通过DB表阶段在中间进行'RegExp'转换? 提前致谢。     
已邀请:
对于适量的关键字,我建议使用带有关键字和别名的两表方法,始终以小写形式存储。将输入转换为小写。对于每个关键字(例如,红皮),您在别名中手动添加5-10个变体(包括正确的变体),所有变体都具有Alias.keyword_id =关键字的ID。因此,您只需在Alias中搜索用户输入,如果找到匹配项,则可以使用关键字的keyword_id。 它有两个优点:快速且易于扩展...如果您记录“无匹配”,您将获得一个新的别名列表,以便添加一次到dbase。比试图通过正则表达式更容易和更可靠。     
我不认为你想要正则表达式。拼写错误怎么样?为了获得乐于助人(特别是来自txt msg),我想你也希望允许缩短。 也许基于Soundex的图书馆或拼写纠正的事情是最好的。你想要一个最接近的匹配算法而不是图案匹配算法。     
如果文本消息不是太长,您应首先将其切换为单词,然后与团队名称列表进行交集。
array_of_team_names = %w(Redskins Colts ... ) # keep it all capitalized
'cOLts blah blah'.scan(/w+/).map{|word| word.capitalize} & array_of_team_names
# => ['Colts']
如果你想按照drysdam的建议处理错误类型,或者你想要更准确地处理更大的文本,你应该使用一些特定的库。     
我想你要问的是“如何避免将正则表达式硬编码到我的代码中,因为我可能有很多这些代码,而且它们实际上是一个数据元素”? 如果你想与regexp进行匹配,你应该注意你可以从一个字符串创建一个regexp,这样你就可以很容易地得到一个包含字符串形式的regexp列的表。然后,您可以动态创建正用于搜索传入字符串的正则表达式对象数组。诀窍是当你有一场比赛时该怎么做。您需要开发一组规则(还有另一个表),它基本上根据传入的文本说明要选择哪个响应。例如,如果您的规则只是“根据团队名称进行匹配并说出他们在哪里玩”,那就非常简单了。您正在搜索的每个正则表达式都映射到一个动作(“The Bears play in Chicago”)。如果您的规则更复杂(寻找熊,然后查看“计划”一词是否也在“第一个游戏”中,那么您需要另一个表格来映射一个集合匹配响应。     

要回复问题请先登录注册