Class: Ankusa::MongoDbStorage
- Inherits:
-
Object
- Object
- Ankusa::MongoDbStorage
- Defined in:
- lib/ankusa/mongo_db_storage.rb
Instance Method Summary collapse
- #classnames ⇒ Object
- #close ⇒ Object
- #doc_count_totals ⇒ Object
- #drop_tables ⇒ Object
- #get_doc_count(klass) ⇒ Object
- #get_total_word_count(klass) ⇒ Object
- #get_vocabulary_sizes ⇒ Object
- #get_word_counts(word) ⇒ Object
- #incr_doc_count(klass, count) ⇒ Object
- #incr_total_word_count(klass, count) ⇒ Object
- #incr_word_count(klass, word, count) ⇒ Object
- #init_tables ⇒ Object
-
#initialize(opts = {}) ⇒ MongoDbStorage
constructor
A new instance of MongoDbStorage.
- #reset ⇒ Object
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={}) = { :host => "localhost", :port => 27017, :db => "ankusa", :frequency_tablename => "word_frequencies", :summary_tablename => "summary" }.merge(opts) @db = Mongo::Connection.new([:host], [:port]).db([:db]) @db.authenticate([:username], [:password]) if [:password] @ftablename = [:frequency_tablename] @stablename = [:summary_tablename] @klass_word_counts = {} @klass_doc_counts = {} init_tables end |
Instance Method Details
#classnames ⇒ Object
36 37 38 |
# File 'lib/ankusa/mongo_db_storage.rb', line 36 def classnames summary_table.distinct('klass') end |
#close ⇒ Object
110 111 |
# File 'lib/ankusa/mongo_db_storage.rb', line 110 def close end |
#doc_count_totals ⇒ Object
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_tables ⇒ Object
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_sizes ⇒ Object
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_tables ⇒ Object
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 |
#reset ⇒ Object
40 41 42 43 |
# File 'lib/ankusa/mongo_db_storage.rb', line 40 def reset drop_tables init_tables end |