fasttext 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb6649e0a3992c6e12572d672e8ba768220662efc37b982c278a8d0713716029
4
- data.tar.gz: 12a0441cf1030bfbfe99d26824fe757d5b83c2f47de899fecf13a73aa657bd76
3
+ metadata.gz: 1bb25234ba16e6af2a30087522d498984a933274d24719be58cd348f6f456c11
4
+ data.tar.gz: 2ec68073ce633dae21077be74264f686153abff5431d850c5cf87aa26304b299
5
5
  SHA512:
6
- metadata.gz: dadcbc9a0d39468b4d1070cbf74abece85e687fe2d5de9dfb03c8e79f630b47a0ce37bf73f1383bccf917190bf4f1a2acb12e4741b4aaf45d0c688991baf7893
7
- data.tar.gz: b9615f2edf557b7a2bb9c90457581489dd86be7539e7f4e9b75ee72cb3fe26ca9a216c5ecda4ff6e82ef348fbcc0482cd4e727e9c6652f2b38195ad3edba1752
6
+ metadata.gz: '058233f6d6dcfc698b4e00f940d927962c28bef1aa51048ffdfb969accadcaf0616fbc3353c56c35e6609f1324c5d2ba469c4ba242b8a87daf60fd2b1fa7a35b'
7
+ data.tar.gz: e2bf6042ddc218398584b399acdde2ad89ece74e3009ac5348981e4ce958057233b10b5a5a504cb2e316c4a03fb4595fea524e3af0f30d787a1fb689885f6d5d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.2.0 (2021-05-17)
2
+
3
+ - Updated to Rice 4
4
+ - Dropped support for Ruby < 2.6
5
+
1
6
  ## 0.1.3 (2020-04-28)
2
7
 
3
8
  - Updated fastText to 0.9.2
data/LICENSE.txt CHANGED
@@ -1,22 +1,22 @@
1
- Copyright (c) 2019-2020 Andrew Kane
2
-
3
1
  MIT License
4
2
 
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
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
- included in all copies or substantial portions of the Software.
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
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
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
- [![Build Status](https://travis-ci.org/ankane/fasttext.svg?branch=master)](https://travis-ci.org/ankane/fasttext) [![Build status](https://ci.appveyor.com/api/projects/status/67yby3w6mth766y9/branch/master?svg=true)](https://ci.appveyor.com/project/ankane/fasttext/branch/master)
5
+ [![Build Status](https://github.com/ankane/fastText/workflows/build/badge.svg?branch=master)](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__" # label prefix
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/english-vectors.html) you can download
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/Array.hpp>
17
- #include <rice/Constructor.hpp>
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
- template<>
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
- Array ret;
37
- for (const auto& v : x) {
38
- Array a;
39
- a.push(v.first);
40
- a.push(v.second);
41
- ret.push(a);
42
- }
43
- return ret;
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 = from_ruby<std::string>(it->key.to_s());
56
- Object value = it->value;
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 = from_ruby<std::string>(value);
63
+ a.input = Rice::detail::From_Ruby<std::string>().convert(value);
60
64
  } else if (name == "output") {
61
- a.output = from_ruby<std::string>(value);
65
+ a.output = Rice::detail::From_Ruby<std::string>().convert(value);
62
66
  } else if (name == "lr") {
63
- a.lr = from_ruby<double>(value);
67
+ a.lr = Rice::detail::From_Ruby<double>().convert(value);
64
68
  } else if (name == "lr_update_rate") {
65
- a.lrUpdateRate = from_ruby<int>(value);
69
+ a.lrUpdateRate = Rice::detail::From_Ruby<int>().convert(value);
66
70
  } else if (name == "dim") {
67
- a.dim = from_ruby<int>(value);
71
+ a.dim = Rice::detail::From_Ruby<int>().convert(value);
68
72
  } else if (name == "ws") {
69
- a.ws = from_ruby<int>(value);
73
+ a.ws = Rice::detail::From_Ruby<int>().convert(value);
70
74
  } else if (name == "epoch") {
71
- a.epoch = from_ruby<int>(value);
75
+ a.epoch = Rice::detail::From_Ruby<int>().convert(value);
72
76
  } else if (name == "min_count") {
73
- a.minCount = from_ruby<int>(value);
77
+ a.minCount = Rice::detail::From_Ruby<int>().convert(value);
74
78
  } else if (name == "min_count_label") {
75
- a.minCountLabel = from_ruby<int>(value);
79
+ a.minCountLabel = Rice::detail::From_Ruby<int>().convert(value);
76
80
  } else if (name == "neg") {
77
- a.neg = from_ruby<int>(value);
81
+ a.neg = Rice::detail::From_Ruby<int>().convert(value);
78
82
  } else if (name == "word_ngrams") {
79
- a.wordNgrams = from_ruby<int>(value);
83
+ a.wordNgrams = Rice::detail::From_Ruby<int>().convert(value);
80
84
  } else if (name == "loss") {
81
- std::string str = from_ruby<std::string>(value);
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 = from_ruby<std::string>(value);
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 = from_ruby<int>(value);
109
+ a.bucket = Rice::detail::From_Ruby<int>().convert(value);
106
110
  } else if (name == "minn") {
107
- a.minn = from_ruby<int>(value);
111
+ a.minn = Rice::detail::From_Ruby<int>().convert(value);
108
112
  } else if (name == "maxn") {
109
- a.maxn = from_ruby<int>(value);
113
+ a.maxn = Rice::detail::From_Ruby<int>().convert(value);
110
114
  } else if (name == "thread") {
111
- a.thread = from_ruby<int>(value);
115
+ a.thread = Rice::detail::From_Ruby<int>().convert(value);
112
116
  } else if (name == "t") {
113
- a.t = from_ruby<double>(value);
117
+ a.t = Rice::detail::From_Ruby<double>().convert(value);
114
118
  } else if (name == "label_prefix") {
115
- a.label = from_ruby<std::string>(value);
119
+ a.label = Rice::detail::From_Ruby<std::string>().convert(value);
116
120
  } else if (name == "verbose") {
117
- a.verbose = from_ruby<int>(value);
121
+ a.verbose = Rice::detail::From_Ruby<int>().convert(value);
118
122
  } else if (name == "pretrained_vectors") {
119
- a.pretrainedVectors = from_ruby<std::string>(value);
123
+ a.pretrainedVectors = Rice::detail::From_Ruby<std::string>().convert(value);
120
124
  } else if (name == "save_output") {
121
- a.saveOutput = from_ruby<bool>(value);
125
+ a.saveOutput = Rice::detail::From_Ruby<bool>().convert(value);
122
126
  } else if (name == "seed") {
123
- a.seed = from_ruby<int>(value);
127
+ a.seed = Rice::detail::From_Ruby<int>().convert(value);
124
128
  } else if (name == "autotune_validation_file") {
125
- a.autotuneValidationFile = from_ruby<std::string>(value);
129
+ a.autotuneValidationFile = Rice::detail::From_Ruby<std::string>().convert(value);
126
130
  } else if (name == "autotune_metric") {
127
- a.autotuneMetric = from_ruby<std::string>(value);
131
+ a.autotuneMetric = Rice::detail::From_Ruby<std::string>().convert(value);
128
132
  } else if (name == "autotune_predictions") {
129
- a.autotunePredictions = from_ruby<int>(value);
133
+ a.autotunePredictions = Rice::detail::From_Ruby<int>().convert(value);
130
134
  } else if (name == "autotune_duration") {
131
- a.autotuneDuration = from_ruby<int>(value);
135
+ a.autotuneDuration = Rice::detail::From_Ruby<int>().convert(value);
132
136
  } else if (name == "autotune_model_size") {
133
- a.autotuneModelSize = from_ruby<std::string>(value);
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
- *[](FastText& m) {
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
- *[](FastText& m) {
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
- *[](FastText& m, const std::string filename, int32_t k) {
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
- *[](FastText& m, std::string s) { m.loadModel(s); })
208
+ [](FastText& m, const std::string& s) {
209
+ m.loadModel(s);
210
+ })
205
211
  .define_method(
206
212
  "save_model",
207
- *[](FastText& m, std::string s) { m.saveModel(s); })
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
- *[](FastText& m, const std::string text, int32_t k, float threshold) {
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
- *[](FastText& m, const std::string& word, int32_t k) {
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
- *[](FastText& m, const std::string word) {
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
- *[](FastText& m, const std::string word) {
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
- *[](FastText& m, const std::string text) {
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
- *[](FastText& m, Hash h) {
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
- *[](FastText& m, Hash h) {
289
+ [](FastText& m, Hash h) {
282
290
  m.quantize(buildArgs(h));
283
291
  })
284
292
  .define_method(
285
293
  "supervised?",
286
- *[](FastText& m) {
294
+ [](FastText& m) {
287
295
  return m.getArgs().model == fasttext::model_name::sup;
288
296
  })
289
297
  .define_method(
290
298
  "label_prefix",
291
- *[](FastText& m) {
299
+ [](FastText& m) {
292
300
  return m.getArgs().label;
293
301
  });
294
302
  }
@@ -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++11 -funroll-loops " << with_config("optflags", "-march=native")
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__)
@@ -1,3 +1,3 @@
1
1
  module FastText
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
3
3
  end
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.1.3
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: 2020-04-28 00:00:00.000000000 Z
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: '2.2'
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: '2.2'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
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.4'
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.1.2
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