我正在构建一个通过Twilio从SMS文本获取输入的应用程序。我想构建一个表,将传入的SMS正文与适当的响应进行匹配。
例如,假设我正在构建一个NFL文本消息。
有人用“红人队”发短信,我们回短信说,“红人队在FedEx球场打球”;有人用“小马队”发短信,我们回短信说:“小马队是印第安纳州的骄傲。”
这里是棘手的部分:
当然,我们的Rails应用程序需要通过正则表达式来解释传入的团队名称,因为很多人都会发短信:红皮队、红人队或REDSKIN……
对于一个或两个团队,可以将RegExp和响应硬编码到30个团队的controller...but中,这似乎是错误的。(而且有120个条目--说全是职业体育--甚至更糟)。
有没有人有从输入阶段获取团队名称的技巧,通过中间有'RegExp‘转换的DB表阶段?
提前谢谢。
发布于 2011-05-13 12:40:12
对于数量适中的关键字,我建议使用两个表的方法,关键字和别名,总是以小写存储。将输入转换为小写。对于每个关键字(例如,红皮),您可以在别名中手动添加5-10个变体(包括正确的变体),所有这些变体都具有Alias.keyword_id =该关键字的id。因此,您只需在别名中搜索用户输入,如果找到匹配项,您就拥有关键字的keyword_id。
它有两个优点:快速和易于扩展……我给你记下“没有匹配”,你会得到一个新的别名列表,添加到dbase中一次。与尝试使用正则表达式相比,这要容易得多,也更可靠。
发布于 2011-04-05 22:17:18
我认为您不想在这里使用正则表达式。拼写错误怎么办?为了提供帮助(尤其是来自txt msg),我认为你也应该允许缩写。
也许Soundex-based库或拼写更正是最好的选择。您需要的是最接近的匹配算法,而不是模式匹配算法。
发布于 2011-04-05 22:26:44
如果短信不太长,你应该首先将其切成单词,然后与团队名称列表相交。
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建议的那样处理输入错误,或者如果你想更准确地处理更大的文本,你应该使用一些特定于此的库。
https://stackoverflow.com/questions/5553229
复制相似问题