fasttext 0.1.3 → 0.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/LICENSE.txt +18 -18
- data/README.md +10 -13
- data/ext/fasttext/ext.cpp +68 -60
- data/ext/fasttext/extconf.rb +1 -2
- data/lib/fasttext/version.rb +1 -1
- metadata +11 -67
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1bb25234ba16e6af2a30087522d498984a933274d24719be58cd348f6f456c11
|
|
4
|
+
data.tar.gz: 2ec68073ce633dae21077be74264f686153abff5431d850c5cf87aa26304b299
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '058233f6d6dcfc698b4e00f940d927962c28bef1aa51048ffdfb969accadcaf0616fbc3353c56c35e6609f1324c5d2ba469c4ba242b8a87daf60fd2b1fa7a35b'
|
|
7
|
+
data.tar.gz: e2bf6042ddc218398584b399acdde2ad89ece74e3009ac5348981e4ce958057233b10b5a5a504cb2e316c4a03fb4595fea524e3af0f30d787a1fb689885f6d5d
|
data/CHANGELOG.md
CHANGED
data/LICENSE.txt
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
Copyright (c) 2019-2020 Andrew Kane
|
|
2
|
-
|
|
3
1
|
MIT License
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
Copyright (c) 2016-present, Facebook, Inc.
|
|
4
|
+
Copyright (c) 2019-2021 Andrew Kane
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
12
|
|
|
13
|
-
The above copyright notice and this permission notice shall be
|
|
14
|
-
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
15
|
|
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
OF
|
|
22
|
-
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
data/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[fastText](https://fasttext.cc) - efficient text classification and representation learning - for Ruby
|
|
4
4
|
|
|
5
|
-
[](https://github.com/ankane/fastText/actions)
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
@@ -127,6 +127,12 @@ Get a word vector
|
|
|
127
127
|
model.word_vector("carrot")
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
+
Get a sentence vector
|
|
131
|
+
|
|
132
|
+
```ruby
|
|
133
|
+
model.sentence_vector("sentence text")
|
|
134
|
+
```
|
|
135
|
+
|
|
130
136
|
Get words
|
|
131
137
|
|
|
132
138
|
```ruby
|
|
@@ -172,7 +178,7 @@ FastText::Classifier.new(
|
|
|
172
178
|
thread: 3, # number of threads
|
|
173
179
|
lr_update_rate: 100, # change the rate of updates for the learning rate
|
|
174
180
|
t: 0.0001, # sampling threshold
|
|
175
|
-
label_prefix: "__label__"
|
|
181
|
+
label_prefix: "__label__", # label prefix
|
|
176
182
|
verbose: 2, # verbose
|
|
177
183
|
pretrained_vectors: nil, # pretrained word vectors (.vec file)
|
|
178
184
|
autotune_metric: "f1", # autotune optimization metric
|
|
@@ -232,7 +238,7 @@ __label__spam text from document three
|
|
|
232
238
|
|
|
233
239
|
## Pretrained Models
|
|
234
240
|
|
|
235
|
-
There are a number of [pretrained models](https://fasttext.cc/docs/en/
|
|
241
|
+
There are a number of [pretrained models](https://fasttext.cc/docs/en/supervised-models.html) you can download
|
|
236
242
|
|
|
237
243
|
### Language Identification
|
|
238
244
|
|
|
@@ -248,15 +254,6 @@ Get language predictions
|
|
|
248
254
|
model.predict("bon appétit")
|
|
249
255
|
```
|
|
250
256
|
|
|
251
|
-
## rbenv
|
|
252
|
-
|
|
253
|
-
This library uses [Rice](https://github.com/jasonroelofs/rice) to interface with the fastText C++ library. Rice and earlier versions of rbenv don’t play nicely together. If you encounter an error during installation, upgrade ruby-build and reinstall your Ruby version.
|
|
254
|
-
|
|
255
|
-
```sh
|
|
256
|
-
brew upgrade ruby-build
|
|
257
|
-
rbenv install [version]
|
|
258
|
-
```
|
|
259
|
-
|
|
260
257
|
## History
|
|
261
258
|
|
|
262
259
|
View the [changelog](https://github.com/ankane/fasttext/blob/master/CHANGELOG.md)
|
|
@@ -273,7 +270,7 @@ Everyone is encouraged to help improve this project. Here are a few ways you can
|
|
|
273
270
|
To get started with development:
|
|
274
271
|
|
|
275
272
|
```sh
|
|
276
|
-
git clone https://github.com/ankane/fastText.git
|
|
273
|
+
git clone --recursive https://github.com/ankane/fastText.git
|
|
277
274
|
cd fastText
|
|
278
275
|
bundle install
|
|
279
276
|
bundle exec rake compile
|
data/ext/fasttext/ext.cpp
CHANGED
|
@@ -13,10 +13,8 @@
|
|
|
13
13
|
#include <vector.h>
|
|
14
14
|
|
|
15
15
|
// rice
|
|
16
|
-
#include <rice/
|
|
17
|
-
#include <rice/
|
|
18
|
-
#include <rice/Data_Type.hpp>
|
|
19
|
-
#include <rice/Hash.hpp>
|
|
16
|
+
#include <rice/rice.hpp>
|
|
17
|
+
#include <rice/stl.hpp>
|
|
20
18
|
|
|
21
19
|
using fasttext::FastText;
|
|
22
20
|
|
|
@@ -29,18 +27,24 @@ using Rice::define_class_under;
|
|
|
29
27
|
using Rice::define_module;
|
|
30
28
|
using Rice::define_module_under;
|
|
31
29
|
|
|
32
|
-
|
|
33
|
-
inline
|
|
34
|
-
Object to_ruby<std::vector<std::pair<fasttext::real, std::string>>>(std::vector<std::pair<fasttext::real, std::string>> const & x)
|
|
30
|
+
namespace Rice::detail
|
|
35
31
|
{
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
32
|
+
template<>
|
|
33
|
+
class To_Ruby<std::vector<std::pair<fasttext::real, std::string>>>
|
|
34
|
+
{
|
|
35
|
+
public:
|
|
36
|
+
VALUE convert(std::vector<std::pair<fasttext::real, std::string>> const & x)
|
|
37
|
+
{
|
|
38
|
+
Array ret;
|
|
39
|
+
for (const auto& v : x) {
|
|
40
|
+
Array a;
|
|
41
|
+
a.push(v.first);
|
|
42
|
+
a.push(v.second);
|
|
43
|
+
ret.push(a);
|
|
44
|
+
}
|
|
45
|
+
return ret;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
44
48
|
}
|
|
45
49
|
|
|
46
50
|
fasttext::Args buildArgs(Hash h) {
|
|
@@ -52,33 +56,33 @@ fasttext::Args buildArgs(Hash h) {
|
|
|
52
56
|
|
|
53
57
|
for(; it != end; ++it)
|
|
54
58
|
{
|
|
55
|
-
std::string name =
|
|
56
|
-
|
|
59
|
+
std::string name = it->key.to_s().str();
|
|
60
|
+
VALUE value = (it->value).value();
|
|
57
61
|
|
|
58
62
|
if (name == "input") {
|
|
59
|
-
a.input =
|
|
63
|
+
a.input = Rice::detail::From_Ruby<std::string>().convert(value);
|
|
60
64
|
} else if (name == "output") {
|
|
61
|
-
a.output =
|
|
65
|
+
a.output = Rice::detail::From_Ruby<std::string>().convert(value);
|
|
62
66
|
} else if (name == "lr") {
|
|
63
|
-
a.lr =
|
|
67
|
+
a.lr = Rice::detail::From_Ruby<double>().convert(value);
|
|
64
68
|
} else if (name == "lr_update_rate") {
|
|
65
|
-
a.lrUpdateRate =
|
|
69
|
+
a.lrUpdateRate = Rice::detail::From_Ruby<int>().convert(value);
|
|
66
70
|
} else if (name == "dim") {
|
|
67
|
-
a.dim =
|
|
71
|
+
a.dim = Rice::detail::From_Ruby<int>().convert(value);
|
|
68
72
|
} else if (name == "ws") {
|
|
69
|
-
a.ws =
|
|
73
|
+
a.ws = Rice::detail::From_Ruby<int>().convert(value);
|
|
70
74
|
} else if (name == "epoch") {
|
|
71
|
-
a.epoch =
|
|
75
|
+
a.epoch = Rice::detail::From_Ruby<int>().convert(value);
|
|
72
76
|
} else if (name == "min_count") {
|
|
73
|
-
a.minCount =
|
|
77
|
+
a.minCount = Rice::detail::From_Ruby<int>().convert(value);
|
|
74
78
|
} else if (name == "min_count_label") {
|
|
75
|
-
a.minCountLabel =
|
|
79
|
+
a.minCountLabel = Rice::detail::From_Ruby<int>().convert(value);
|
|
76
80
|
} else if (name == "neg") {
|
|
77
|
-
a.neg =
|
|
81
|
+
a.neg = Rice::detail::From_Ruby<int>().convert(value);
|
|
78
82
|
} else if (name == "word_ngrams") {
|
|
79
|
-
a.wordNgrams =
|
|
83
|
+
a.wordNgrams = Rice::detail::From_Ruby<int>().convert(value);
|
|
80
84
|
} else if (name == "loss") {
|
|
81
|
-
std::string str =
|
|
85
|
+
std::string str = Rice::detail::From_Ruby<std::string>().convert(value);
|
|
82
86
|
if (str == "softmax") {
|
|
83
87
|
a.loss = fasttext::loss_name::softmax;
|
|
84
88
|
} else if (str == "ns") {
|
|
@@ -91,7 +95,7 @@ fasttext::Args buildArgs(Hash h) {
|
|
|
91
95
|
throw std::invalid_argument("Unknown loss: " + str);
|
|
92
96
|
}
|
|
93
97
|
} else if (name == "model") {
|
|
94
|
-
std::string str =
|
|
98
|
+
std::string str = Rice::detail::From_Ruby<std::string>().convert(value);
|
|
95
99
|
if (str == "supervised") {
|
|
96
100
|
a.model = fasttext::model_name::sup;
|
|
97
101
|
} else if (str == "skipgram") {
|
|
@@ -102,35 +106,35 @@ fasttext::Args buildArgs(Hash h) {
|
|
|
102
106
|
throw std::invalid_argument("Unknown model: " + str);
|
|
103
107
|
}
|
|
104
108
|
} else if (name == "bucket") {
|
|
105
|
-
a.bucket =
|
|
109
|
+
a.bucket = Rice::detail::From_Ruby<int>().convert(value);
|
|
106
110
|
} else if (name == "minn") {
|
|
107
|
-
a.minn =
|
|
111
|
+
a.minn = Rice::detail::From_Ruby<int>().convert(value);
|
|
108
112
|
} else if (name == "maxn") {
|
|
109
|
-
a.maxn =
|
|
113
|
+
a.maxn = Rice::detail::From_Ruby<int>().convert(value);
|
|
110
114
|
} else if (name == "thread") {
|
|
111
|
-
a.thread =
|
|
115
|
+
a.thread = Rice::detail::From_Ruby<int>().convert(value);
|
|
112
116
|
} else if (name == "t") {
|
|
113
|
-
a.t =
|
|
117
|
+
a.t = Rice::detail::From_Ruby<double>().convert(value);
|
|
114
118
|
} else if (name == "label_prefix") {
|
|
115
|
-
a.label =
|
|
119
|
+
a.label = Rice::detail::From_Ruby<std::string>().convert(value);
|
|
116
120
|
} else if (name == "verbose") {
|
|
117
|
-
a.verbose =
|
|
121
|
+
a.verbose = Rice::detail::From_Ruby<int>().convert(value);
|
|
118
122
|
} else if (name == "pretrained_vectors") {
|
|
119
|
-
a.pretrainedVectors =
|
|
123
|
+
a.pretrainedVectors = Rice::detail::From_Ruby<std::string>().convert(value);
|
|
120
124
|
} else if (name == "save_output") {
|
|
121
|
-
a.saveOutput =
|
|
125
|
+
a.saveOutput = Rice::detail::From_Ruby<bool>().convert(value);
|
|
122
126
|
} else if (name == "seed") {
|
|
123
|
-
a.seed =
|
|
127
|
+
a.seed = Rice::detail::From_Ruby<int>().convert(value);
|
|
124
128
|
} else if (name == "autotune_validation_file") {
|
|
125
|
-
a.autotuneValidationFile =
|
|
129
|
+
a.autotuneValidationFile = Rice::detail::From_Ruby<std::string>().convert(value);
|
|
126
130
|
} else if (name == "autotune_metric") {
|
|
127
|
-
a.autotuneMetric =
|
|
131
|
+
a.autotuneMetric = Rice::detail::From_Ruby<std::string>().convert(value);
|
|
128
132
|
} else if (name == "autotune_predictions") {
|
|
129
|
-
a.autotunePredictions =
|
|
133
|
+
a.autotunePredictions = Rice::detail::From_Ruby<int>().convert(value);
|
|
130
134
|
} else if (name == "autotune_duration") {
|
|
131
|
-
a.autotuneDuration =
|
|
135
|
+
a.autotuneDuration = Rice::detail::From_Ruby<int>().convert(value);
|
|
132
136
|
} else if (name == "autotune_model_size") {
|
|
133
|
-
a.autotuneModelSize =
|
|
137
|
+
a.autotuneModelSize = Rice::detail::From_Ruby<std::string>().convert(value);
|
|
134
138
|
} else {
|
|
135
139
|
throw std::invalid_argument("Unknown argument: " + name);
|
|
136
140
|
}
|
|
@@ -148,7 +152,7 @@ void Init_ext()
|
|
|
148
152
|
.define_constructor(Constructor<FastText>())
|
|
149
153
|
.define_method(
|
|
150
154
|
"words",
|
|
151
|
-
|
|
155
|
+
[](FastText& m) {
|
|
152
156
|
std::shared_ptr<const fasttext::Dictionary> d = m.getDictionary();
|
|
153
157
|
std::vector<int64_t> freq = d->getCounts(fasttext::entry_type::word);
|
|
154
158
|
|
|
@@ -166,7 +170,7 @@ void Init_ext()
|
|
|
166
170
|
})
|
|
167
171
|
.define_method(
|
|
168
172
|
"labels",
|
|
169
|
-
|
|
173
|
+
[](FastText& m) {
|
|
170
174
|
std::shared_ptr<const fasttext::Dictionary> d = m.getDictionary();
|
|
171
175
|
std::vector<int64_t> freq = d->getCounts(fasttext::entry_type::label);
|
|
172
176
|
|
|
@@ -184,7 +188,7 @@ void Init_ext()
|
|
|
184
188
|
})
|
|
185
189
|
.define_method(
|
|
186
190
|
"test",
|
|
187
|
-
|
|
191
|
+
[](FastText& m, const std::string& filename, int32_t k) {
|
|
188
192
|
std::ifstream ifs(filename);
|
|
189
193
|
if (!ifs.is_open()) {
|
|
190
194
|
throw std::invalid_argument("Test file cannot be opened!");
|
|
@@ -201,17 +205,21 @@ void Init_ext()
|
|
|
201
205
|
})
|
|
202
206
|
.define_method(
|
|
203
207
|
"load_model",
|
|
204
|
-
|
|
208
|
+
[](FastText& m, const std::string& s) {
|
|
209
|
+
m.loadModel(s);
|
|
210
|
+
})
|
|
205
211
|
.define_method(
|
|
206
212
|
"save_model",
|
|
207
|
-
|
|
213
|
+
[](FastText& m, const std::string& s) {
|
|
214
|
+
m.saveModel(s);
|
|
215
|
+
})
|
|
208
216
|
.define_method("dimension", &FastText::getDimension)
|
|
209
217
|
.define_method("quantized?", &FastText::isQuant)
|
|
210
218
|
.define_method("word_id", &FastText::getWordId)
|
|
211
219
|
.define_method("subword_id", &FastText::getSubwordId)
|
|
212
220
|
.define_method(
|
|
213
221
|
"predict",
|
|
214
|
-
|
|
222
|
+
[](FastText& m, const std::string& text, int32_t k, float threshold) {
|
|
215
223
|
std::stringstream ioss(text);
|
|
216
224
|
std::vector<std::pair<fasttext::real, std::string>> predictions;
|
|
217
225
|
m.predictLine(ioss, predictions, k, threshold);
|
|
@@ -219,14 +227,14 @@ void Init_ext()
|
|
|
219
227
|
})
|
|
220
228
|
.define_method(
|
|
221
229
|
"nearest_neighbors",
|
|
222
|
-
|
|
230
|
+
[](FastText& m, const std::string& word, int32_t k) {
|
|
223
231
|
return m.getNN(word, k);
|
|
224
232
|
})
|
|
225
233
|
.define_method("analogies", &FastText::getAnalogies)
|
|
226
|
-
.define_method("ngram_vectors", &FastText::getNgramVectors)
|
|
234
|
+
// .define_method("ngram_vectors", &FastText::getNgramVectors)
|
|
227
235
|
.define_method(
|
|
228
236
|
"word_vector",
|
|
229
|
-
|
|
237
|
+
[](FastText& m, const std::string& word) {
|
|
230
238
|
int dimension = m.getDimension();
|
|
231
239
|
fasttext::Vector vec = fasttext::Vector(dimension);
|
|
232
240
|
m.getWordVector(vec, word);
|
|
@@ -239,7 +247,7 @@ void Init_ext()
|
|
|
239
247
|
})
|
|
240
248
|
.define_method(
|
|
241
249
|
"subwords",
|
|
242
|
-
|
|
250
|
+
[](FastText& m, const std::string& word) {
|
|
243
251
|
std::vector<std::string> subwords;
|
|
244
252
|
std::vector<int32_t> ngrams;
|
|
245
253
|
std::shared_ptr<const fasttext::Dictionary> d = m.getDictionary();
|
|
@@ -253,7 +261,7 @@ void Init_ext()
|
|
|
253
261
|
})
|
|
254
262
|
.define_method(
|
|
255
263
|
"sentence_vector",
|
|
256
|
-
|
|
264
|
+
[](FastText& m, const std::string& text) {
|
|
257
265
|
std::istringstream in(text);
|
|
258
266
|
int dimension = m.getDimension();
|
|
259
267
|
fasttext::Vector vec = fasttext::Vector(dimension);
|
|
@@ -267,7 +275,7 @@ void Init_ext()
|
|
|
267
275
|
})
|
|
268
276
|
.define_method(
|
|
269
277
|
"train",
|
|
270
|
-
|
|
278
|
+
[](FastText& m, Hash h) {
|
|
271
279
|
auto a = buildArgs(h);
|
|
272
280
|
if (a.hasAutotune()) {
|
|
273
281
|
fasttext::Autotune autotune(std::shared_ptr<fasttext::FastText>(&m, [](fasttext::FastText*) {}));
|
|
@@ -278,17 +286,17 @@ void Init_ext()
|
|
|
278
286
|
})
|
|
279
287
|
.define_method(
|
|
280
288
|
"quantize",
|
|
281
|
-
|
|
289
|
+
[](FastText& m, Hash h) {
|
|
282
290
|
m.quantize(buildArgs(h));
|
|
283
291
|
})
|
|
284
292
|
.define_method(
|
|
285
293
|
"supervised?",
|
|
286
|
-
|
|
294
|
+
[](FastText& m) {
|
|
287
295
|
return m.getArgs().model == fasttext::model_name::sup;
|
|
288
296
|
})
|
|
289
297
|
.define_method(
|
|
290
298
|
"label_prefix",
|
|
291
|
-
|
|
299
|
+
[](FastText& m) {
|
|
292
300
|
return m.getArgs().label;
|
|
293
301
|
});
|
|
294
302
|
}
|
data/ext/fasttext/extconf.rb
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
require "mkmf-rice"
|
|
2
2
|
|
|
3
|
-
# TODO use -std=c++14 when available
|
|
4
3
|
# -pthread and -O3 set by default
|
|
5
|
-
$CXXFLAGS << " -std=c++
|
|
4
|
+
$CXXFLAGS << " -std=c++17 -funroll-loops " << with_config("optflags", "-march=native")
|
|
6
5
|
|
|
7
6
|
ext = File.expand_path(".", __dir__)
|
|
8
7
|
fasttext = File.expand_path("../../vendor/fastText/src", __dir__)
|
data/lib/fasttext/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fasttext
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrew Kane
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-05-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rice
|
|
@@ -16,72 +16,16 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
19
|
+
version: 4.0.2
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - ">="
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0'
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - ">="
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0'
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: rake
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - ">="
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0'
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - ">="
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: rake-compiler
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - ">="
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '0'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - ">="
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '0'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: minitest
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - ">="
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '5'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - ">="
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '5'
|
|
83
|
-
description:
|
|
84
|
-
email: andrew@chartkick.com
|
|
26
|
+
version: 4.0.2
|
|
27
|
+
description:
|
|
28
|
+
email: andrew@ankane.org
|
|
85
29
|
executables: []
|
|
86
30
|
extensions:
|
|
87
31
|
- ext/fasttext/extconf.rb
|
|
@@ -131,7 +75,7 @@ homepage: https://github.com/ankane/fastText
|
|
|
131
75
|
licenses:
|
|
132
76
|
- MIT
|
|
133
77
|
metadata: {}
|
|
134
|
-
post_install_message:
|
|
78
|
+
post_install_message:
|
|
135
79
|
rdoc_options: []
|
|
136
80
|
require_paths:
|
|
137
81
|
- lib
|
|
@@ -139,15 +83,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
139
83
|
requirements:
|
|
140
84
|
- - ">="
|
|
141
85
|
- !ruby/object:Gem::Version
|
|
142
|
-
version: '2.
|
|
86
|
+
version: '2.6'
|
|
143
87
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
88
|
requirements:
|
|
145
89
|
- - ">="
|
|
146
90
|
- !ruby/object:Gem::Version
|
|
147
91
|
version: '0'
|
|
148
92
|
requirements: []
|
|
149
|
-
rubygems_version: 3.
|
|
150
|
-
signing_key:
|
|
93
|
+
rubygems_version: 3.2.3
|
|
94
|
+
signing_key:
|
|
151
95
|
specification_version: 4
|
|
152
96
|
summary: fastText - efficient text classification and representation learning - for
|
|
153
97
|
Ruby
|