marky_markov 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +12 -11
- data/bin/marky_markov +6 -7
- data/lib/marky_markov/markov_dictionary.rb +2 -0
- data/lib/marky_markov/markov_sentence_generator.rb +1 -1
- data/lib/marky_markov/persistent_dictionary.rb +1 -1
- data/lib/marky_markov.rb +2 -2
- data/marky_markov.gemspec +2 -2
- data/spec/spec_helper.rb +2 -1
- metadata +4 -5
data/README.md
CHANGED
@@ -1,25 +1,20 @@
|
|
1
1
|
Marky Markov and the Funky Sentences
|
2
2
|
====================================
|
3
3
|
|
4
|
-
Marky Markov is
|
4
|
+
Marky Markov is an experiment in Markov Chain generation implemented
|
5
5
|
in Ruby. It can be used both from the command-line and as a library within your code.
|
6
6
|
|
7
7
|
NOTE: 0.3.0 now uses arrays with multiple entries per word instead of a
|
8
8
|
hash key for each word with the value representing number of occurences.
|
9
|
-
While a less elegant solution, it leads to faster text generation.
|
10
|
-
are also now using ox instead of yajl-json to store the dictionary
|
11
|
-
as yajl-json does not appear to support arrays within hashes properly.
|
12
|
-
|
13
|
-
NOTE: In the transition between 0.1.3 to 0.2.0 MarkyMarkov has added the
|
14
|
-
ability to generate proper sentences (generate_n_sentences) instead of simply a
|
15
|
-
maximum number of words. The command-line app has changed to sentences as its default
|
16
|
-
behavior.
|
9
|
+
While a less elegant solution, it leads to much faster text generation.
|
17
10
|
|
18
11
|
# Installation
|
19
12
|
|
20
13
|
gem install marky_markov
|
21
14
|
|
22
|
-
# Module Usage
|
15
|
+
# Imported Module Usage
|
16
|
+
|
17
|
+
## Temporary Dictionary
|
23
18
|
|
24
19
|
A basic usage of the TemporaryDictionary, which parses strings and files into a
|
25
20
|
temporary dictionary that will not be saved to disk.
|
@@ -30,7 +25,9 @@ temporary dictionary that will not be saved to disk.
|
|
30
25
|
markov.parse_file "filename.txt"
|
31
26
|
puts markov.generate_n_sentences 5
|
32
27
|
puts markov.generate_n_words 200
|
33
|
-
markov.clear!
|
28
|
+
markov.clear! # Clear the temporary dictionary.
|
29
|
+
|
30
|
+
## Persistent Dictionary
|
34
31
|
|
35
32
|
Dictionary creates or opens a persistent dictionary at a location defined by its
|
36
33
|
initalizer, and will allow you to build and save a dictionary over multiple runs.
|
@@ -45,6 +42,8 @@ of the dictionary name.
|
|
45
42
|
puts markov.generate_n_sentences 2
|
46
43
|
markov.save_dictionary! # Saves the modified dictionary/creates one if it didn't exist.
|
47
44
|
|
45
|
+
## generate_20_words
|
46
|
+
|
48
47
|
If you keep looking at generate_n_words or generate_n_sentences and wonder why you can't put a
|
49
48
|
number in there, well, you can!
|
50
49
|
|
@@ -65,6 +64,8 @@ creates a dictionary with a depth of three words.
|
|
65
64
|
`{["I", "hope", "this"] => ["makes"],
|
66
65
|
["hope", "this", "makes"] => ["sense"]`
|
67
66
|
|
67
|
+
## Delete a Dictionary
|
68
|
+
|
68
69
|
If you want to delete a dictionary you call it upon the Dictionary class itself while
|
69
70
|
passing in the filename/location.
|
70
71
|
|
data/bin/marky_markov
CHANGED
@@ -23,6 +23,9 @@ opt_parser = OptionParser.new do |opts|
|
|
23
23
|
options[:sentencecount] = 5
|
24
24
|
opts.on('-c', '--sentencecount NUMBER', 'Set number of sentences generated') do |number|
|
25
25
|
options[:sentencecount] = number.to_i
|
26
|
+
if options[:sentencecount] < 1
|
27
|
+
abort("You must enter a number higher than 0. Try 4. Or maybe 10?")
|
28
|
+
end
|
26
29
|
end
|
27
30
|
|
28
31
|
options[:source] = nil
|
@@ -81,19 +84,15 @@ when "read"
|
|
81
84
|
end
|
82
85
|
when "listen"
|
83
86
|
markov = MarkyMarkov::TemporaryDictionary.new
|
84
|
-
|
85
|
-
|
86
|
-
STDOUT.puts markov.generate_n_sentences(options[:sentencecount])
|
87
|
-
rescue
|
88
|
-
abort("Not enough words to generate a sentence.")
|
89
|
-
end
|
87
|
+
markov.parse_string(STDIN.tty? ? ARGV[1] : STDIN.read)
|
88
|
+
STDOUT.puts markov.generate_n_sentences(options[:sentencecount])
|
90
89
|
else
|
91
90
|
unless STDIN.tty?
|
92
91
|
markov = MarkyMarkov::TemporaryDictionary.new
|
93
92
|
markov.parse_string(STDIN.read)
|
94
93
|
STDOUT.puts markov.generate_n_sentences(options[:sentencecount])
|
95
94
|
else
|
96
|
-
STDERR.puts "Sorry, I don't know how to #{ARGV[0]}."
|
95
|
+
STDERR.puts "Sorry, I don't know how to #{ARGV[0]}." if ARGV[0]
|
97
96
|
STDOUT.puts opt_parser
|
98
97
|
exit false
|
99
98
|
end
|
@@ -24,6 +24,8 @@ class MarkovDictionary # :nodoc:
|
|
24
24
|
#
|
25
25
|
# @example Adding a word
|
26
26
|
# add_word("Hello", "world")
|
27
|
+
# @example Adding a multi-word dictionary
|
28
|
+
# add_word("You are", "awesome")
|
27
29
|
def add_word(rootword, followedby)
|
28
30
|
@dictionary[rootword] ||= []
|
29
31
|
@dictionary[rootword] << followedby
|
@@ -73,7 +73,7 @@ class MarkovSentenceGenerator # :nodoc:
|
|
73
73
|
sentence.concat(random_capitalized_word)
|
74
74
|
(wordcount-1).times do
|
75
75
|
word = weighted_random(sentence.last(@depth))
|
76
|
-
if punctuation?(word
|
76
|
+
if punctuation?(word)
|
77
77
|
sentence[-1] = sentence.last.dup << word
|
78
78
|
elsif word.nil?
|
79
79
|
sentence.concat(random_capitalized_word)
|
@@ -16,7 +16,7 @@ class PersistentDictionary < MarkovDictionary # :nodoc:
|
|
16
16
|
def initialize(dictionary, depth=2)
|
17
17
|
@depth = depth
|
18
18
|
unless (1..5).include?(depth)
|
19
|
-
raise DepthNotInRangeError.new("Depth must be between 1 and 5")
|
19
|
+
raise DepthNotInRangeError.new("Depth must be between 1 and 5. For best results, use 2.")
|
20
20
|
end
|
21
21
|
@dictionarylocation = dictionary
|
22
22
|
@split_words = /([.?!])|[\s]+/
|
data/lib/marky_markov.rb
CHANGED
@@ -4,12 +4,12 @@
|
|
4
4
|
require_relative 'marky_markov/persistent_dictionary'
|
5
5
|
require_relative 'marky_markov/markov_sentence_generator'
|
6
6
|
|
7
|
-
# @version = 0.3.
|
7
|
+
# @version = 0.3.4
|
8
8
|
# @author Matt Furden
|
9
9
|
# Module containing TemporaryDictionary and Dictionary for creation of
|
10
10
|
# Markov Chain Dictionaries and generating sentences from those dictionaries.
|
11
11
|
module MarkyMarkov
|
12
|
-
VERSION = '0.3.
|
12
|
+
VERSION = '0.3.4'
|
13
13
|
|
14
14
|
class TemporaryDictionary
|
15
15
|
# Create a new Temporary Markov Chain Dictionary and sentence generator for use.
|
data/marky_markov.gemspec
CHANGED
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
|
|
13
13
|
## If your rubyforge_project name is different, then edit it and comment out
|
14
14
|
## the sub! line in the Rakefile
|
15
15
|
s.name = 'marky_markov'
|
16
|
-
s.version = '0.3.
|
17
|
-
s.date = '2012-02-
|
16
|
+
s.version = '0.3.4'
|
17
|
+
s.date = '2012-02-27'
|
18
18
|
s.rubyforge_project = 'marky_markov'
|
19
19
|
|
20
20
|
## Make sure your summary is short. The description may be as long
|
data/spec/spec_helper.rb
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
|
1
|
+
require_relative '../lib/marky_markov'
|
2
|
+
require 'rspec/autorun'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marky_markov
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ox
|
16
|
-
requirement: &
|
16
|
+
requirement: &70229846255560 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '1.4'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70229846255560
|
25
25
|
description: ! "MarkyMarkov makes it easy to generate simply Markov Chains based upon
|
26
26
|
input from\n either a source file or a string. While usable as a module in your
|
27
27
|
code it can also be called on\n from the command line and piped into like a standard
|
@@ -71,4 +71,3 @@ signing_key:
|
|
71
71
|
specification_version: 2
|
72
72
|
summary: Simple Markov Chain generation available in the command-line
|
73
73
|
test_files: []
|
74
|
-
has_rdoc:
|