我试图弄清楚如何在字符串中找到最重复的单词序列。
我有这个字符串,例如:
s = "this is the time, no it's not. This is the time! no it's not, This is the time? it is the time"
我想找出顺序中最常出现的3个单词。在上面的情况中,它将是'is the time'=>4
我有一种混乱的方式来弄清楚哪个由白色空格分割的单词最重复。
s.strip.downcase.split(/[^\w]+/).group_by(&:to_s).map{ |w|
{w[0]=>w[1].count}}.sort {|x,y| y.values.first <=> x.values.first }.first(3).reduce({}, :merge)
将返回{"the"=>4, "time"=>4, "is"=>4}
这似乎更加激烈,因为它需要在它之前和之后找到单词然后存储该特定组合并在组合出现时增加计数,然后对下一个单词执行相同的操作直到结束串。它每次都处理字符串中较小的子集,因此如果字符串必须变为100万字长,则计算不应该变得更复杂。
是否有任何简单的红宝石惯例来实现这一目标。