Class: Ankusa::MongoDbStorage

Inherits:
Object
  • Object
show all
Defined in:
lib/ankusa/mongo_db_storage.rb

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ MongoDbStorage

Returns a new instance of MongoDbStorage.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/ankusa/mongo_db_storage.rb', line 7

def initialize(opts={})
  options = { :host => "localhost", :port => 27017, :db => "ankusa",
              :frequency_tablename => "word_frequencies", :summary_tablename => "summary"
            }.merge(opts)

  @db = Mongo::Connection.new(options[:host], options[:port]).db(options[:db])
  @db.authenticate(options[:username], options[:password]) if options[:password]

  @ftablename = options[:frequency_tablename]
  @stablename = options[:summary_tablename]

  @klass_word_counts = {}
  @klass_doc_counts = {}

  init_tables
end

Instance Method Details

#classnamesObject



36
37
38
# File 'lib/ankusa/mongo_db_storage.rb', line 36

def classnames
  summary_table.distinct('klass')
end

#closeObject



110
111
# File 'lib/ankusa/mongo_db_storage.rb', line 110

def close
end

#doc_count_totalsObject



85
86
87
88
89
90
91
92
93
# File 'lib/ankusa/mongo_db_storage.rb', line 85

def doc_count_totals
  count = Hash.new(0)

  summary_table.find.each do |doc|
    count[ doc['klass'] ] = doc['doc_count']
  end

  count
end

#drop_tablesObject



31
32
33
34
# File 'lib/ankusa/mongo_db_storage.rb', line 31

def drop_tables
  @db.drop_collection(@ftablename)
  @db.drop_collection(@stablename)
end

#get_doc_count(klass) ⇒ Object



105
106
107
108
# File 'lib/ankusa/mongo_db_storage.rb', line 105

def get_doc_count(klass)
  klass_doc = summary_table.find_one(:klass => klass) 
  klass_doc ? klass_doc['doc_count'].to_f : 0.0
end

#get_total_word_count(klass) ⇒ Object



80
81
82
83
# File 'lib/ankusa/mongo_db_storage.rb', line 80

def get_total_word_count(klass)
  klass_doc = summary_table.find_one(:klass => klass)
  klass_doc ? klass_doc['word_count'].to_f : 0.0
end

#get_vocabulary_sizesObject



95
96
97
98
99
100
101
102
103
# File 'lib/ankusa/mongo_db_storage.rb', line 95

def get_vocabulary_sizes
  count = Hash.new(0)

  summary_table.find.each do |doc|
    count[ doc['klass'] ] = doc['vocabulary_size']
  end

  count
end

#get_word_counts(word) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/ankusa/mongo_db_storage.rb', line 66

def get_word_counts(word)
  counts = Hash.new(0)

  word_doc = freq_table.find_one({:word => word})
  if word_doc
    word_doc.delete("_id")
    word_doc.delete("word")
    #convert keys to symbols
    counts.merge!(word_doc.inject({}){|h, (k, v)| h[(k.to_sym rescue k) || k] = v; h}) 
  end

  counts
end

#incr_doc_count(klass, count) ⇒ Object



62
63
64
# File 'lib/ankusa/mongo_db_storage.rb', line 62

def incr_doc_count(klass, count)
  increment_summary_klass(klass, 'doc_count', count)
end

#incr_total_word_count(klass, count) ⇒ Object



58
59
60
# File 'lib/ankusa/mongo_db_storage.rb', line 58

def incr_total_word_count(klass, count)
  increment_summary_klass(klass, 'word_count', count)
end

#incr_word_count(klass, word, count) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/ankusa/mongo_db_storage.rb', line 45

def incr_word_count(klass, word, count)
  freq_table.update({:word => word}, { '$inc' => {klass => count} }, :upsert => true)

  #update vocabulary size
  word_doc = freq_table.find_one({:word => word})
  if word_doc[klass.to_s] == count
    increment_summary_klass(klass, 'vocabulary_size', 1)
  elsif word_doc[klass.to_s] == 0
    increment_summary_klass(klass, 'vocabulary_size', -1)
  end
  word_doc[klass.to_s]
end

#init_tablesObject



24
25
26
27
28
29
# File 'lib/ankusa/mongo_db_storage.rb', line 24

def init_tables
  @db.create_collection(@ftablename) unless @db.collection_names.include?(@ftablename)
  freq_table.create_index('word')
  @db.create_collection(@stablename) unless @db.collection_names.include?(@stablename)
  summary_table.create_index('klass')
end

#resetObject



40
41
42
43
# File 'lib/ankusa/mongo_db_storage.rb', line 40

def reset
  drop_tables
  init_tables
end