Markov noodles is a minimalistic library for generating text using Markov chains.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bin Adapt the gem's structure to fit better with current standards Jun 26, 2017
lib Add documentation Jun 27, 2017
spec Fix rubocop offenses Jun 27, 2017
.gitignore Adapt the gem's structure to fit better with current standards Jun 26, 2017
.rspec Adapt the gem's structure to fit better with current standards Jun 26, 2017
.rubocop.yml
.travis.yml Adapt the gem's structure to fit better with current standards Jun 26, 2017
.yardopts
Gemfile Adapt the gem's structure to fit better with current standards Jun 26, 2017
LICENSE.txt
README.md
Rakefile
markov_noodles.gemspec Fix rubocop offenses Jun 27, 2017
saved_dictionary.dict Fix readme typo Aug 11, 2015

README.md

Markov noodles

Markov noodles is a minimalistic library for generating text using Markov chains.

Installation

gem install markov_noodles

Usage

Here's an example of analysing a string and generating a sentence.

noodle = MarkovNoodles.new
noodle.analyse_string('Here is a string.')
noodle.generate_sentence

Here's an example of analysing a text file and generating multiple sentences.

noodle = MarkovNoodles.new
noodle.analyse_file('input.txt')
noodle.generate_n_sentences(10)

You can save and load dictionaries.

noodle = MarkovNoodles.new
noodle.analyse_string('Here is a string.')
noodle.save_dictionary('saved_dictionary.dict')

# after a while...

noodle_two = MarkovNoodles.new
noodle_two.load_dictionary('saved_dictionary.dict')
noodle_two.generate_sentence

Default dictionary depth is two but you can change it during initialization.

so_deep = MarkovNoodles.new(3) # => creates a dictionary of depth 3

So what exactly does this do?

This library uses Markov chains to generate superficially real-looking text given a sample document. This method has been used to generate comics as well as math research papers that even got accepted by a journal.

You should feed it a lot of text in order to get good results. If there's not enough data to work with it will just keep re-using same sentences that were in original document.

Here's a simple example of generated 'original' sentence with very minimal input.

noodle = MarkovNoodles.new
noodle.analyse_string("I like pie and eat it. I like pony and eat with it")
noodle.generate_sentence # => "I like pie and eat with it."  

Here's an example text I got from analysing Adventures of Huckleberry Finn by Mark Twain.

He grabbed his gun across his left hand, says the great tragedy will be glad when he was back and got into my window just before day was breaking. Why, what in the nation do they will mention it to labboard, in the world let me suffer; can bear it. We got an old hair trunk with the family, and a round ball, and lots of things was scattered about we reckoned the duke's great-grandfather and all that. Miss Watson would say, over a dead, dull, solid blue, like a fishing-worm, and let them go by; and told me why, and I didn't go.  Here, I'll put a good big cavern in the crowd, though maybe not for kingdoms.

Good luck, have fun!