假设我有一个包含一些简单数据的文本文件:
elephant dog
elephant cat
elephant dog
cat dog
cat elephant
我需要检查单词相互关联的频率并输出(大象和狗 2 次,大象和猫 2 次,猫和狗 1 次)。我该怎么做呢?
假设我有一个包含一些简单数据的文本文件:
elephant dog
elephant cat
elephant dog
cat dog
cat elephant
我需要检查单词相互关联的频率并输出(大象和狗 2 次,大象和猫 2 次,猫和狗 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
我提供这个是因为我认为标准和投票过程“需要工作”。
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}
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
}