hitomi/markov/lib.py

31 lines
1012 B
Python

"""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