markov-reloaded 0.0.0

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.
Files changed (2) hide show
  1. data/lib/markov-reloaded.rb +103 -0
  2. metadata +47 -0
@@ -0,0 +1,103 @@
1
+ require 'string-enumerable'
2
+ class String
3
+ def spaceNewLines
4
+ out = ""
5
+ for i in self
6
+ if i == "\n"
7
+ out += " "
8
+ out += "\n"
9
+ else
10
+ out += i
11
+ end
12
+ end
13
+ out
14
+ end
15
+
16
+ def toMarkovArray(separator, terminator)
17
+ arr = self.dup
18
+ arr += separator if self[self.length-1] != separator
19
+ arr = arr.lines(separator)
20
+ arr = arr.map do |e| e.chop end
21
+ array = []
22
+ for i in arr
23
+ if i[i.length-1] == terminator
24
+ array.push(i.chop)
25
+ array.push(terminator)
26
+ else
27
+ array.push i
28
+ end
29
+ end
30
+ array
31
+ end
32
+ end
33
+ class Array
34
+ def pickRand(rng)
35
+ r = rng.rand(length)
36
+ self[r]
37
+ end
38
+ def toMarkov(order)
39
+ data = Hash.new(:Error)
40
+ array = self
41
+ for i in 0..array.length-1-order
42
+ el = array[i..i+order-1]
43
+ if data.include? el
44
+ data[el].push array[i+order]# unless i+order+1 == array.length
45
+ else
46
+ data[el] = [array[i+order]]# unless i+order+1 == array.length
47
+ end
48
+ end
49
+ Markov.new(data, order)
50
+ end
51
+ end
52
+ class Markov
53
+ def initialize (data, order)
54
+ @data = data
55
+ @order = order
56
+ end
57
+ attr_accessor :data
58
+ def add(array)
59
+ self.+(array.toMarkov, @order)
60
+ end
61
+ def self.analyze(array, order)
62
+ data = Hash.new(:Error)
63
+ for i in 0..array.length-1-order
64
+ el = array[i..i+order-1]
65
+ if data.include? el
66
+ data[el].push array[i+order]# unless i+order+1 == array.length
67
+ else
68
+ data[el] = [array[i+order]]# unless i+order+1 == array.length
69
+ end
70
+ end
71
+ Markov.new(data, order)
72
+ end
73
+ def +(mark)
74
+ hash = mark.data
75
+ hash.each do |key, value|
76
+ if @data.include? key
77
+ @data[key] += value
78
+ else
79
+ @data[key] = value
80
+ end
81
+ end
82
+ end
83
+ def pickElement(element, random)
84
+ arr = @data[element]
85
+ i = random.rand(arr.length)
86
+ arr[i]
87
+ end
88
+ attr_accessor :data
89
+ def generate(maxlength, first= [], seed, terminator)
90
+ r = Random.new seed
91
+ first = @data.keys.pickRand(r) if first == []
92
+ out = first.dup
93
+ pick = out.dup
94
+ for i in 0..(maxlength-@order)
95
+ element = pickElement(pick, r)
96
+ out.push element
97
+ pick = pick.drop 1
98
+ pick.push element
99
+ break if element == terminator
100
+ end
101
+ return out
102
+ end
103
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: markov-reloaded
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Eigil Rischel
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-21 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: ! "markov-reloaded provides a simple interface to create markov chains.\n\tthe
15
+ system is based on hashes, but provides flexible methods to generate the chains
16
+ based on any array, and to generate suitable arrays from strings."
17
+ email: ayegill@gmail.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - lib/markov-reloaded.rb
23
+ homepage: http://rubygems.org/gems/string-enumerable
24
+ licenses: []
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 1.8.24
44
+ signing_key:
45
+ specification_version: 3
46
+ summary: flexible, hash-based system for markov chain generation
47
+ test_files: []