31 lines
1012 B
Python
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
|