valkey-objects 0.3.1 → 0.3.3
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.
- checksums.yaml +4 -4
- data/lib/valkey/objects/version.rb +1 -1
- data/lib/valkey/objects.rb +134 -4
- data/valkey-objects.gemspec +4 -1
- metadata +31 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0169fefb3f14682d8d94681c51bd83280905df791df21831cb60040bd904c0c
|
4
|
+
data.tar.gz: 7db81c16c1e59c21f4f2d7907b345d894ce1be1f13cab653b00072be722bb725
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc5442667bbb4b4481feababacbbf3567acf2c398003c9eedf6865bad701bddc9de352aad822e9c72cb9ddc3a6ba98843a17bfdb698cbd3232148bac3875e2d7
|
7
|
+
data.tar.gz: 0d40f4a1024c7aa4cd6e2be8c8043bd0791da88e8db09ee9124a643ce4076010f55bf623b8c21f0c92e557afdf1e34719cd85bec86285765832c4da7aa5e133d
|
data/lib/valkey/objects.rb
CHANGED
@@ -8,15 +8,19 @@ require 'json'
|
|
8
8
|
require 'amatch'
|
9
9
|
require 'ap'
|
10
10
|
require 'yaml'
|
11
|
+
require 'classifier-reborn'
|
12
|
+
require 'knn'
|
13
|
+
require 'sentimental'
|
11
14
|
|
12
15
|
module VK
|
13
16
|
|
17
|
+
|
14
18
|
@@XX = {}
|
15
19
|
|
16
20
|
def self.included(x)
|
17
21
|
x.extend VK
|
18
22
|
end
|
19
|
-
|
23
|
+
|
20
24
|
def self.extended(x)
|
21
25
|
##
|
22
26
|
# Example:
|
@@ -179,11 +183,11 @@ module VK
|
|
179
183
|
define_method(:vector) { |k, h={}| define_method(k.to_sym) { VECTOR.new(%[#{xx}:vector:#{k}:#{@id}], h); } };
|
180
184
|
|
181
185
|
end
|
182
|
-
|
186
|
+
|
183
187
|
def id
|
184
188
|
@id
|
185
189
|
end
|
186
|
-
|
190
|
+
|
187
191
|
def self.at epoch
|
188
192
|
Time.at epoch
|
189
193
|
end
|
@@ -201,7 +205,69 @@ module VK
|
|
201
205
|
RedisClient.config(host: "127.0.0.1", port: 6379, db: 0).new_client
|
202
206
|
end
|
203
207
|
end
|
204
|
-
|
208
|
+
|
209
|
+
@@SENTIMENT_THRESHOLD = 0.9
|
210
|
+
##
|
211
|
+
# Bayesean Classification
|
212
|
+
#
|
213
|
+
# Determine the A OR B of an example.
|
214
|
+
##
|
215
|
+
# VK.classify("catagory A", "Catagory B").
|
216
|
+
def self.classify(a, b)
|
217
|
+
ClassifierReborn::Bayes.new(a, b)
|
218
|
+
end
|
219
|
+
|
220
|
+
def self.threshold n
|
221
|
+
@@SENTIMENT_THRESHOLD = n
|
222
|
+
end
|
223
|
+
##
|
224
|
+
# Sentiment Analysis.
|
225
|
+
##
|
226
|
+
# VK.feels("Some text")
|
227
|
+
def self.feels x
|
228
|
+
Sentimental.new(threshold: @@SENTIMENT_THRESHOLD).sentiment
|
229
|
+
end
|
230
|
+
|
231
|
+
@@CRi = Hash.new { |h,k| h[k] = CRi.new(k) }
|
232
|
+
class CRi
|
233
|
+
def initialize k
|
234
|
+
@id = k
|
235
|
+
@lsi = ClassifierReborn::LSI.new
|
236
|
+
end
|
237
|
+
def learn x, i
|
238
|
+
@lsi.add_item x.to_s, i.to_sym
|
239
|
+
end
|
240
|
+
def [] k
|
241
|
+
@lsi.classify k
|
242
|
+
end
|
243
|
+
def search x, *n
|
244
|
+
@lsi.search(x, n[0])
|
245
|
+
end
|
246
|
+
end
|
247
|
+
##
|
248
|
+
# Vector Indexing
|
249
|
+
#
|
250
|
+
# Vector (of text) -> concept (index)
|
251
|
+
# - Find text concept based upon known examples.
|
252
|
+
# - Learn new examples of a concept.
|
253
|
+
# - Find examples from within clusters.
|
254
|
+
##
|
255
|
+
# index[:vector]['Text to classify'] => :index
|
256
|
+
# index[:vector].learn("Text to classify", :index)
|
257
|
+
# index[:vector].search("Similar text.", 5) => ["Similar text?", "other similar text", ...]
|
258
|
+
def self.index
|
259
|
+
@@CRi
|
260
|
+
end
|
261
|
+
##
|
262
|
+
# Vector Engine
|
263
|
+
#
|
264
|
+
# Return known string based upon nearest neighbor by vector of number.
|
265
|
+
##
|
266
|
+
# vector([["return val", 0, 1, 2, ...], ...]).classify(["guess", 0, 1, 2, ...]) => "return val"
|
267
|
+
def self.vector vectors, size
|
268
|
+
Knn::Classifier.new(vectors, SquaredEuclideanCalculator)
|
269
|
+
end
|
270
|
+
|
205
271
|
class O
|
206
272
|
attr_reader :key
|
207
273
|
def initialize k, h={}
|
@@ -547,6 +613,70 @@ module VK
|
|
547
613
|
VK.redis.call("RPUSH", key, hx)
|
548
614
|
end
|
549
615
|
end
|
616
|
+
|
617
|
+
@@SENTIMENT_THRESHOLD = 0.9
|
618
|
+
@@RCB = ClassifierReborn::BayesRedisBackend.new {host: "127.0.0.1", port: 6379, db: 1}
|
619
|
+
##
|
620
|
+
# Bayesean Classification
|
621
|
+
#
|
622
|
+
# Determine the A OR B of an example.
|
623
|
+
##
|
624
|
+
# VK.classify("catagory A", "Catagory B").
|
625
|
+
def self.classify a, b
|
626
|
+
ClassifierReborn::Bayes.new a, b, @@RBC
|
627
|
+
end
|
628
|
+
|
629
|
+
def self.threshold= n
|
630
|
+
@@SENTIMENT_THRESHOLD = n
|
631
|
+
end
|
632
|
+
##
|
633
|
+
# Sentiment Analysis.
|
634
|
+
##
|
635
|
+
# VK.feels("Some text")
|
636
|
+
def self.feels x
|
637
|
+
Sentimental.new(threshold: @@SENTIMENT_THRESHOLD).sentiment
|
638
|
+
end
|
639
|
+
|
640
|
+
@@CRi = Hash.new { |h,k| h[k] = CRi.new(k) }
|
641
|
+
class CRi
|
642
|
+
def initialize k
|
643
|
+
@id = k
|
644
|
+
@lsi = ClassifierReborn::LSI.new
|
645
|
+
end
|
646
|
+
def learn x, i
|
647
|
+
@lsi.add_item x.to_s, i.to_sym
|
648
|
+
end
|
649
|
+
def [] k
|
650
|
+
@lsi.classify k
|
651
|
+
end
|
652
|
+
def search x, *n
|
653
|
+
@lsi.search(x, n[0])
|
654
|
+
end
|
655
|
+
end
|
656
|
+
##
|
657
|
+
# Vector Indexing
|
658
|
+
#
|
659
|
+
# Vector (of text) -> concept (index)
|
660
|
+
# - Find text concept based upon known examples.
|
661
|
+
# - Learn new examples of a concept.
|
662
|
+
# - Find examples from within clusters.
|
663
|
+
##
|
664
|
+
# index[:vector]['Text to classify'] => :index
|
665
|
+
# index[:vector].learn("Text to classify", :index)
|
666
|
+
# index[:vector].search("Similar text.", 5) => ["Similar text?", "other similar text", ...]
|
667
|
+
def self.index
|
668
|
+
@@CRi
|
669
|
+
end
|
670
|
+
##
|
671
|
+
# Vector Engine
|
672
|
+
#
|
673
|
+
# Return known string based upon nearest neighbor by vector of number.
|
674
|
+
##
|
675
|
+
# vector([["return val", 0, 1, 2, ...], ...]).classify(["guess", 0, 1, 2, ...]) => "return val"
|
676
|
+
def self.vector vectors, size
|
677
|
+
Knn::Classifier.new(vectors, distance_calculator = SquaredEuclideanCalculator)
|
678
|
+
end
|
679
|
+
|
550
680
|
|
551
681
|
def self.flushdb!
|
552
682
|
VK.redis.call("FLUSHDB")
|
data/valkey-objects.gemspec
CHANGED
@@ -36,8 +36,11 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.add_dependency "redis-client"
|
37
37
|
spec.add_dependency "json"
|
38
38
|
spec.add_dependency "ruby-duration"
|
39
|
-
spec.add_dependency "
|
39
|
+
spec.add_dependency "classifier-reborn"
|
40
40
|
spec.add_dependency "amatch"
|
41
|
+
spec.add_dependency "knn"
|
42
|
+
|
43
|
+
spec.add_dependency "pry"
|
41
44
|
spec.add_dependency "awesome_print"
|
42
45
|
# For more information and examples about making a new gem, check out our
|
43
46
|
# guide at: https://bundler.io/guides/creating_gem.html
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: valkey-objects
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erik Olson
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-
|
10
|
+
date: 2025-04-25 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: connection_pool
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '0'
|
68
68
|
- !ruby/object:Gem::Dependency
|
69
|
-
name:
|
69
|
+
name: classifier-reborn
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - ">="
|
@@ -93,6 +93,34 @@ dependencies:
|
|
93
93
|
- - ">="
|
94
94
|
- !ruby/object:Gem::Version
|
95
95
|
version: '0'
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: knn
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
type: :runtime
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: pry
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
type: :runtime
|
118
|
+
prerelease: false
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
96
124
|
- !ruby/object:Gem::Dependency
|
97
125
|
name: awesome_print
|
98
126
|
requirement: !ruby/object:Gem::Requirement
|