ruby-jdict 0.0.7 → 0.0.8
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/LICENSING +28 -28
- data/README.md +18 -20
- data/Rakefile +41 -30
- data/examples/query.rb +19 -22
- data/lib/ruby-jdict.rb +14 -0
- data/lib/{constants.rb → ruby-jdict/constants.rb} +73 -64
- data/lib/ruby-jdict/convert.rb +33 -0
- data/lib/ruby-jdict/dictionary.rb +59 -0
- data/lib/ruby-jdict/index.rb +151 -0
- data/lib/ruby-jdict/indexer/dictionary_indexer.rb +28 -0
- data/lib/ruby-jdict/indexer/libxml_dictionary_indexer.rb +164 -0
- data/lib/ruby-jdict/indexer/nokogiri_dictionary_indexer.rb +60 -0
- data/lib/ruby-jdict/jdict.rb +2 -0
- data/lib/ruby-jdict/models/entry.rb +64 -0
- data/lib/ruby-jdict/models/sense.rb +81 -0
- data/lib/ruby-jdict/version.rb +3 -3
- data/spec/convert_spec.rb +27 -0
- data/spec/dictionary_spec.rb +113 -113
- data/spec/entry_spec.rb +25 -0
- data/spec/fixtures/feeds/sample_entry.xml +32 -32
- data/spec/index_spec.rb +82 -84
- data/spec/spec_helper.rb +49 -49
- metadata +35 -36
- data/examples/lst.txt +0 -4
- data/lib/configuration.rb +0 -34
- data/lib/dictionaries/jmdict.rb +0 -38
- data/lib/dictionary.rb +0 -90
- data/lib/downloader.rb +0 -42
- data/lib/entry.rb +0 -101
- data/lib/index.rb +0 -305
- data/lib/jdict.rb +0 -20
- data/lib/kana.rb +0 -4
- data/lib/kanji.rb +0 -4
- data/lib/sense.rb +0 -28
- data/lib/unicode.rb +0 -63
- data/spec/configuration_spec.rb +0 -20
- data/spec/jmdict_spec.rb +0 -19
data/spec/spec_helper.rb
CHANGED
@@ -1,50 +1,50 @@
|
|
1
|
-
require 'rubygems' #use gems
|
2
|
-
require 'bundler/setup' #load up the bundled environment
|
3
|
-
# require 'spec' #test framework
|
4
|
-
|
5
|
-
$DEBUG = true
|
6
|
-
|
7
|
-
BASE_PATH = File.dirname(__FILE__) + '/..'
|
8
|
-
INDEX_PATH = BASE_PATH + '/test_index'
|
9
|
-
JMDICT_PATH = BASE_PATH + '/dictionaries/JMdict'
|
10
|
-
|
11
|
-
##
|
12
|
-
# rSpec Hash additions.
|
13
|
-
#
|
14
|
-
# From
|
15
|
-
# * http://wincent.com/knowledge-base/Fixtures_considered_harmful%3F
|
16
|
-
# * Neil Rahilly
|
17
|
-
|
18
|
-
class Hash
|
19
|
-
|
20
|
-
##
|
21
|
-
# Filter keys out of a Hash.
|
22
|
-
#
|
23
|
-
# { :a => 1, :b => 2, :c => 3 }.except(:a)
|
24
|
-
# => { :b => 2, :c => 3 }
|
25
|
-
|
26
|
-
def except(*keys)
|
27
|
-
self.reject { |k,v| keys.include?(k || k.to_sym) }
|
28
|
-
end
|
29
|
-
|
30
|
-
##
|
31
|
-
# Override some keys.
|
32
|
-
#
|
33
|
-
# { :a => 1, :b => 2, :c => 3 }.with(:a => 4)
|
34
|
-
# => { :a => 4, :b => 2, :c => 3 }
|
35
|
-
|
36
|
-
def with(overrides = {})
|
37
|
-
self.merge overrides
|
38
|
-
end
|
39
|
-
|
40
|
-
##
|
41
|
-
# Returns a Hash with only the pairs identified by +keys+.
|
42
|
-
#
|
43
|
-
# { :a => 1, :b => 2, :c => 3 }.only(:a)
|
44
|
-
# => { :a => 1 }
|
45
|
-
|
46
|
-
def only(*keys)
|
47
|
-
self.reject { |k,v| !keys.include?(k || k.to_sym) }
|
48
|
-
end
|
49
|
-
|
1
|
+
require 'rubygems' #use gems
|
2
|
+
require 'bundler/setup' #load up the bundled environment
|
3
|
+
# require 'spec' #test framework
|
4
|
+
|
5
|
+
$DEBUG = true
|
6
|
+
|
7
|
+
BASE_PATH = File.dirname(__FILE__) + '/..'
|
8
|
+
INDEX_PATH = BASE_PATH + '/test_index'
|
9
|
+
JMDICT_PATH = BASE_PATH + '/dictionaries/JMdict'
|
10
|
+
|
11
|
+
##
|
12
|
+
# rSpec Hash additions.
|
13
|
+
#
|
14
|
+
# From
|
15
|
+
# * http://wincent.com/knowledge-base/Fixtures_considered_harmful%3F
|
16
|
+
# * Neil Rahilly
|
17
|
+
|
18
|
+
class Hash
|
19
|
+
|
20
|
+
##
|
21
|
+
# Filter keys out of a Hash.
|
22
|
+
#
|
23
|
+
# { :a => 1, :b => 2, :c => 3 }.except(:a)
|
24
|
+
# => { :b => 2, :c => 3 }
|
25
|
+
|
26
|
+
def except(*keys)
|
27
|
+
self.reject { |k,v| keys.include?(k || k.to_sym) }
|
28
|
+
end
|
29
|
+
|
30
|
+
##
|
31
|
+
# Override some keys.
|
32
|
+
#
|
33
|
+
# { :a => 1, :b => 2, :c => 3 }.with(:a => 4)
|
34
|
+
# => { :a => 4, :b => 2, :c => 3 }
|
35
|
+
|
36
|
+
def with(overrides = {})
|
37
|
+
self.merge overrides
|
38
|
+
end
|
39
|
+
|
40
|
+
##
|
41
|
+
# Returns a Hash with only the pairs identified by +keys+.
|
42
|
+
#
|
43
|
+
# { :a => 1, :b => 2, :c => 3 }.only(:a)
|
44
|
+
# => { :a => 1 }
|
45
|
+
|
46
|
+
def only(*keys)
|
47
|
+
self.reject { |k,v| !keys.include?(k || k.to_sym) }
|
48
|
+
end
|
49
|
+
|
50
50
|
end
|
metadata
CHANGED
@@ -1,85 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-jdict
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian Pickering
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '12.3'
|
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:
|
26
|
+
version: '12.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: nokogiri
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
33
|
+
version: '1.10'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.
|
40
|
+
version: '1.10'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: amalgalite
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.
|
47
|
+
version: '1.6'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
54
|
+
version: '1.6'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rsync
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :
|
61
|
+
version: '1.0'
|
62
|
+
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
68
|
+
version: '1.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 3.
|
75
|
+
version: '3.8'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 3.
|
82
|
+
version: '3.8'
|
83
83
|
description:
|
84
84
|
email:
|
85
85
|
- ipickering2@gmail.com
|
@@ -90,29 +90,28 @@ files:
|
|
90
90
|
- LICENSING
|
91
91
|
- README.md
|
92
92
|
- Rakefile
|
93
|
-
- examples/lst.txt
|
94
93
|
- examples/query.rb
|
95
|
-
- lib/
|
96
|
-
- lib/constants.rb
|
97
|
-
- lib/
|
98
|
-
- lib/dictionary.rb
|
99
|
-
- lib/
|
100
|
-
- lib/
|
101
|
-
- lib/
|
102
|
-
- lib/jdict.rb
|
103
|
-
- lib/
|
104
|
-
- lib/
|
94
|
+
- lib/ruby-jdict.rb
|
95
|
+
- lib/ruby-jdict/constants.rb
|
96
|
+
- lib/ruby-jdict/convert.rb
|
97
|
+
- lib/ruby-jdict/dictionary.rb
|
98
|
+
- lib/ruby-jdict/index.rb
|
99
|
+
- lib/ruby-jdict/indexer/dictionary_indexer.rb
|
100
|
+
- lib/ruby-jdict/indexer/libxml_dictionary_indexer.rb
|
101
|
+
- lib/ruby-jdict/indexer/nokogiri_dictionary_indexer.rb
|
102
|
+
- lib/ruby-jdict/jdict.rb
|
103
|
+
- lib/ruby-jdict/models/entry.rb
|
104
|
+
- lib/ruby-jdict/models/sense.rb
|
105
105
|
- lib/ruby-jdict/version.rb
|
106
|
-
-
|
107
|
-
- lib/unicode.rb
|
108
|
-
- spec/configuration_spec.rb
|
106
|
+
- spec/convert_spec.rb
|
109
107
|
- spec/dictionary_spec.rb
|
108
|
+
- spec/entry_spec.rb
|
110
109
|
- spec/fixtures/feeds/sample_entry.xml
|
111
110
|
- spec/index_spec.rb
|
112
|
-
- spec/jmdict_spec.rb
|
113
111
|
- spec/spec_helper.rb
|
114
112
|
homepage: https://github.com/Ruin0x11/ruby-jdict
|
115
|
-
licenses:
|
113
|
+
licenses:
|
114
|
+
- MIT
|
116
115
|
metadata: {}
|
117
116
|
post_install_message:
|
118
117
|
rdoc_options: []
|
@@ -130,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
129
|
version: '0'
|
131
130
|
requirements: []
|
132
131
|
rubyforge_project:
|
133
|
-
rubygems_version: 2.
|
132
|
+
rubygems_version: 2.6.14.3
|
134
133
|
signing_key:
|
135
134
|
specification_version: 4
|
136
135
|
summary: Ruby gem for accessing Jim Breen's Japanese dictionaries
|
data/examples/lst.txt
DELETED
data/lib/configuration.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'constants'
|
2
|
-
|
3
|
-
module JDict
|
4
|
-
class Configuration
|
5
|
-
attr_accessor :dictionary_path, :num_results, :language, :debug,
|
6
|
-
:jmdict_url, :jmdict_rsync_url
|
7
|
-
|
8
|
-
BASE_PATH = ENV["HOME"]
|
9
|
-
DICT_PATH = File.join(BASE_PATH, '.dicts')
|
10
|
-
|
11
|
-
JMDICT_URL = "ftp://ftp.monash.edu.au/pub/nihongo/JMdict.gz"
|
12
|
-
JMDICT_RSYNC_URL = "rsync://ftp.monash.edu.au/nihongo/JMdict"
|
13
|
-
|
14
|
-
def initialize
|
15
|
-
# directory containing dictionary files
|
16
|
-
@dictionary_path = DICT_PATH
|
17
|
-
|
18
|
-
# maximum results to return from searching
|
19
|
-
@num_results = 50
|
20
|
-
|
21
|
-
# language to return search results in
|
22
|
-
@language = JDict::JMDictConstants::Languages::ENGLISH
|
23
|
-
|
24
|
-
# limit number of entries indexed, rebuild index on instantiation
|
25
|
-
@debug = false
|
26
|
-
|
27
|
-
# url to retrieve JMDict from
|
28
|
-
@jmdict_url = JMDICT_URL
|
29
|
-
|
30
|
-
# url to rsync JMDict from
|
31
|
-
@jmdict_rsync_url = JMDICT_RSYNC_URL
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
data/lib/dictionaries/jmdict.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'jdict'
|
2
|
-
require 'dictionary'
|
3
|
-
require 'downloader'
|
4
|
-
|
5
|
-
module JDict
|
6
|
-
class JMDict < Dictionary
|
7
|
-
def dict_url
|
8
|
-
JDict.config.jmdict_url
|
9
|
-
end
|
10
|
-
|
11
|
-
def dict_file
|
12
|
-
'JMDict'
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def initialize
|
18
|
-
dict_path = JDict.config.dictionary_path
|
19
|
-
@downloader = JMDictDownloader.new
|
20
|
-
|
21
|
-
super(dict_path)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
class JMDictDownloader < Downloader
|
26
|
-
def download(dir)
|
27
|
-
url = JDict.config.jmdict_url
|
28
|
-
full_path = retrieve_file(url, dir)
|
29
|
-
gunzip(full_path)
|
30
|
-
end
|
31
|
-
|
32
|
-
def sync(dir)
|
33
|
-
dict_path = File.join(dir, 'JMdict')
|
34
|
-
rsync_url = JDict.config.jmdict_rsync_url
|
35
|
-
rsync(rsync_url, dict_path)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
data/lib/dictionary.rb
DELETED
@@ -1,90 +0,0 @@
|
|
1
|
-
require 'jdict'
|
2
|
-
require 'index'
|
3
|
-
|
4
|
-
module JDict
|
5
|
-
class Dictionary
|
6
|
-
def initialize(path)
|
7
|
-
@dictionary_path = File.join(path, self.dict_file)
|
8
|
-
@entries = []
|
9
|
-
|
10
|
-
prompt_for_download unless File.exists? @dictionary_path
|
11
|
-
|
12
|
-
@index = DictIndex.new(@dictionary_path)
|
13
|
-
end
|
14
|
-
|
15
|
-
def size
|
16
|
-
@entries.size
|
17
|
-
end
|
18
|
-
|
19
|
-
def loaded?
|
20
|
-
@index.built?
|
21
|
-
end
|
22
|
-
|
23
|
-
def download(dir)
|
24
|
-
@downloader.download(dir)
|
25
|
-
end
|
26
|
-
|
27
|
-
# abstract method
|
28
|
-
def dict_url
|
29
|
-
""
|
30
|
-
end
|
31
|
-
|
32
|
-
def dict_file
|
33
|
-
""
|
34
|
-
end
|
35
|
-
|
36
|
-
def prompt_for_download
|
37
|
-
base_dir = File.dirname(@dictionary_path)
|
38
|
-
|
39
|
-
puts "Dictionary not found at #{@dictionary_path}.\n" \
|
40
|
-
"Would you like to download the dictionary from the URL\n" \
|
41
|
-
" #{self.dict_url}\n" \
|
42
|
-
"into the folder\n" \
|
43
|
-
" #{base_dir}? [y/N]"
|
44
|
-
|
45
|
-
response = case $stdin.getch
|
46
|
-
when "Y" then true
|
47
|
-
when "y" then true
|
48
|
-
else false
|
49
|
-
end
|
50
|
-
|
51
|
-
unless response
|
52
|
-
puts "Dictionary not downloaded."
|
53
|
-
exit
|
54
|
-
end
|
55
|
-
|
56
|
-
FileUtils.mkdir_p(base_dir)
|
57
|
-
|
58
|
-
puts "Downloading dictionary..."
|
59
|
-
download(base_dir)
|
60
|
-
puts "Download completed."
|
61
|
-
end
|
62
|
-
|
63
|
-
# Search this dictionary's index for the given string.
|
64
|
-
# @param query [String] the search query
|
65
|
-
# @return [Array(Entry)] the results of the search
|
66
|
-
def search(query, exact=false)
|
67
|
-
results = []
|
68
|
-
return results if query.empty?
|
69
|
-
|
70
|
-
results = @index.search(query, exact)
|
71
|
-
end
|
72
|
-
|
73
|
-
# Retrieves the definition of a part-of-speech from its abbreviation
|
74
|
-
# @param pos [String] the abbreviation for the part-of-speech
|
75
|
-
# @return [String] the full description of the part-of-speech
|
76
|
-
def get_pos(pos)
|
77
|
-
@index.get_pos(pos)
|
78
|
-
end
|
79
|
-
|
80
|
-
private
|
81
|
-
|
82
|
-
def load_index
|
83
|
-
if loaded?
|
84
|
-
Exception.new("Dictionary index is already loaded")
|
85
|
-
else
|
86
|
-
@index.build
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
data/lib/downloader.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'open-uri'
|
2
|
-
require 'zlib'
|
3
|
-
require 'rsync'
|
4
|
-
|
5
|
-
module JDict
|
6
|
-
class Downloader
|
7
|
-
def download
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
def sync
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def retrieve_file(url, dest_dir)
|
18
|
-
filename = File.basename(url)
|
19
|
-
full_path = File.join(dest_dir, filename)
|
20
|
-
File.write(full_path, open(url).read)
|
21
|
-
full_path
|
22
|
-
end
|
23
|
-
|
24
|
-
def gunzip(filename)
|
25
|
-
to_write = File.join(File.dirname(filename), File.basename(filename, ".gz"))
|
26
|
-
|
27
|
-
File.open(to_write, 'w') do |wri|
|
28
|
-
File.open(filename) do |f|
|
29
|
-
gz = Zlib::GzipReader.new(f)
|
30
|
-
wri.write(gz.read)
|
31
|
-
gz.close
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
File.unlink(filename)
|
36
|
-
end
|
37
|
-
|
38
|
-
def rsync(src, dest)
|
39
|
-
Rsync.run(src, dest)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|