检测字符串Ruby中的常用单词

时间:2012-12-27 19:57:32

标签: ruby string

如何在Ruby中检测两个或多个句子之间的公共子字符串。

我有很多字符串:

  • John D
  • Paul John
  • 约翰

我必须得到子串John,我该如何实现呢?

由于

3 个答案:

答案 0 :(得分:2)

解决一般情况:

def count_tokens(*args)
  tokens = args.join(" ").split(/\s/)
  tokens.inject(Hash.new(0)) {|counts, token| counts[token] += 1; counts }
end

counts = count_tokens("John D", "Paul John", "John")
# => {"John"=>3, "D"=>1, "Paul"=>1}

这会将每个字符串拆分为标记,然后计算每个标记的实例数。从那里,对哈希进行排序以获得最常用的令牌是微不足道的。

答案 1 :(得分:1)

找到最新的元素,然后进行比较。

list_of_strings = ["some", "random", "strings"]

def most_common_value(a)
  a.group_by do |array_element|
    array_element
  end.values.max_by(&:size).first
end

list_of_strings.each do |array_element|
  if /^#{most_common_value(list_of_strings)}$/ =~ array_element
    puts array_element
  end
end

答案 2 :(得分:1)

def string_count(sentence)
  counts = Hash.new(0)
  str_array = sentence.downcase.scan(/[\w]+/)
  for string in str_array
    counts[string] += 1
  end
  counts
end

将你的句子传递给string_count("John D John Paul John") 会产生输出。

# => {"john"=>3, "d"=>1, "paul"=>1}

希望这有帮助!