def __init__(self, fnames, state_size=3): """ Recommended `state_size` in [2,5] """ if isinstance(fnames, str): fnames = [fnames] terms = [] for fname in fnames: terms += data.load_lexicon(fname) mem = defaultdict(lambda: defaultdict(int)) for t in terms: # Beginning & end mem['^'][t[:state_size]] += 1 mem[t[-state_size:]]['$'] += 1 for i in range(len(t) - state_size): prev = t[i:i+state_size] next = t[i+1:i+1+state_size] mem[prev][next] += 1 self.mem = mem self.state_size = state_size
import random from saltbeef.generate import data, markov animals = data.load_lexicon('data/animals.txt') adjs = data.load_lexicons('data/adjectives/*.txt') advs = data.load_lexicons('data/adverbs/*.txt') cnt_nouns = data.load_lexicons('data/countable_nouns/*.txt') ucnt_nouns = data.load_lexicons('data/uncountable_nouns/*.txt') verbs = data.load_lexicons('data/verbs/*.txt') prefixes = data.load_lexicon('data/prefixes.txt') nation_mkv = markov.Markov('data/countries.txt') anim_mkv = markov.Markov(['data/pokemon/pokemons.txt', 'data/animals.txt', 'data/monsters.txt'], state_size=3) item_mkv = markov.Markov(['data/pokemon/items.txt', 'data/star_trek/techs.txt', 'data/w40k/upgrades.txt'], state_size=3) abil_mkv = markov.Markov(['data/pokemon/moves.txt', 'data/heroes_powers.txt', 'data/pokemon/abilities.txt', 'data/dota_skills.txt', 'data/lol_skills.txt', 'data/w40k/abilities.txt'], state_size=3) def name(): vocabs = [ random.choice([adjs, nationalities]), [anim_mkv.generate() for i in range(100)] ] names = [random.choice(vocab) for vocab in vocabs]