如何在 Ruby 中检测两个或多个句子之间的公共子字符串。
我有很多字符串,例如:
- 约翰 D
- 保罗·约翰
- 约翰
我必须得到子字符串 John,我该如何实现呢?
谢谢
解决一般情况:
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}
这会将每个字符串拆分为标记,然后计算每个标记的实例数。从那里开始,对哈希进行排序以获得最常用的标记是微不足道的。
找到最近的元素,然后比较它。
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
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}
希望这可以帮助!