class MalayalamMarkov: def __init__(self, input_db=None, output_db=None): malayalam_scanner = RegExpScanner(expr=MALAYALAM_EXPR) malayalam_formatter = Formatter(replace=MALAYALAM_REPLACE) if input_db: storage = SqliteStorage(db=input_db) elif output_db: storage = SqliteStorage(db=output_db) self.markov = MarkovText(scanner=malayalam_scanner, formatter=malayalam_formatter, storage=storage) def add_text(self, text): if text: self.markov.data(text) def predict(self, start, words, count): results = [] for i in range(count): results.append( self.markov(max_length=words, reply_to=start, reply_mode=ReplyMode.END)) return results def save(self): self.markov.save() def from_db(self, db_filename): storage = SqliteStorage(db=db_filename) self.markov = MarkovText.from_storage(storage)
async def markov(ctx, id): url = "https://www.fimfiction.net/story/download/" + id + "/txt" markovgenerate = MarkovText() print('Getting story with id {0}...'.format(id)) markovgenerate.data(requests.get(url).content.decode(encoding="UTF-8")) print('Story received.') response = markovgenerate(max_length=5000) print('Markov chain response generated.') await ctx.send(response)
async def markovgen(self, ctx): randomized_int = random.randint(1, 602) async with aiofiles.open(f"markov/markov ({randomized_int}).txt") as f: text = MarkovText() async for line in f: text.data(line, part=True) clean = await commands.clean_content(fix_channel_mentions=True ).convert(ctx, text()) await ctx.send(clean)
def markovchain_example(): markov = MarkovText() with open('word_generation/definitions.txt') as fp: for line in fp: markov.data(line, part=True) markov.data('', part=False) print(markov(max_length=16) + '\n') print(markov(max_length=16, reply_to='sentence start', reply_mode=ReplyMode.END) + '\n')
def test_markov_text_generate(mocker, ss, data, args, res): fmt = mocker.patch('markovchain.text.MarkovText.format', wraps=list) markov = MarkovText(parser=Parser(state_sizes=[ss]), scanner=Scanner(lambda x: x), storage=JsonStorage(backward=True)) markov.data(data) if isinstance(res, type): with pytest.raises(res): markov(*args) else: assert markov(*args) == res assert fmt.call_count == 1
#Not my code, this was just to test the Markov Chain Python in-built library. Source of the setup and code goes to: http://dead-beef.tk/markovchain/ from markovchain import JsonStorage from markovchain.text import MarkovText, ReplyMode markov = MarkovText() #with open('data_extracted_6.txt') as fp: with open('NoPrefaceEmilyDickinsonBooks12242.txt') as fp: markov.data(fp.read()) with open('NoPrefaceEmilyDickinsonBooks12242.txt') as fp: for line in fp: markov.data(line, part=True) markov.data('', part=False) print(markov()) print(markov(max_length=40, reply_to='sentence start', reply_mode=ReplyMode.END)) markov.save('markov.json') markov = MarkovText.from_file('markov.json') #NOTE: Fix the whole Sentence Start. Shinanigan in the output - why is it even printing that out?
def generate_markov(input_path): markov = MarkovText() with open(input_path) as fp: markov.data(fp.read()) return markov
def test_markov_text_data(mocker): mock = mocker.patch('markovchain.Markov.data', return_value=1) markov = MarkovText() assert markov.data([1, 2], True) == 1 mock.assert_called_once_with([1, 2], True)