marky_markov 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
data/bin/marky_markov CHANGED
@@ -42,7 +42,10 @@ opt_parser = OptionParser.new do |opts|
42
42
  end
43
43
  end
44
44
 
45
- opt_parser.parse!
45
+ begin opt_parser.parse!
46
+ rescue OptionParser::InvalidOption => err
47
+ abort("Sorry, #{err}. Run marky_markov -h for allowed options.")
48
+ end
46
49
 
47
50
  if options[:resetdictionary]
48
51
  STDOUT.puts MarkyMarkov::Dictionary.delete_dictionary!(options[:dictionary])
@@ -53,11 +56,14 @@ case ARGV[0]
53
56
  when "speak"
54
57
  if options[:source]
55
58
  markov = MarkyMarkov::TemporaryDictionary.new
56
- markov.parse_file(options[:source])
59
+ begin markov.parse_file(options[:source])
60
+ rescue MarkovDictionary::FileNotFoundError => err
61
+ abort("Sorry, #{err}. I can't use it as a source.")
62
+ end
57
63
  else
58
64
  unless File.exists?("#{options[:dictionary]}.mmd")
59
- STDERR.puts "Dictionary file #{options[:dictionary]}}.mmd does not exist. Cannot generate sentence."
60
- STDERR.puts "Please build a dictionary with read or use the --source option with speak."
65
+ STDERR.puts "Dictionary file #{options[:dictionary]}.mmd does not exist. Cannot generate sentence."
66
+ STDERR.puts "Please build a dictionary with read or use the --source option to build a temporary dictionary."
61
67
  exit(false)
62
68
  end
63
69
  markov = MarkyMarkov::Dictionary.new(options[:dictionary])
@@ -66,20 +72,29 @@ when "speak"
66
72
  when "read"
67
73
  source = ARGV[1] || options[:source]
68
74
  markov = MarkyMarkov::Dictionary.new(options[:dictionary])
69
- markov.parse_file(source)
70
- markov.save_dictionary!
71
- STDOUT.puts "Added #{source} to dictionary."
75
+ begin
76
+ markov.parse_file(source)
77
+ markov.save_dictionary!
78
+ STDOUT.puts "Added #{source} to dictionary."
79
+ rescue MarkovDictionary::FileNotFoundError => err
80
+ abort("Sorry, I can't read #{source}. I'm afraid it doesn't exist!")
81
+ end
72
82
  when "listen"
73
83
  markov = MarkyMarkov::TemporaryDictionary.new
74
- markov.parse_string(STDIN.tty? ? ARGV[1] : STDIN.read)
75
- STDOUT.puts markov.generate_n_sentences(options[:sentencecount])
84
+ begin
85
+ markov.parse_string(STDIN.tty? ? ARGV[1] : STDIN.read)
86
+ STDOUT.puts markov.generate_n_sentences(options[:sentencecount])
87
+ rescue
88
+ abort("Not enough words to generate a sentence.")
89
+ end
76
90
  else
77
91
  unless STDIN.tty?
78
92
  markov = MarkyMarkov::TemporaryDictionary.new
79
93
  markov.parse_string(STDIN.read)
80
94
  STDOUT.puts markov.generate_n_sentences(options[:sentencecount])
81
95
  else
96
+ STDERR.puts "Sorry, I don't know how to #{ARGV[0]}."
82
97
  STDOUT.puts opt_parser
98
+ exit false
83
99
  end
84
100
  end
85
- #end
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.2
7
+ # @version = 0.3.3
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.2'
12
+ VERSION = '0.3.3'
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.2'
17
- s.date = '2012-02-12'
16
+ s.version = '0.3.3'
17
+ s.date = '2012-02-13'
18
18
  s.rubyforge_project = 'marky_markov'
19
19
 
20
20
  ## Make sure your summary is short. The description may be as long
@@ -29,7 +29,7 @@ Gem::Specification.new do |s|
29
29
  ## a custom homepage, consider using your GitHub URL or the like.
30
30
  s.authors = ["Matt Furden"]
31
31
  s.email = 'mfurden@gmail.com'
32
- s.homepage = 'http://www.thefurd.com'
32
+ s.homepage = 'https://github.com/zolrath/marky_markov'
33
33
 
34
34
  ## This gets added to the $LOAD_PATH so that 'lib/NAME.rb' can be required as
35
35
  ## require 'NAME.rb' or'/lib/NAME/file.rb' can be as require 'NAME/file.rb'
@@ -67,13 +67,11 @@ Gem::Specification.new do |s|
67
67
  lib/marky_markov/markov_sentence_generator.rb
68
68
  lib/marky_markov/persistent_dictionary.rb
69
69
  marky_markov.gemspec
70
- spec/marky_markov/markov_dictionary_spec.rb
71
- spec/marky_markov/markov_sentence_generator_spec.rb
70
+ spec/data/onetextdictcompare.mmd
71
+ spec/data/test.txt
72
+ spec/data/textdictcompare.mmd
72
73
  spec/marky_markov/marky_markov_spec.rb
73
- spec/marky_markov/persistent_dictionary_spec.rb
74
74
  spec/spec_helper.rb
75
- spec/test.txt
76
- spec/textdictcompare.mmd
77
75
  ]
78
76
  # = MANIFEST =
79
77
 
@@ -0,0 +1,38 @@
1
+ 1<h>
2
+ <a>
3
+ <s>The</s>
4
+ </a>
5
+ <a>
6
+ <s>cat</s>
7
+ </a>
8
+ <a>
9
+ <s>cat</s>
10
+ </a>
11
+ <a>
12
+ <s>likes</s>
13
+ </a>
14
+ <a>
15
+ <s>likes</s>
16
+ </a>
17
+ <a>
18
+ <s>pie</s>
19
+ </a>
20
+ <a>
21
+ <s>pie</s>
22
+ </a>
23
+ <a>
24
+ <s>and</s>
25
+ </a>
26
+ <a>
27
+ <s>and</s>
28
+ </a>
29
+ <a>
30
+ <s>chainsaws</s>
31
+ </a>
32
+ <a>
33
+ <s>chainsaws</s>
34
+ </a>
35
+ <a>
36
+ <s>!</s>
37
+ </a>
38
+ </h>
@@ -0,0 +1 @@
1
+ The cat likes pie and chainsaws!
@@ -31,5 +31,7 @@
31
31
  <s>and</s>
32
32
  <s>chainsaws</s>
33
33
  </a>
34
- <a/>
34
+ <a>
35
+ <s>!</s>
36
+ </a>
35
37
  </h>
@@ -1,64 +1,65 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe MarkyMarkov do
4
+ before(:each) do
5
+ @textsource = "spec/data/test.txt"
6
+ @onedictcompare = { ["The"] => ["cat"],
7
+ ["cat"] => ["likes"],
8
+ ["likes"] => ["pie"],
9
+ ["pie"] => ["and"],
10
+ ["and"] => ["chainsaws"],
11
+ ["chainsaws"] => ["!"]}
12
+ @twodictcompare = {["The", "cat"] => ["likes"],
13
+ ["and", "chainsaws"] => ["!"],
14
+ ["cat", "likes"] => ["pie"],
15
+ ["likes", "pie"] => ["and"],
16
+ ["pie", "and"] => ["chainsaws"]}
17
+ end
18
+
4
19
  context "TemporaryDictionary" do
5
20
  before(:each) do
6
- @textsource = "spec/test.txt"
7
21
  @dictionary = MarkyMarkov::TemporaryDictionary.new
8
- @onedictcompare = { ["The"] => ["cat"],
9
- ["cat"] => ["likes"],
10
- ["likes"] => ["pie"],
11
- ["pie"] => ["and"],
12
- ["and"] => ["chainsaws"],
13
- ["chainsaws"] => []}
14
- @twodictcompare = {["The", "cat"] => ["likes"],
15
- ["and", "chainsaws"] => [],
16
- ["cat", "likes"] => ["pie"],
17
- ["likes", "pie"] => ["and"],
18
- ["pie", "and"] => ["chainsaws"]}
19
22
  end
20
23
 
21
24
  it "should be able to parse a string" do
22
- @dictionary.parse_string "The cat likes pie and chainsaws"
25
+ @dictionary.parse_string "The cat likes pie and chainsaws!"
23
26
  @dictionary.dictionary.should eql(@twodictcompare)
24
27
  end
25
28
 
26
29
  it "should generate the right number of sentences" do
30
+ @dictionary.parse_string "Hey man. How are you doing? Let's get pie!"
31
+ sentence = @dictionary.generate_5_sentences
32
+ sentence.should have(5).scan(/[.?!]/)
27
33
  end
28
34
 
29
35
  it "should create the right number of words" do
36
+ @dictionary.parse_string "Hey man. How are you doing? Let's get pie!"
37
+ sentence = @dictionary.generate_10_words
38
+ sentence.split.should have(10).words
30
39
  end
31
40
  end
32
41
 
33
42
  context "PersistentDictionary" do
34
- before(:each) do
35
- @textsource = "spec/test.txt"
36
- @dictionary = MarkyMarkov::Dictionary.new(@textsource)
37
- @onedictcompare = { ["The"] => ["cat"],
38
- ["cat"] => ["likes"],
39
- ["likes"] => ["pie"],
40
- ["pie"] => ["and"],
41
- ["and"] => ["chainsaws"],
42
- ["chainsaws"] => []}
43
- @twodictcompare = {["The", "cat"] => ["likes"],
44
- ["and", "chainsaws"] => [],
45
- ["cat", "likes"] => ["pie"],
46
- ["likes", "pie"] => ["and"],
47
- ["pie", "and"] => ["chainsaws"]}
43
+ before do
44
+ @dictionary = MarkyMarkov::Dictionary.new("spec/data/temptextdict")
45
+ @dictionary.parse_file "spec/data/test.txt"
48
46
  end
49
47
 
50
- it "should load the saved dictionary" do
48
+ it "should be able to save a dictionary" do
49
+ @dictionary.save_dictionary!.should eql(true)
51
50
  end
52
51
 
53
- it "should be able to parse a string" do
54
- @dictionary.parse_string "The cat likes pie and chainsaws"
55
- @dictionary.dictionary.should include(@twodictcompare)
52
+ it "should be able to load an existing dictionary" do
53
+ otherdict = MarkyMarkov::Dictionary.new("spec/data/textdictcompare")
54
+ @dictionary.dictionary.should eql(otherdict.dictionary)
56
55
  end
57
56
 
58
- it "should generate the right number of sentences" do
57
+ it "should load the saved dictionary" do
58
+ @dictionary.dictionary.should include(@twodictcompare)
59
59
  end
60
60
 
61
- it "should create the right number of words" do
61
+ after do
62
+ PersistentDictionary.delete_dictionary!(@dictionary)
62
63
  end
63
64
  end
64
65
  end
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.2
4
+ version: 0.3.3
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 00:00:00.000000000 Z
12
+ date: 2012-02-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ox
16
- requirement: &70164029504260 !ruby/object:Gem::Requirement
16
+ requirement: &70245354003740 !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: *70164029504260
24
+ version_requirements: *70245354003740
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
@@ -40,14 +40,12 @@ files:
40
40
  - lib/marky_markov/markov_sentence_generator.rb
41
41
  - lib/marky_markov/persistent_dictionary.rb
42
42
  - marky_markov.gemspec
43
- - spec/marky_markov/markov_dictionary_spec.rb
44
- - spec/marky_markov/markov_sentence_generator_spec.rb
43
+ - spec/data/onetextdictcompare.mmd
44
+ - spec/data/test.txt
45
+ - spec/data/textdictcompare.mmd
45
46
  - spec/marky_markov/marky_markov_spec.rb
46
- - spec/marky_markov/persistent_dictionary_spec.rb
47
47
  - spec/spec_helper.rb
48
- - spec/test.txt
49
- - spec/textdictcompare.mmd
50
- homepage: http://www.thefurd.com
48
+ homepage: https://github.com/zolrath/marky_markov
51
49
  licenses: []
52
50
  post_install_message:
53
51
  rdoc_options:
@@ -68,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
66
  version: '0'
69
67
  requirements: []
70
68
  rubyforge_project: marky_markov
71
- rubygems_version: 1.8.15
69
+ rubygems_version: 1.8.16
72
70
  signing_key:
73
71
  specification_version: 2
74
72
  summary: Simple Markov Chain generation available in the command-line
@@ -1,65 +0,0 @@
1
- require 'spec_helper.rb'
2
-
3
- describe MarkovDictionary do
4
- context "One Word Depth Dictionary" do
5
- before(:each) do
6
- @onetextsource = "spec/test.txt"
7
- @onedict = MarkovDictionary.new(1)
8
- @onedict.parse_source("The cat likes pie and chainsaws", false)
9
- @onetextdict = { ["The"] => ["cat"],
10
- ["cat"] => ["likes"],
11
- ["likes"] => ["pie"],
12
- ["pie"] => ["and"],
13
- ["and"] => ["chainsaws"],
14
- ["chainsaws"] => []}
15
- end
16
-
17
- it "can open a file" do
18
- @onedict.open_source(@onetextsource).should_not be_nil
19
- end
20
-
21
- it "should give a FileNotFoundError if the file doesn't exist" do
22
- expect { @onedict.open_source("thisisntreal") }.to
23
- raise_error(MarkovDictionary::FileNotFoundError,"thisisntreal does not exist!")
24
- end
25
-
26
- it "can add a word to the dictionary" do
27
- @onedict.add_word(["to"], "be")
28
- @onedict.dictionary.should include(["to"] => ["be"])
29
- end
30
-
31
- it "create a dictionary via parsing a text file" do
32
- @onedict.dictionary = {}
33
- @onedict.parse_source(@onetextsource)
34
- @onedict.dictionary.should eql(@onetextdict)
35
- end
36
-
37
- it "builds a one word dictionary properly" do
38
- @onedict.dictionary.should eql(@onetextdict)
39
- end
40
- end
41
-
42
- context "Two Word Dictionary" do
43
- before(:each) do
44
- @twodict = MarkovDictionary.new
45
- @twodict.parse_source("The cat likes pie and chainsaws", false)
46
- @twotextsource = "spec/test.txt"
47
- @twotextdict = {["The", "cat"] => ["likes"],
48
- ["and", "chainsaws"] => [],
49
- ["cat", "likes"] => ["pie"],
50
- ["likes", "pie"] => ["and"],
51
- ["pie", "and"] => ["chainsaws"]}
52
- end
53
-
54
- it "can add a word to the two-word dictionary" do
55
- @twodict.add_word(["Zebras", "like"], "kung-fu")
56
- @twodict.dictionary.should eql(@twotextdict.merge( {["Zebras", "like"] => ["kung-fu"]} ))
57
- end
58
-
59
- it "create a two-word dictionary via parsing a text file" do
60
- @twodict.dictionary = {}
61
- @twodict.parse_source(@twotextsource)
62
- @twodict.dictionary.should eql(@twotextdict)
63
- end
64
- end
65
- end
@@ -1,25 +0,0 @@
1
- require 'spec_helper.rb'
2
-
3
- describe MarkovSentenceGenerator do
4
- before(:each) do
5
- @dict = MarkovDictionary.new
6
- @dict.parse_source("Hello man how are you today", false)
7
- @sentence = MarkovSentenceGenerator.new(@dict)
8
- end
9
-
10
- it "can pick a random word" do
11
-
12
- end
13
-
14
- it "can choose a weighted random word" do
15
-
16
- end
17
-
18
- it "will use a random word if the word does not exist" do
19
-
20
- end
21
-
22
- it "generates a sentence of the appropriate length" do
23
- @sentence.generate(20).split.count.should eql(20)
24
- end
25
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PersistentDictionary do
4
- before do
5
- @dict = PersistentDictionary.new("spec/textdict.mmd")
6
- @dict.parse_source("spec/test.txt")
7
- end
8
-
9
- it "should be able to save a dictionary" do
10
- @dict.save_dictionary!.should eql(true)
11
- end
12
-
13
- it "should be able to load an existing dictionary" do
14
- otherdict = PersistentDictionary.new("spec/textdictcompare.mmd")
15
- @dict.dictionary.should eql(otherdict.dictionary)
16
- end
17
-
18
- after do
19
- PersistentDictionary.delete_dictionary!("spec/textdict.mmd")
20
- end
21
- end
22
-
data/spec/test.txt DELETED
@@ -1 +0,0 @@
1
- The cat likes pie and chainsaws