"""Shared methods for the Markov module.""" import logging from markov.models import MarkovContext, MarkovState logger = logging.getLogger(__name__) def learn_line(line, context_name): """Create a bunch of MarkovStates for a given line of text.""" logger.debug("learning %s...", line[:40]) context, created = MarkovContext.objects.get_or_create(name=context_name) words = line.split() words = [MarkovState.start1, MarkovState.start2] + words + [MarkovState.stop] for word in words: if len(word) > MarkovState._meta.get_field('k1').max_length: return for i, word in enumerate(words): logger.debug("'{0:s}','{1:s}' -> '{2:s}'".format(words[i], words[i + 1], words[i + 2])) state, created = MarkovState.objects.get_or_create(context=context, k1=words[i], k2=words[i + 1], v=words[i + 2]) state.count += 1 state.save() if i > len(words) - 4: break