Ruby on rails Rails-检测字符串中具有精确匹配的关键字

Ruby on rails Rails-检测字符串中具有精确匹配的关键字,ruby-on-rails,ruby,Ruby On Rails,Ruby,这是一个棘手的问题,至少对我来说,因为我是rails新手 soccer = ["football pitch", "soccer", "free kick", "penalty"] string = "Did anyone see that free kick last night, let me get my pen!!!" 我要做的是搜索关键字的实例,但有两个主要规则: 1-不要进行部分比

这是一个棘手的问题,至少对我来说,因为我是rails新手

soccer = ["football pitch", "soccer", "free kick", "penalty"]

string = "Did anyone see that free kick last night, let me get my pen!!!"
我要做的是搜索关键字的实例,但有两个主要规则:

1-不要进行部分比赛即不应将pen与点球进行比赛,必须是全场比赛

2-匹配多组单词,如“美好的一天”、“甜食”、“三人行”(最多3个)

此代码适用于场景1:

def self.check_for_keyword_match?(string,keyword_array)
    string.split.any? { |word| keyword_array.include?(word) }
end

if check_for_keyword_match?(string,soccer)
    soccer.to_set.freeze
    keywords_found.push('soccer')
    # send a response saying Hey, I see you are interested in soccer.
end
在那个例子中,它不会匹配潘,但它会匹配完美的点球

但我也希望它能匹配2-3组关键词,即“任意球”应该匹配,但如果它们是单数关键词,则只有“任意球”和“踢”会匹配。“任意球”的范围太广,和“踢”一样,但“任意球”的范围不广,所以它更能解释他们的兴趣

我可以更改足球数组的格式,但提交的字符串将来自一个松散的帖子,因此我无法控制其格式。在实际的程序中,我有20个左右的带有关键字的数组,但一旦我弄明白如何处理一个,其余的我就可以处理了。

对于操作字符串,这些数组很有用

以下代码应该可以解决您的问题:

def self.check_for_keyword_match?(string, keyword_array)
    keyword_array.any? { |word| Regexp.new('\b' + word + '\b').match(string) }
end
不要拆分
字符串
,而是遍历
关键字数组
,在整个
字符串
中搜索每个关键字

正则表达式添加了一个“单词边界”修饰符
\b
,这样它将只匹配整个单词(规则1,如果您在此处使用
include?
,则关键字“pen”将匹配“惩罚”)。

提示:。按“最长”到“最短”排序,以匹配最长的第一个。