wp2txt 1.0.1 → 1.1.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/.dockerignore +8 -0
- data/.github/workflows/ci.yml +36 -0
- data/.gitignore +1 -1
- data/.rubocop.yml +80 -0
- data/.solargraph.yml +22 -0
- data/Dockerfile +20 -0
- data/Gemfile +9 -2
- data/README.md +42 -13
- data/Rakefile +25 -4
- data/bin/wp2txt +177 -182
- data/lib/wp2txt/article.rb +70 -92
- data/lib/wp2txt/regex.rb +93 -0
- data/lib/wp2txt/utils.rb +172 -282
- data/lib/wp2txt/version.rb +3 -1
- data/lib/wp2txt.rb +119 -150
- data/spec/spec_helper.rb +4 -4
- data/spec/utils_spec.rb +101 -124
- data/wp2txt.gemspec +16 -18
- metadata +60 -11
data/spec/utils_spec.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
|
2
|
-
# -*- coding: utf-8 -*-
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
require_relative "spec_helper"
|
4
|
+
require_relative "../lib/wp2txt"
|
5
|
+
require_relative "../lib/wp2txt/article"
|
6
|
+
require_relative "../lib/wp2txt/utils"
|
8
7
|
|
9
8
|
describe "Wp2txt" do
|
10
9
|
it "contains mediawiki-format related functions:" do
|
@@ -17,14 +16,14 @@ describe "Wp2txt" do
|
|
17
16
|
|
18
17
|
describe "process_nested_structure" do
|
19
18
|
it "parse nested structure replacing str in the format specified" do
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
str_processed = process_nested_structure(
|
19
|
+
str_before1 = "[[ab[[cde[[alfa]]]]fg]]"
|
20
|
+
str_after1 = "<<ab<<cde<<alfa>>>>fg>>"
|
21
|
+
scanner1 = StringScanner.new(str_before1)
|
22
|
+
str_processed = process_nested_structure(scanner1, "[[", "]]") do |content|
|
24
23
|
"<<" + content + ">>"
|
25
24
|
end
|
26
|
-
expect(str_processed).to eq
|
27
|
-
|
25
|
+
expect(str_processed).to eq str_after1
|
26
|
+
|
28
27
|
str_before = "#* {{quote-book|1503|year_published=1836|chapter=19 Henry VII. c. 5: Coin||A Collection of Statutes Connected with the General Administration of the Law|page=158|url=http://books.google.com/books?id=QtYuAAAAIAAJ
|
29
28
|
|passage={{...}} every of them, being gold, whole and weight, shall '''go''' and be current in payment throughout this his realm for the sum that they were coined for.}}"
|
30
29
|
str_after = "#* <<quote-book|1503|year_published=1836|chapter=19 Henry VII. c. 5: Coin||A Collection of Statutes Connected with the General Administration of the Law|page=158|url=http://books.google.com/books?id=QtYuAAAAIAAJ
|
@@ -33,177 +32,155 @@ describe "Wp2txt" do
|
|
33
32
|
str_processed = process_nested_structure(scanner, "{{", "}}") do |content|
|
34
33
|
"<<" + content + ">>"
|
35
34
|
end
|
36
|
-
#str_processed.should == str_after
|
37
35
|
expect(str_processed).to eq str_after
|
38
|
-
|
39
36
|
end
|
40
37
|
end
|
41
|
-
|
42
|
-
describe "special_chr
|
38
|
+
|
39
|
+
describe "special_chr" do
|
43
40
|
it "replaces character references with real characters" do
|
44
41
|
str_before = " < > & ""
|
45
42
|
str_after = " < > & \""
|
46
|
-
special_chr
|
47
|
-
|
48
|
-
end
|
43
|
+
expect(special_chr(str_before)).to eq str_after
|
44
|
+
end
|
49
45
|
end
|
50
|
-
|
51
|
-
describe "chrref_to_utf
|
46
|
+
|
47
|
+
describe "chrref_to_utf" do
|
52
48
|
it "replaces character references with real characters" do
|
53
49
|
str_before = "♪"
|
54
50
|
str_after = "♪"
|
55
|
-
chrref_to_utf
|
56
|
-
expect(str_before).to eq str_after
|
51
|
+
expect(chrref_to_utf(str_before)).to eq str_after
|
57
52
|
end
|
58
53
|
end
|
59
|
-
|
60
|
-
describe "mndash
|
54
|
+
|
55
|
+
describe "mndash" do
|
61
56
|
it "replaces {mdash}, {ndash}, or {–} with '–'" do
|
62
57
|
str_before = "{mdash} {ndash} {–}"
|
63
58
|
str_after = "– – –"
|
64
|
-
mndash
|
65
|
-
expect(str_before).to eq str_after
|
59
|
+
expect(mndash(str_before)).to eq str_after
|
66
60
|
end
|
67
61
|
end
|
68
|
-
|
62
|
+
|
69
63
|
describe "make_reference" do
|
70
64
|
it "replaces <ref> tag with [ref]" do
|
71
65
|
str_before = "<ref> ... </ref>"
|
72
66
|
str_after = "[ref] ... [/ref]"
|
73
|
-
make_reference
|
74
|
-
|
75
|
-
end
|
67
|
+
expect(make_reference(str_before)).to eq str_after
|
68
|
+
end
|
76
69
|
end
|
77
|
-
|
78
|
-
describe "remove_table
|
70
|
+
|
71
|
+
describe "remove_table" do
|
79
72
|
it "removes table formated parts" do
|
80
73
|
str_before = "{| ... \n{| ... \n ...|}\n ...|}"
|
81
74
|
str_after = ""
|
82
|
-
remove_table
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
# describe "remove_clade" do
|
88
|
-
# it "removes clade formated parts" do
|
89
|
-
# str_before = "\{\{clade ... \n ... \n ... \n\}\}"
|
90
|
-
# str_after = ""
|
91
|
-
# expect(remove_clade(str_before)).to eq str_after
|
92
|
-
# end
|
93
|
-
# end
|
94
|
-
|
95
|
-
describe "remove_hr!" do
|
75
|
+
expect(remove_table(str_before)).to eq str_after
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "remove_hr" do
|
96
80
|
it "removes horizontal lines" do
|
97
81
|
str_before = "\n----\n--\n--\n"
|
98
82
|
str_after = "\n\n"
|
99
|
-
remove_hr
|
100
|
-
|
101
|
-
end
|
83
|
+
expect(remove_hr(str_before)).to eq str_after
|
84
|
+
end
|
102
85
|
end
|
103
86
|
|
104
|
-
describe "remove_inbetween
|
87
|
+
describe "remove_inbetween" do
|
105
88
|
it "removes tags and its contents" do
|
106
|
-
|
107
|
-
|
108
|
-
remove_tag
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
remove_inbetween
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
describe "remove_directive!" do
|
89
|
+
str_before1 = "<tag>abc</tag>"
|
90
|
+
str_after1 = "abc"
|
91
|
+
expect(remove_tag(str_before1)).to eq str_after1
|
92
|
+
|
93
|
+
str_before2 = "[tag]def[/tag]"
|
94
|
+
str_after2 = "def"
|
95
|
+
expect(remove_inbetween(str_before2, ["[", "]"])).to eq str_after2
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "remove_directive" do
|
118
100
|
it "removes directive" do
|
119
101
|
str_before = "__abc__\n __def__"
|
120
102
|
str_after = "\n "
|
121
|
-
remove_directive
|
122
|
-
|
123
|
-
end
|
103
|
+
expect(remove_directive(str_before)).to eq str_after
|
104
|
+
end
|
124
105
|
end
|
125
106
|
|
126
|
-
describe "remove_emphasis
|
107
|
+
describe "remove_emphasis" do
|
127
108
|
it "removes directive" do
|
128
109
|
str_before = "''abc''\n'''def'''"
|
129
110
|
str_after = "abc\ndef"
|
130
|
-
remove_emphasis
|
131
|
-
|
132
|
-
end
|
111
|
+
expect(remove_emphasis(str_before)).to eq str_after
|
112
|
+
end
|
133
113
|
end
|
134
|
-
|
135
|
-
describe "escape_nowiki
|
114
|
+
|
115
|
+
describe "escape_nowiki" do
|
136
116
|
it "replaces <nowiki>...</nowiki> with <nowiki-object_id>" do
|
137
117
|
str_before = "<nowiki>[[abc]]</nowiki>def<nowiki>[[ghi]]</nowiki>"
|
138
118
|
str_after = Regexp.new("<nowiki-\\d+>def<nowiki-\\d+>")
|
139
|
-
escape_nowiki
|
140
|
-
expect(str_before).to match str_after
|
119
|
+
expect(escape_nowiki(str_before)).to match str_after
|
141
120
|
end
|
142
121
|
end
|
143
122
|
|
144
|
-
describe "unescape_nowiki
|
123
|
+
describe "unescape_nowiki" do
|
145
124
|
it "replaces <nowiki-object_id> with string stored elsewhere" do
|
146
|
-
@nowikis = {123 => "[[abc]]", 124 => "[[ghi]]"}
|
125
|
+
@nowikis = { 123 => "[[abc]]", 124 => "[[ghi]]" }
|
147
126
|
str_before = "<nowiki-123>def<nowiki-124>"
|
148
127
|
str_after = "[[abc]]def[[ghi]]"
|
149
|
-
unescape_nowiki
|
150
|
-
expect(str_before).to eq str_after
|
128
|
+
expect(unescape_nowiki(str_before)).to eq str_after
|
151
129
|
end
|
152
130
|
end
|
153
|
-
|
154
|
-
describe "process_interwiki_links
|
131
|
+
|
132
|
+
describe "process_interwiki_links" do
|
155
133
|
it "formats text link and remove brackets" do
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
process_interwiki_links
|
161
|
-
process_interwiki_links
|
162
|
-
process_interwiki_links
|
163
|
-
process_interwiki_links
|
164
|
-
expect(
|
165
|
-
expect(
|
166
|
-
expect(
|
167
|
-
expect(
|
134
|
+
a1 = "[[a b]]"
|
135
|
+
b1 = "[[a b|c]]"
|
136
|
+
c1 = "[[a|b|c]]"
|
137
|
+
d1 = "[[硬口蓋鼻音|[ɲ], /J/]]"
|
138
|
+
a2 = process_interwiki_links(a1)
|
139
|
+
b2 = process_interwiki_links(b1)
|
140
|
+
c2 = process_interwiki_links(c1)
|
141
|
+
d2 = process_interwiki_links(d1)
|
142
|
+
expect(a2).to eq "a b"
|
143
|
+
expect(b2).to eq "c"
|
144
|
+
expect(c2).to eq "b|c"
|
145
|
+
expect(d2).to eq "[ɲ], /J/"
|
168
146
|
end
|
169
147
|
end
|
170
148
|
|
171
|
-
describe "process_external_links
|
149
|
+
describe "process_external_links" do
|
172
150
|
it "formats text link and remove brackets" do
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
process_external_links
|
177
|
-
process_external_links
|
178
|
-
process_external_links
|
179
|
-
expect(
|
180
|
-
expect(
|
181
|
-
expect(
|
151
|
+
a1 = "[http://yohasebe.com yohasebe.com]"
|
152
|
+
b1 = "[http://yohasebe.com]"
|
153
|
+
c1 = "* Turkish: {{t+|tr|köken bilimi}}]], {{t+|tr|etimoloji}}"
|
154
|
+
a2 = process_external_links(a1)
|
155
|
+
b2 = process_external_links(b1)
|
156
|
+
c2 = process_external_links(c1)
|
157
|
+
expect(a2).to eq "yohasebe.com"
|
158
|
+
expect(b2).to eq "http://yohasebe.com"
|
159
|
+
expect(c2).to eq "* Turkish: {{t+|tr|köken bilimi}}]], {{t+|tr|etimoloji}}"
|
182
160
|
end
|
183
161
|
end
|
184
|
-
|
185
|
-
describe "correct_inline_template
|
162
|
+
|
163
|
+
describe "correct_inline_template" do
|
186
164
|
it "removes brackets and leaving some text" do
|
187
|
-
|
188
|
-
|
189
|
-
correct_inline_template
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
correct_inline_template
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
correct_inline_template
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
correct_inline_template
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
correct_inline_template
|
206
|
-
expect(str_before).to eq str_after
|
165
|
+
str_before1 = "{{MedalCountry | {{JPN}} }}"
|
166
|
+
str_after1 = "JPN"
|
167
|
+
expect(correct_inline_template(str_before1)).to eq str_after1
|
168
|
+
|
169
|
+
str_before2 = "{{lang|en|Japan}}"
|
170
|
+
str_after2 = "Japan"
|
171
|
+
expect(correct_inline_template(str_before2)).to eq str_after2
|
172
|
+
|
173
|
+
str_before3 = "{{a|b=c|d=f}}"
|
174
|
+
str_after3 = "c"
|
175
|
+
expect(correct_inline_template(str_before3)).to eq str_after3
|
176
|
+
|
177
|
+
str_before4 = "{{a|b|{{c|d|e}}}}"
|
178
|
+
str_after4 = "b"
|
179
|
+
expect(correct_inline_template(str_before4)).to eq str_after4
|
180
|
+
|
181
|
+
str_before5 = "{{要出典範囲|日本人に多く見受けられる|date=2013年8月|title=日本人特有なのか、本当に多いのかを示す必要がある}}"
|
182
|
+
str_after5 = "日本人に多く見受けられる"
|
183
|
+
expect(correct_inline_template(str_before5)).to eq str_after5
|
207
184
|
end
|
208
185
|
end
|
209
186
|
end
|
data/wp2txt.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/wp2txt/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "wp2txt"
|
@@ -8,26 +8,24 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.authors = ["Yoichiro Hasebe"]
|
9
9
|
s.email = ["yohasebe@gmail.com"]
|
10
10
|
s.homepage = "https://github.com/yohasebe/wp2txt"
|
11
|
-
s.summary =
|
12
|
-
s.description =
|
13
|
-
|
11
|
+
s.summary = "A command-line toolkit to extract text content and category data from Wikipedia dump files"
|
12
|
+
s.description = "WP2TXT extracts text and category data from Wikipedia dump files (encoded in XML / compressed with Bzip2), removing MediaWiki markup and other metadata."
|
14
13
|
s.rubyforge_project = "wp2txt"
|
15
|
-
|
16
|
-
s.
|
14
|
+
s.license = "MIT"
|
15
|
+
s.required_ruby_version = Gem::Requirement.new(">= 2.6")
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
17
|
s.files -= ["data/*", "image/*"]
|
18
|
-
s.test_files
|
19
|
-
s.executables
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
# s.add_development_dependency "rake"
|
25
|
-
|
26
|
-
s.add_dependency "nokogiri"
|
27
|
-
s.add_dependency "ruby-progressbar"
|
28
|
-
s.add_dependency "parallel"
|
21
|
+
s.add_development_dependency "bundler"
|
22
|
+
s.add_development_dependency "rake"
|
23
|
+
s.add_development_dependency "rspec"
|
29
24
|
s.add_dependency "htmlentities"
|
25
|
+
s.add_dependency "nokogiri"
|
30
26
|
s.add_dependency "optimist"
|
27
|
+
s.add_dependency "parallel"
|
31
28
|
s.add_dependency "pastel"
|
29
|
+
s.add_dependency "ruby-progressbar"
|
32
30
|
s.add_dependency "tty-spinner"
|
33
31
|
end
|
metadata
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wp2txt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoichiro Hasebe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
|
-
type: :
|
20
|
+
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
@@ -25,13 +25,13 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
|
-
type: :
|
34
|
+
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
@@ -39,13 +39,13 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
|
-
type: :
|
48
|
+
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: nokogiri
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: optimist
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +94,20 @@ dependencies:
|
|
80
94
|
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: parallel
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: pastel
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +122,20 @@ dependencies:
|
|
94
122
|
- - ">="
|
95
123
|
- !ruby/object:Gem::Version
|
96
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: ruby-progressbar
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
97
139
|
- !ruby/object:Gem::Dependency
|
98
140
|
name: tty-spinner
|
99
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -117,7 +159,12 @@ executables:
|
|
117
159
|
extensions: []
|
118
160
|
extra_rdoc_files: []
|
119
161
|
files:
|
162
|
+
- ".dockerignore"
|
163
|
+
- ".github/workflows/ci.yml"
|
120
164
|
- ".gitignore"
|
165
|
+
- ".rubocop.yml"
|
166
|
+
- ".solargraph.yml"
|
167
|
+
- Dockerfile
|
121
168
|
- Gemfile
|
122
169
|
- LICENSE
|
123
170
|
- README.md
|
@@ -136,13 +183,15 @@ files:
|
|
136
183
|
- image/wp2txt.svg
|
137
184
|
- lib/wp2txt.rb
|
138
185
|
- lib/wp2txt/article.rb
|
186
|
+
- lib/wp2txt/regex.rb
|
139
187
|
- lib/wp2txt/utils.rb
|
140
188
|
- lib/wp2txt/version.rb
|
141
189
|
- spec/spec_helper.rb
|
142
190
|
- spec/utils_spec.rb
|
143
191
|
- wp2txt.gemspec
|
144
192
|
homepage: https://github.com/yohasebe/wp2txt
|
145
|
-
licenses:
|
193
|
+
licenses:
|
194
|
+
- MIT
|
146
195
|
metadata: {}
|
147
196
|
post_install_message:
|
148
197
|
rdoc_options: []
|
@@ -152,14 +201,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
152
201
|
requirements:
|
153
202
|
- - ">="
|
154
203
|
- !ruby/object:Gem::Version
|
155
|
-
version: '
|
204
|
+
version: '2.6'
|
156
205
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
206
|
requirements:
|
158
207
|
- - ">="
|
159
208
|
- !ruby/object:Gem::Version
|
160
209
|
version: '0'
|
161
210
|
requirements: []
|
162
|
-
rubygems_version: 3.
|
211
|
+
rubygems_version: 3.4.1
|
163
212
|
signing_key:
|
164
213
|
specification_version: 4
|
165
214
|
summary: A command-line toolkit to extract text content and category data from Wikipedia
|