-1

Ruby で 2 つ以上の文の間で共通の部分文字列を検出するにはどうすればよいですか。

次のような文字列がたくさんあります。

  • ジョン・D
  • ポール・ジョン
  • ジョン

サブストリング John を取得する必要があります。これを実装するにはどうすればよいですか?

ありがとう

4

3 に答える 3

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}

これにより、各文字列がトークンに分割され、各トークンのインスタンス数がカウントされます。そこから、最も一般的に使用されるトークンを取得するためにハッシュを並べ替えるのは簡単です。

于 2012-12-27T20:06:26.253 に答える
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
于 2012-12-27T20:03:01.000 に答える
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}

お役に立てれば!

于 2012-12-27T20:44:44.930 に答える