X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=data%2Frbot%2Fplugins%2Fmarkov.rb;h=21c4d63172996f6dde039132941a13f6ab97a03e;hb=052217de30c59206d7025b582d4604557a747470;hp=8ccb0caf4bec8185939ce80e8f4338a60df12437;hpb=66320ea8e89492b6815bcd4a2f942c7cd70afa44;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/markov.rb b/data/rbot/plugins/markov.rb index 8ccb0caf..21c4d631 100755 --- a/data/rbot/plugins/markov.rb +++ b/data/rbot/plugins/markov.rb @@ -226,6 +226,8 @@ class MarkovPlugin < Plugin @chains.set_default([]) @rchains = @registry.sub_registry('v2r') @rchains.set_default([]) + @chains_mutex = Mutex.new + @rchains_mutex = Mutex.new @upgrade_queue = Queue.new @upgrade_thread = nil @@ -611,33 +613,37 @@ class MarkovPlugin < Plugin def learn_triplet(word1, word2, word3) k = "#{word1} #{word2}" rk = "#{word2} #{word3}" - total = 0 - hash = Hash.new(0) - if @chains.key? k - t2, h2 = @chains[k] - total += t2 - hash.update h2 + @chains_mutex.synchronize do + total = 0 + hash = Hash.new(0) + if @chains.key? k + t2, h2 = @chains[k] + total += t2 + hash.update h2 + end + hash[word3] += 1 + total += 1 + @chains[k] = [total, hash] end - hash[word3] += 1 - total += 1 - @chains[k] = [total, hash] - # Reverse - total = 0 - hash = Hash.new(0) - if @rchains.key? rk - t2, h2 = @rchains[rk] - total += t2 - hash.update h2 + @rchains_mutex.synchronize do + # Reverse + total = 0 + hash = Hash.new(0) + if @rchains.key? rk + t2, h2 = @rchains[rk] + total += t2 + hash.update h2 + end + hash[word1] += 1 + total += 1 + @rchains[rk] = [total, hash] end - hash[word1] += 1 - total += 1 - @rchains[rk] = [total, hash] end def learn_line(message) # debug "learning #{message.inspect}" - wordlist = message.split(/\s+/).reject do |w| + wordlist = message.strip.split(/\s+/).reject do |w| @bot.config['markov.ignore_patterns'].map do |pat| w =~ Regexp.new(pat.to_s) end.select{|v| v}.size != 0