次の配列があります。
str_ary = ["Thursday morning", "Twitter users", "Thursday morning , 140 characters",
"of Twitter users", "the virtual pockets of Twitter users","Beginning Thursday morning , 140 characters","in the virtual pockets of Twitter users"]
それをフィルタリングして、str_ary2 = ["木曜日の朝", "Twitter ユーザー"] を取得したい。
また、そこに一意の文字列がある場合(それは他の文字列の一部ではないので、それも保持したいと思います..)。
それを行う最良の方法は何ですか?
今、私はこれを持っていますが、うまくいきません...
def select_correct_sizes(arrays)
result = []
arrays.each do |a|
arrays.each do |b|
res = nil
if b != a
if a.split(' ').length >= b.split(' ').length
res = self.substract_and_check(a, b)
elsif a.split(' ').length < b.split(' ').length
res = self.substract_and_check(b, a)
end
if !res.nil?
result << res
end
end
end
end
result = result.uniq
return result
end
def substract_and_check(a, b)
res = a.gsub(/#{b}/, '')
res = res.split(' ')
if res.length + b.split(' ').length == a.split(' ').length
puts "#{b} IS PART OF THE #{a}"
return b
elsif text_uniq?(a,b)
puts "#{b} IS UNIQUE"
return b
else
return nil
end
end
def text_uniq?(a,b)
res = a.gsub(/#{b}/, '')
res = res.split(' ')
if res.length == a.split(' ').length
return true
else
return false
end
end
str_ary2 = select_correct_sizes(str_ary)
編集:質問が明確でない場合は申し訳ありません..文字列を抽出する必要があります。
A) 1) 配列の他の文字列に存在する 2) サイズが最小 B) 1) 一意 (たとえば、配列の他の文字列に存在しない)。
すべての文字列はフィルタリングされたフレーズであるため、「the」、「one」などのランダムな個々のジャンク ワードのようなものはありません.
上記の例では、"Twitter users" と "Thursday morning" の両方が配列の別の文字列に含まれています。
したがって、配列に「緑のボール」のようなものが含まれている場合は、配列内の他の文字列に対して一意であるため、それも抽出する必要があります。
それがより明確になることを願っています。そうでない場合はお知らせください。
EDIT2: 上記のコードを回答に使用する人はいないと思います。別のコードまたは詳細な疑似コードも受け入れます..