Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ozlerhakan/markov-chain

A markov chain implementation written with Python
https://github.com/ozlerhakan/markov-chain

Last synced: 6 days ago
JSON representation

A markov chain implementation written with Python

Awesome Lists containing this project

README

        

= Markov Chain

You can import the markov.py file into the python repl:

----
$ cd markov-chain/
$ python3
>>> import markov
>>> markov.get_table('abcdabc')
{'a': {'b': 2}, 'b': {'c': 2}, 'c': {'d': 1}, 'd': {'a': 1}}
>>> m = markov.Markov('abcs', size=3)
>>> m.tables
{'a': {'b': 1}, 'b': {'c': 1}, 'c': {'s': 1}}, {'ab': {'c': 1}, 'bc': {'s': 1}}, {'abc': {'s': 1}}]
>>> m = markov.Markov('abcs', size=5)
>>> m.tables
{'a': {'b': 1}, 'b': {'c': 1}, 'c': {'s': 1}}, {'ab': {'c': 1}, 'bc': {'s': 1}}, {'abc': {'s': 1}}, {}, {}]
5 dictionaries
>>> m.predict('z')
Traceback (most recent call last):
File "", line 1, in
File "/Users/hakan/IdeaProjects/python3-live/markov.py", line 104, in predict
raise KeyError(f'{data_in} not in table')
KeyError: 'z not in table'
>>> exit()
----

Alternatively, you can directly run the markov app so as to predict whether a given text exists or not over the terminal as follows:

----
$ python markov.py -h
usage: markov.py [-h] [-f FILE] [-s SIZE] [--encoding ENCODING] [--word]

Markov chain app

optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE Input file
-s SIZE, --size SIZE Markov size
--encoding ENCODING Input encoding (default utf-8)
--word Create a Word Markov
$ python markov.py -f dq.txt -s 5 --word
>START
OF
>DON
QUIXOTE
>don
don missing
>Don
Quixote
> Project
Traceback (most recent call last):
File "markov.py", line 228, in
main(sys.argv[1:]) # do not include markov.py itself
File "markov.py", line 145, in main
repl(m)
File "markov.py", line 151, in repl
res = m.predict(txt)
File "markov.py", line 94, in predict
raise IndexError(f'{data_in}\'s length exceeds the size {self.size}')
IndexError: Project's length exceeds the size 5
----

=== Coverage Report

Once you install the coverage package via pip `pip install -r requirements.txt`, you run the coverage command with different forms:

----
$ coverage html markov_test.py
----

The command above should create a folder called `htmlcov` that contains the `index.html` file illustrating the coverage result.

The command using `run` runs the the tests on terminal:

----
$ coverage run markov_test.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
----