Module: CodeModels

Defined in:
lib/emf/stats.rb

Defined Under Namespace

Classes: CountingMap

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.entropy(counting_map) ⇒ Object



42
43
44
45
46
47
48
49
# File 'lib/emf/stats.rb', line 42

def self.entropy(counting_map)
  s = 0.0  
  counting_map.each do |k,v|
    p = counting_map.p(k)
    s += p*Math.log(p)
  end
  -s
end

.load_models_from_dir(dir, verbose = false, max = -1)) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/emf/stats.rb', line 70

def self.load_models_from_dir(dir,verbose=false,max=-1)
  per_type_values_map = Hash.new do |pt_hash,pt_key| 
    pt_hash[pt_key] = Hash.new do |pa_hash,pa_key|
      pa_hash[pa_key] = CountingMap.new
    end
  end

  n = 0
  files = Dir[dir+'/**/*.json']
  files = files[0..(max-1)] if max!=-1
  files.each do |f|
    n+=1
    puts "...#{n}) #{f}" if verbose
    model = ::JSON.load_file(f,max_nesting=500)
    EMF.traverse(model) do |n|
      if n
        puts "\tnode: #{n['type']}" if verbose
        EMF.attrs(n).each do |a|
          puts "\t\tattr: #{a}" if verbose
          per_type_values_map[n['type']][a].inc(n[a])
        end
      end
    end
  end
  per_type_values_map
end

Instance Method Details

#combine(arr1, arr2, &op) ⇒ Object



63
64
65
66
67
# File 'lib/emf/stats.rb', line 63

def combine(arr1,arr2,&op)
  arr1.each do |el1|
    arr2.each {|el2| op.call(el1,el2)}
  end
end

#combine_self(arr, &op) ⇒ Object



55
56
57
58
59
60
61
# File 'lib/emf/stats.rb', line 55

def combine_self(arr,&op)
  for i in 0..(arr.count-2)
    for j in (i+1)..(arr.count-1)
      op.call(arr[i],arr[j])
    end
  end
end

#idf(n, n_docs) ⇒ Object



51
52
53
# File 'lib/emf/stats.rb', line 51

def idf(n,n_docs)
  Math.log(n_docs.to_f/n.to_f)
end