如何在Ruby中检测两个或多个句子之间的公共子字符串。
我有很多字符串:
我必须得到子串John,我该如何实现呢?
由于
答案 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}
希望这有帮助!