marc is a small, but flexible Markov chain generator
Project description
About
marc (markov chain) is a small, but flexible Markov chain generator.
Usage
marc is easy to use. To build a MarkovChain
pass the object a sequence of items:
from marc import MarkovChain sequence = [ 'Rock', 'Rock', 'Rock', 'Paper', 'Rock', 'Scissors', 'Paper', 'Paper', 'Scissors', 'Rock', 'Scissors', 'Scissors', 'Paper', 'Scissors', 'Rock', 'Rock', 'Rock', 'Paper', 'Scissors', 'Scissors', 'Scissors', 'Rock' ] chain = MarkovChain(sequence)
The learned transition matrix can be accessed through the matrix
attribute:
print(chain.matrix) # [[0.5, 0.25, 0.25], [0.2, 0.2, 0.6], [0.375, 0.25, 0.375]]
Though, the output is perhaps better viewed as a pandas DataFrame
:
import pandas as pd df = pd.DataFrame( chain.matrix, index=chain.encoder.index_, columns=chain.encoder.index_ ) print(df) # Rock Paper Scissors # Rock 0.500 0.25 0.250 # Paper 0.200 0.20 0.600 # Scissors 0.375 0.25 0.375
Use the next
method to generate the next state (seeded or unseeded):
chain.next('Rock') # 'Rock' chain.next() # Paper
The next
method can also generate multiple states with the n
argument:
chain.next('Paper', n=5) # ['Scissors', 'Paper', 'Rock', 'Paper', 'Scissors']
MarkovChain
objects are iterable. This means that they can be passed directly to the next
function:
next(chain) # 'Scissors' next(chain) # Rock
Example
A fully worked example of marc in action (block text provided by quote):
import random import re from quote import quote from marc import MarkovChain quotes = quote('shakespeare', 250) print(quotes[0]) # {'author': 'William Shakespeare', # 'book': 'As You Like It', # 'quote': 'The fool doth think he is wise, but the wise man knows himself to be a fool.'} text = '\n'.join([q['quote'] for q in quotes]) text = text.lower() tokens = re.findall(r"[\w']+|[.,!?;]", text) tokens[:5] # ['the', 'fool', 'doth', 'think', 'he'] chain = MarkovChain(tokens) def generate_sentences(chain, n=2, length=(10, 20)): for _ in range(n): l = random.randint(length[0], length[1]) nonsense = ' '.join(chain.next(n=l)) print(nonsense) generate_sentences(chain) # and unless by some are fascinated by the hour upon the wind faithful # those that hath had a very much as flaws go
Install
pip install -U marc
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size marc-2.0.tar.gz (3.9 kB) | File type Source | Python version None | Upload date | Hashes View hashes |