Skip to content

Instantly share code, notes, and snippets.

@RWJMurphy
Created February 4, 2013 01:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RWJMurphy/4704585 to your computer and use it in GitHub Desktop.
Save RWJMurphy/4704585 to your computer and use it in GitHub Desktop.
Markov chain text generator in python
#!/usr/bin/env python
from __future__ import print_function
import argparse
from collections import defaultdict
import os
import random
import sys
def main(args):
result = os.EX_OK
markov_data = defaultdict(list)
for inputfilename in args.FILE:
key = ("\n",)*args.sequence_length
if inputfilename == '-':
inputfile = sys.stdin
else:
inputfile = open(inputfilename, 'r')
for line in inputfile:
words = line.split(args.delimiter) + ["\n"]
if len(words):
for word in words:
markov_data[key].append(word)
key = key[1:] + (word,)
key = ("\n",)*args.sequence_length
for x in range(args.output_words):
word = random.choice(markov_data.get(key, ("\n",)*args.sequence_length))
key = key[1:] + (word,)
print(word, end=" ")
return result
if __name__ == "__main__":
exit_code = os.EX_OK
parser = argparse.ArgumentParser()
parser.add_argument('--delimiter', '-d', default=None)
parser.add_argument('--sequence-length', '-l', type=int, default=2)
parser.add_argument('--output-words', '-o', type=int, default=1000)
parser.add_argument("FILE", nargs="*", default=['-'])
parsed_args = parser.parse_args()
try:
exit_code = main(parsed_args)
except KeyboardInterrupt:
pass
sys.exit(exit_code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment