Markov: rename internal methods to make them clear

This commit is contained in:
Brian S. Stephan 2014-05-03 20:47:48 -05:00
parent 3856a1e95b
commit 244720934c
2 changed files with 23 additions and 23 deletions

View File

@ -26,7 +26,7 @@ import time
from dateutil.relativedelta import relativedelta
from markov.models import MarkovContext, MarkovState, MarkovTarget
from markov.views import _generate_sentence, _learn_line
from markov.views import _generate_line, _learn_line
from extlib import irclib
@ -140,14 +140,14 @@ class Markov(Module):
self.lines_seen.append(('.self.said.', datetime.now()))
return self.irc.reply(event, u"{0:s}: {1:s}".format(nick,
u" ".join(_generate_sentence(context, topics=topics))))
u" ".join(_generate_line(context, topics=topics))))
else:
# i wasn't addressed directly, so just respond
topics = [x for x in what.split(' ') if len(x) >= 3]
self.lines_seen.append(('.self.said.', datetime.now()))
return self.irc.reply(event, u"{0:s}".format(u" ".join(_generate_sentence(context,
topics=topics))))
return self.irc.reply(event, u"{0:s}".format(u" ".join(_generate_line(context,
topics=topics))))
def markov_learn(self, event, nick, userhost, what, admin_unlocked):
"""Learn one line, as provided to the command."""
@ -190,12 +190,12 @@ class Markov(Module):
topics = [x for x in line.split(' ') if len(x) >= 3]
self.lines_seen.append(('.self.said.', datetime.now()))
return u" ".join(_generate_sentence(context, topics=topics,
min_words=min_size, max_words=max_size))
return u" ".join(_generate_line(context, topics=topics,
min_words=min_size, max_words=max_size))
else:
self.lines_seen.append(('.self.said.', datetime.now()))
return u" ".join(_generate_sentence(context, min_words=min_size,
max_words=max_size))
return u" ".join(_generate_line(context, min_words=min_size,
max_words=max_size))
def thread_do(self):
"""Do various things."""

View File

@ -30,7 +30,7 @@ def context_index(request, context_id):
start_t = time.time()
context = get_object_or_404(MarkovContext, pk=context_id)
chain = ' '.join(_generate_sentence(context))
chain = ' '.join(_generate_line(context))
end_t = time.time()
return render(request, 'markov/context.html', {'chain': chain,
@ -96,7 +96,7 @@ def teach_line(request):
return render(request, 'markov/teach_line.html', {'form': form})
def _generate_line(context, topics=None, max_words=30):
def _generate_sentence(context, topics=None, max_words=30):
"""Generate a Markov chain."""
words = []
@ -133,37 +133,37 @@ def _generate_line(context, topics=None, max_words=30):
return words
def _generate_longish_line(context, topics=None, min_words=4, max_words=30):
def _generate_longish_sentence(context, topics=None, min_words=4, max_words=30):
"""Generate a Markov chain, but throw away the short ones unless we get desperate."""
tries = 0
while tries < 5:
line = _generate_line(context, topics=topics, max_words=max_words)
if len(line) >= min_words:
return line
sent = _generate_sentence(context, topics=topics, max_words=max_words)
if len(sent) >= min_words:
return sent
tries += 1
# if we got here, we need to just give up
return _generate_line(context)
return _generate_sentence(context)
def _generate_sentence(context, topics=None, min_words=15, max_words=30):
"""String multiple lines together into a coherent sentence."""
def _generate_line(context, topics=None, min_words=15, max_words=30):
"""String multiple sentences together into a coherent sentence."""
tries = 0
sentence = []
line = []
while tries < 5:
sentence += _generate_longish_line(context, topics=topics, max_words=max_words)
if len(sentence) >= min_words:
return sentence
line += _generate_longish_sentence(context, topics=topics, max_words=max_words)
if len(line) >= min_words:
return line
else:
sentence[-1] += random.choice([',', '.', '!'])
line[-1] += random.choice([',', '.', '!'])
tries += 1
# if we got here, we need to give up
return sentence
return line
def _get_word_out_of_states(states, backwards=False):