-3

いくつかの単純なデータを含むテキスト ファイルがあるとします。

elephant  dog
elephant  cat
elephant  dog
cat  dog
cat  elephant

そして、単語がどのくらいの頻度で互いに関連付けられているかを確認して出力する必要があります (象と犬 2 回、象と猫 2 回、猫と犬 1 回)。どうすればそれを行うことができますか?

4

3 に答える 3

1

コメントはさておき、この質問と回答が削除される可能性があることを理解した上で ;-)、次のことを提案します。

pairs = string.lines.collect {|l| l.chomp.split('  ').sort.join(',')}  # eliminate ordering diffs
pairs.uniq.each {|p| puts "#{p} = #{pairs.count(p)}"}

http://rubyfiddle.com/riddles/a47c8を参照してください。

基準と反対票を投じるプロセスには「作業が必要」だと思うので、これを提供しています。

于 2013-07-01T16:44:03.607 に答える
0
s = <<_
elephant  dog
elephant  cat
elephant  dog
cat  dog
cat  elephant
_

s.scan(/(\w+)\s+(\w+)/).map(&:sort).inject(Hash.new(0)){|h, pair| h[pair]+= 1; h}

結果:

{
  [
    "dog",
    "elephant"
  ] => 2,
  [
    "cat",
    "elephant"
  ] => 2,
  [
    "cat",
    "dog"
  ] => 1
}
于 2013-07-01T16:44:50.280 に答える
0
s = <<-end
elephant  dog
elephant  cat
elephant  dog
cat  dog
cat  elephant
end

ar = s.split("\n").map{|i| i.split}
# => [["elephant", "dog"],
#     ["elephant", "cat"],
#     ["elephant", "dog"],
#     ["cat", "dog"],
#     ["cat", "elephant"]]
ar.each_with_object({}){|i,h| h[i.sort] = ar.count{|j| i == j or i == j.reverse}}
# => {["dog", "elephant"]=>2, ["cat", "elephant"]=>2, ["cat", "dog"]=>1}
于 2013-07-01T20:18:52.830 に答える