markov_uuid 0.0.1
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/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/bin/markov +22 -0
- data/data/pg100.txt +124796 -0
- data/data/pride_and_prejudice_small.txt +6 -0
- data/lib/markov_uuid/key_selector.rb +9 -0
- data/lib/markov_uuid/markov.rb +45 -0
- data/lib/markov_uuid/storage.rb +41 -0
- data/lib/markov_uuid/version.rb +3 -0
- data/lib/markov_uuid.rb +9 -0
- data/markov.yaml +245 -0
- data/markov_uuid.gemspec +20 -0
- data/storage.rb +38 -0
- metadata +63 -0
@@ -0,0 +1,6 @@
|
|
1
|
+
It is a truth universally acknowledged, that a single man in possession
|
2
|
+
of a good fortune, must be in want of a wife.
|
3
|
+
|
4
|
+
However little known the feelings or views of such a man may be on his
|
5
|
+
first entering a neighbourhood, this truth is so well fixed in the minds
|
6
|
+
of the surrounding families, that he is considered the rightful property
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module MarkovUuid
|
2
|
+
class Markov
|
3
|
+
include KeySelector
|
4
|
+
SEPARATOR = "#-#-"
|
5
|
+
|
6
|
+
def to_s i=8
|
7
|
+
@words.join("")[0..i.to_i]
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize words
|
11
|
+
@words = words
|
12
|
+
end
|
13
|
+
|
14
|
+
def add_to markov_data
|
15
|
+
key = SEPARATOR
|
16
|
+
|
17
|
+
@words.each do |word|
|
18
|
+
(markov_data[key] ||= []) << word
|
19
|
+
|
20
|
+
key = new_key(key, word)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
class << self
|
27
|
+
def from_file( f )
|
28
|
+
new lines(f).map { |l| from_string l }.flatten
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def from_string l
|
34
|
+
l.gsub(/[^a-z]/i,'').split //
|
35
|
+
end
|
36
|
+
|
37
|
+
def lines f
|
38
|
+
content = File.read f
|
39
|
+
c = content.length
|
40
|
+
r = rand c
|
41
|
+
content[r-c .. r+c].downcase.split "\n"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require "YAML"
|
2
|
+
require "fileutils"
|
3
|
+
module MarkovUuid
|
4
|
+
class Storage
|
5
|
+
include KeySelector
|
6
|
+
attr_accessor :data
|
7
|
+
|
8
|
+
def initialize(data = nil )
|
9
|
+
@data = data if data.class == Hash
|
10
|
+
@data ||= Hash.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def add words
|
14
|
+
words.add_to @data
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_words length = 100
|
18
|
+
key = Markov::SEPARATOR
|
19
|
+
word = ""
|
20
|
+
|
21
|
+
result = length.times.map do
|
22
|
+
word = @data[key].sample rescue nil
|
23
|
+
key = new_key( key, word )
|
24
|
+
word
|
25
|
+
end.compact
|
26
|
+
|
27
|
+
Markov.new result
|
28
|
+
end
|
29
|
+
|
30
|
+
def save filename
|
31
|
+
File.open(filename, "w"){|f| YAML.dump(@data, f) }
|
32
|
+
end
|
33
|
+
|
34
|
+
def load filename
|
35
|
+
FileUtils.touch filename
|
36
|
+
File.open(filename) do |f|
|
37
|
+
@data = YAML.load f
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/markov_uuid.rb
ADDED
data/markov.yaml
ADDED
@@ -0,0 +1,245 @@
|
|
1
|
+
---
|
2
|
+
! '#-#-':
|
3
|
+
- n
|
4
|
+
n:
|
5
|
+
- p
|
6
|
+
- o
|
7
|
+
- e
|
8
|
+
- w
|
9
|
+
- t
|
10
|
+
- o
|
11
|
+
- t
|
12
|
+
- g
|
13
|
+
- m
|
14
|
+
- h
|
15
|
+
- t
|
16
|
+
- g
|
17
|
+
- e
|
18
|
+
- t
|
19
|
+
- d
|
20
|
+
- d
|
21
|
+
- g
|
22
|
+
- s
|
23
|
+
p:
|
24
|
+
- o
|
25
|
+
- r
|
26
|
+
- e
|
27
|
+
o:
|
28
|
+
- s
|
29
|
+
- n
|
30
|
+
- f
|
31
|
+
- o
|
32
|
+
- d
|
33
|
+
- r
|
34
|
+
- f
|
35
|
+
- w
|
36
|
+
- w
|
37
|
+
- r
|
38
|
+
- f
|
39
|
+
- n
|
40
|
+
- u
|
41
|
+
- o
|
42
|
+
- d
|
43
|
+
- w
|
44
|
+
- f
|
45
|
+
- u
|
46
|
+
- n
|
47
|
+
- p
|
48
|
+
s:
|
49
|
+
- s
|
50
|
+
- e
|
51
|
+
- s
|
52
|
+
- i
|
53
|
+
- t
|
54
|
+
- o
|
55
|
+
- o
|
56
|
+
- u
|
57
|
+
- f
|
58
|
+
- t
|
59
|
+
- t
|
60
|
+
- s
|
61
|
+
- o
|
62
|
+
- o
|
63
|
+
- u
|
64
|
+
- t
|
65
|
+
- c
|
66
|
+
- i
|
67
|
+
e:
|
68
|
+
- s
|
69
|
+
- m
|
70
|
+
- i
|
71
|
+
- h
|
72
|
+
- v
|
73
|
+
- r
|
74
|
+
- k
|
75
|
+
- f
|
76
|
+
- e
|
77
|
+
- l
|
78
|
+
- w
|
79
|
+
- o
|
80
|
+
- n
|
81
|
+
- r
|
82
|
+
- i
|
83
|
+
- l
|
84
|
+
- d
|
85
|
+
- m
|
86
|
+
- s
|
87
|
+
- s
|
88
|
+
- i
|
89
|
+
- r
|
90
|
+
- d
|
91
|
+
- r
|
92
|
+
- r
|
93
|
+
i:
|
94
|
+
- o
|
95
|
+
- n
|
96
|
+
- f
|
97
|
+
- t
|
98
|
+
- n
|
99
|
+
- e
|
100
|
+
- s
|
101
|
+
- r
|
102
|
+
- n
|
103
|
+
- g
|
104
|
+
- s
|
105
|
+
- s
|
106
|
+
- x
|
107
|
+
- n
|
108
|
+
- n
|
109
|
+
- n
|
110
|
+
- l
|
111
|
+
- e
|
112
|
+
- s
|
113
|
+
- d
|
114
|
+
- g
|
115
|
+
f:
|
116
|
+
- a
|
117
|
+
- o
|
118
|
+
- a
|
119
|
+
- e
|
120
|
+
- e
|
121
|
+
- s
|
122
|
+
- i
|
123
|
+
- i
|
124
|
+
- t
|
125
|
+
- a
|
126
|
+
- u
|
127
|
+
a:
|
128
|
+
- g
|
129
|
+
- n
|
130
|
+
- w
|
131
|
+
- m
|
132
|
+
- n
|
133
|
+
- y
|
134
|
+
- n
|
135
|
+
- m
|
136
|
+
- t
|
137
|
+
g:
|
138
|
+
- o
|
139
|
+
- s
|
140
|
+
- a
|
141
|
+
- h
|
142
|
+
- f
|
143
|
+
- h
|
144
|
+
d:
|
145
|
+
- f
|
146
|
+
- t
|
147
|
+
- i
|
148
|
+
- s
|
149
|
+
- i
|
150
|
+
- e
|
151
|
+
- t
|
152
|
+
r:
|
153
|
+
- t
|
154
|
+
- l
|
155
|
+
- v
|
156
|
+
- s
|
157
|
+
- i
|
158
|
+
- h
|
159
|
+
- u
|
160
|
+
- r
|
161
|
+
- o
|
162
|
+
- e
|
163
|
+
- i
|
164
|
+
- o
|
165
|
+
- t
|
166
|
+
t:
|
167
|
+
- u
|
168
|
+
- b
|
169
|
+
- o
|
170
|
+
- t
|
171
|
+
- l
|
172
|
+
- h
|
173
|
+
- e
|
174
|
+
- e
|
175
|
+
- h
|
176
|
+
- r
|
177
|
+
- h
|
178
|
+
- h
|
179
|
+
- h
|
180
|
+
- h
|
181
|
+
- h
|
182
|
+
- h
|
183
|
+
- f
|
184
|
+
- y
|
185
|
+
u:
|
186
|
+
- n
|
187
|
+
- s
|
188
|
+
- c
|
189
|
+
- r
|
190
|
+
- t
|
191
|
+
- r
|
192
|
+
- n
|
193
|
+
- l
|
194
|
+
m:
|
195
|
+
- u
|
196
|
+
- a
|
197
|
+
- a
|
198
|
+
- i
|
199
|
+
- i
|
200
|
+
b:
|
201
|
+
- e
|
202
|
+
- e
|
203
|
+
- o
|
204
|
+
w:
|
205
|
+
- a
|
206
|
+
- i
|
207
|
+
- e
|
208
|
+
- n
|
209
|
+
- s
|
210
|
+
- e
|
211
|
+
h:
|
212
|
+
- o
|
213
|
+
- e
|
214
|
+
- a
|
215
|
+
- i
|
216
|
+
- b
|
217
|
+
- o
|
218
|
+
- i
|
219
|
+
- i
|
220
|
+
- e
|
221
|
+
- e
|
222
|
+
- a
|
223
|
+
- e
|
224
|
+
- e
|
225
|
+
- t
|
226
|
+
v:
|
227
|
+
- e
|
228
|
+
- i
|
229
|
+
l:
|
230
|
+
- i
|
231
|
+
- e
|
232
|
+
- i
|
233
|
+
- l
|
234
|
+
- f
|
235
|
+
- i
|
236
|
+
- p
|
237
|
+
k:
|
238
|
+
- n
|
239
|
+
c:
|
240
|
+
- h
|
241
|
+
- o
|
242
|
+
y:
|
243
|
+
- b
|
244
|
+
x:
|
245
|
+
- e
|
data/markov_uuid.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'markov_uuid/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "markov_uuid"
|
8
|
+
gem.version = MarkovUuid::VERSION
|
9
|
+
gem.authors = ["Mark Burns"]
|
10
|
+
gem.email = ["markthedeveloper@gmail.com"]
|
11
|
+
gem.description = %q{People friendly readable UUIDs}
|
12
|
+
gem.summary = %q{Easily generate random English-like UUIDs (or any other language)
|
13
|
+
that are more natural to convey to other people. E.g. over the phone, etc.}
|
14
|
+
gem.homepage = "http://github.com/markburns/markov_uuid"
|
15
|
+
|
16
|
+
gem.files = `git ls-files`.split($/)
|
17
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
|
+
gem.require_paths = ["lib"]
|
20
|
+
end
|
data/storage.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Markov Chain Generator
|
3
|
+
# based on the Python version by Gary Burd: http://gary.burd.info/2003/11/markov-chain-generator.html
|
4
|
+
# Released into the public domain, please keep this notice intact
|
5
|
+
# (c) InVisible GmbH
|
6
|
+
# http://www.invisible.ch
|
7
|
+
#
|
8
|
+
|
9
|
+
require "YAML"
|
10
|
+
|
11
|
+
module KeySelector
|
12
|
+
SEPARATOR = "#-#-"
|
13
|
+
|
14
|
+
def new_key(key, word)
|
15
|
+
return SEPARATOR if word == "\n"
|
16
|
+
|
17
|
+
word or key
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
require './words'
|
22
|
+
|
23
|
+
|
24
|
+
if __FILE__ == $0 then
|
25
|
+
storage = Storage.new
|
26
|
+
file = ARGV[0]
|
27
|
+
|
28
|
+
storage.load "markov.yaml" unless file
|
29
|
+
|
30
|
+
if file
|
31
|
+
storage.add Markov.from_file file
|
32
|
+
storage.save "markov.yaml"
|
33
|
+
end
|
34
|
+
|
35
|
+
require 'ruby-debug'
|
36
|
+
|
37
|
+
puts storage.to_words
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: markov_uuid
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Mark Burns
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-09-13 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: People friendly readable UUIDs
|
15
|
+
email:
|
16
|
+
- markthedeveloper@gmail.com
|
17
|
+
executables:
|
18
|
+
- markov
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- .gitignore
|
23
|
+
- Gemfile
|
24
|
+
- LICENSE.txt
|
25
|
+
- README.md
|
26
|
+
- Rakefile
|
27
|
+
- bin/markov
|
28
|
+
- data/pg100.txt
|
29
|
+
- data/pride_and_prejudice_small.txt
|
30
|
+
- lib/markov_uuid.rb
|
31
|
+
- lib/markov_uuid/key_selector.rb
|
32
|
+
- lib/markov_uuid/markov.rb
|
33
|
+
- lib/markov_uuid/storage.rb
|
34
|
+
- lib/markov_uuid/version.rb
|
35
|
+
- markov.yaml
|
36
|
+
- markov_uuid.gemspec
|
37
|
+
- storage.rb
|
38
|
+
homepage: http://github.com/markburns/markov_uuid
|
39
|
+
licenses: []
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
require_paths:
|
43
|
+
- lib
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
none: false
|
46
|
+
requirements:
|
47
|
+
- - ! '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
requirements: []
|
57
|
+
rubyforge_project:
|
58
|
+
rubygems_version: 1.8.24
|
59
|
+
signing_key:
|
60
|
+
specification_version: 3
|
61
|
+
summary: Easily generate random English-like UUIDs (or any other language) that are
|
62
|
+
more natural to convey to other people. E.g. over the phone, etc.
|
63
|
+
test_files: []
|