onlyoffice_language_helper 0.3.0 → 0.4.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd764ee21cd204cfb7d5a5043bc8dd77dd444a1155b061b121ba31c20d1070f6
|
4
|
+
data.tar.gz: 6740cc29afff12e6fcebbb3ec4e0ab22a715646c1f3a5ab79305d214f6d7bb5e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c658ea226f63814598546faf96c6e69bbcf75789b4e16140225eeeca581cd176bddf100e8023407d0224fc2d2c7a48603654ada5f649df53d2070cbe617760ab
|
7
|
+
data.tar.gz: 7125cacfd2ace60894d27cdf73562d59188eb6e206fafa7c314baf818d2d3ed78fba73bc6c271fe34dcacac8f333003d5b80a0db81fe61ad80ba6a6bb133f06e
|
@@ -1,12 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'hunspell
|
3
|
+
require 'ffi/hunspell'
|
4
4
|
require 'httparty'
|
5
5
|
require 'json'
|
6
6
|
require 'cgi'
|
7
7
|
require 'whatlanguage'
|
8
8
|
require_relative 'spell_checker/config'
|
9
|
-
require_relative 'spell_checker/dictionaries_threads'
|
10
9
|
|
11
10
|
# Spellchecker stuff
|
12
11
|
module OnlyofficeLanguageHelper
|
@@ -27,8 +26,7 @@ module OnlyofficeLanguageHelper
|
|
27
26
|
config
|
28
27
|
yield(@config) if block_given?
|
29
28
|
check_language
|
30
|
-
|
31
|
-
path_to_dic_aff(:dic))
|
29
|
+
FFI::Hunspell.directories = all_languages_dictonaries
|
32
30
|
OnlyofficeLoggerHelper.log('Configuring complete!')
|
33
31
|
end
|
34
32
|
|
@@ -36,12 +34,41 @@ module OnlyofficeLanguageHelper
|
|
36
34
|
# @param string [String] string to check
|
37
35
|
# @return [Array<Hash>] result of check
|
38
36
|
def self.check_in_all_dictionaries(string)
|
39
|
-
|
40
|
-
@dictionaries ||= DictionariesThreads.new
|
37
|
+
results = []
|
41
38
|
split_text_by_words(string).map do |word|
|
42
|
-
|
43
|
-
|
39
|
+
word_hash = {}
|
40
|
+
word_hash[word] = check_word_in_all(word)
|
41
|
+
results << word_hash
|
44
42
|
end
|
43
|
+
results
|
44
|
+
end
|
45
|
+
|
46
|
+
# Check word in all dictionaries
|
47
|
+
# @param [String] word to check
|
48
|
+
# @return [Hash] word check result
|
49
|
+
def self.check_word_in_all(word)
|
50
|
+
word_results = {}
|
51
|
+
|
52
|
+
@threads = []
|
53
|
+
available_languages.each do |language|
|
54
|
+
@threads << Thread.new do
|
55
|
+
word_results[language] = check_single_word(word, language)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
@threads.each(&:join)
|
59
|
+
word_results
|
60
|
+
end
|
61
|
+
|
62
|
+
# Check if word correct in single language
|
63
|
+
# @param [String] word to check
|
64
|
+
# @param [String] language to check
|
65
|
+
# @return [Boolean] result of check
|
66
|
+
def self.check_single_word(word, language)
|
67
|
+
dict = FFI::Hunspell.dict(language)
|
68
|
+
result = dict.check?(word)
|
69
|
+
dict.close
|
70
|
+
OnlyofficeLoggerHelper.log("Word `#{word}` in `#{language}` correct: #{result}")
|
71
|
+
result
|
45
72
|
end
|
46
73
|
|
47
74
|
# Get path to dic aff
|
@@ -50,7 +77,7 @@ module OnlyofficeLanguageHelper
|
|
50
77
|
# @return [String] path
|
51
78
|
def self.path_to_dic_aff(extension, language = config.expected_language)
|
52
79
|
"#{config.dictionaries_path}/dictionaries/"\
|
53
|
-
|
80
|
+
"#{language}/#{language}.#{extension}"
|
54
81
|
end
|
55
82
|
|
56
83
|
# Split text by words
|
@@ -60,19 +87,6 @@ module OnlyofficeLanguageHelper
|
|
60
87
|
string.to_s.scan(/\b[[:word:]['-]]+\b/u).uniq
|
61
88
|
end
|
62
89
|
|
63
|
-
# Parse spellchecker result
|
64
|
-
# @param word [String] word to check
|
65
|
-
# @param spellcheck_result [Hash] param to set result
|
66
|
-
# @return [Hash] value of result
|
67
|
-
def self.parse_spellcheck_result(word, spellcheck_result)
|
68
|
-
unless spellcheck_result[config.expected_language]
|
69
|
-
warn("Word '#{word}' was not found in "\
|
70
|
-
"'#{config.expected_language}' dictionary!")
|
71
|
-
spellcheck_result['suggestions'] = @dictionary.suggest(word)
|
72
|
-
end
|
73
|
-
{ word => spellcheck_result }
|
74
|
-
end
|
75
|
-
|
76
90
|
# @return [Config] get current config
|
77
91
|
def self.config
|
78
92
|
@config ||= Config.new
|
@@ -83,13 +97,6 @@ module OnlyofficeLanguageHelper
|
|
83
97
|
@config = Config.new
|
84
98
|
end
|
85
99
|
|
86
|
-
# @return [nil] check if current config is right
|
87
|
-
def self.check_configuration
|
88
|
-
return if @dictionary
|
89
|
-
|
90
|
-
raise 'Call SpellChecker.configure method before using it!'
|
91
|
-
end
|
92
|
-
|
93
100
|
# @return [nil] check if current language has dictonaries
|
94
101
|
def self.check_language
|
95
102
|
unless File.exist?(path_to_dic_aff(:dic)) ||
|
@@ -97,5 +104,17 @@ module OnlyofficeLanguageHelper
|
|
97
104
|
raise 'Incorrect language'
|
98
105
|
end
|
99
106
|
end
|
107
|
+
|
108
|
+
# @return [Array<String>] list of available dictonaries
|
109
|
+
def self.available_languages
|
110
|
+
all_languages_dictonaries.map { |dir| File.basename(dir) }
|
111
|
+
end
|
112
|
+
|
113
|
+
# @return [Array<String>] list of all dictionaries dir
|
114
|
+
def self.all_languages_dictonaries
|
115
|
+
Dir.glob("#{Dir.pwd}/lib/onlyoffice_language_helper/dictionaries/*").select do |fn|
|
116
|
+
File.directory?(fn)
|
117
|
+
end
|
118
|
+
end
|
100
119
|
end
|
101
120
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: onlyoffice_language_helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ONLYOFFICE
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-07-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: detect_language
|
@@ -26,33 +26,33 @@ dependencies:
|
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '1'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
29
|
+
name: ffi-hunspell
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - "
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 0
|
34
|
+
version: '0'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - "
|
39
|
+
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 0
|
41
|
+
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: httparty
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - "
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
48
|
+
version: 0.10.0
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - "
|
53
|
+
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: 0.10.0
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: onlyoffice_file_helper
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -179,6 +179,20 @@ dependencies:
|
|
179
179
|
- - "~>"
|
180
180
|
- !ruby/object:Gem::Version
|
181
181
|
version: '1'
|
182
|
+
- !ruby/object:Gem::Dependency
|
183
|
+
name: rubocop-rake
|
184
|
+
requirement: !ruby/object:Gem::Requirement
|
185
|
+
requirements:
|
186
|
+
- - "~>"
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '0'
|
189
|
+
type: :development
|
190
|
+
prerelease: false
|
191
|
+
version_requirements: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - "~>"
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
182
196
|
- !ruby/object:Gem::Dependency
|
183
197
|
name: rubocop-rspec
|
184
198
|
requirement: !ruby/object:Gem::Requirement
|
@@ -321,7 +335,6 @@ files:
|
|
321
335
|
- lib/onlyoffice_language_helper/name.rb
|
322
336
|
- lib/onlyoffice_language_helper/spell_checker.rb
|
323
337
|
- lib/onlyoffice_language_helper/spell_checker/config.rb
|
324
|
-
- lib/onlyoffice_language_helper/spell_checker/dictionaries_threads.rb
|
325
338
|
- lib/onlyoffice_language_helper/version.rb
|
326
339
|
homepage: https://github.com/ONLYOFFICE-QA/onlyoffice_language_helper
|
327
340
|
licenses:
|
@@ -347,7 +360,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
347
360
|
- !ruby/object:Gem::Version
|
348
361
|
version: '0'
|
349
362
|
requirements: []
|
350
|
-
rubygems_version: 3.
|
363
|
+
rubygems_version: 3.2.21
|
351
364
|
signing_key:
|
352
365
|
specification_version: 4
|
353
366
|
summary: ONLYOFFICE Helper Gem for language operation
|
@@ -1,67 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module OnlyofficeLanguageHelper
|
4
|
-
module SpellChecker
|
5
|
-
# Threads for spellchecker
|
6
|
-
class DictionariesThreads
|
7
|
-
attr_accessor :word
|
8
|
-
|
9
|
-
Thread.abort_on_exception = true
|
10
|
-
|
11
|
-
def initialize
|
12
|
-
@dictionaries = {}
|
13
|
-
Dir.glob("#{SpellChecker.config.dictionaries_path}/dictionaries/*")
|
14
|
-
.select { |f| File.directory?(f) }.each do |lang|
|
15
|
-
@dictionaries[File.basename(lang)] =
|
16
|
-
Hunspell.new(SpellChecker.path_to_dic_aff(:aff,
|
17
|
-
File.basename(lang)),
|
18
|
-
SpellChecker.path_to_dic_aff(:dic,
|
19
|
-
File.basename(lang)))
|
20
|
-
end
|
21
|
-
init_threads_data
|
22
|
-
end
|
23
|
-
|
24
|
-
# @return [Array<Thread>] list of checker threads
|
25
|
-
def threads
|
26
|
-
@threads ||= init_threads
|
27
|
-
end
|
28
|
-
|
29
|
-
# Check current word
|
30
|
-
# @param word [String] word to check
|
31
|
-
# @return [Hash] result of check
|
32
|
-
def check_word(word)
|
33
|
-
@result = {}
|
34
|
-
@word = word.to_s
|
35
|
-
start_threads
|
36
|
-
end
|
37
|
-
|
38
|
-
# @return [Hash] start threads and return results
|
39
|
-
def start_threads
|
40
|
-
threads.each(&:run)
|
41
|
-
until @result.length == @dictionaries.length
|
42
|
-
end
|
43
|
-
@result
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
def init_threads_data
|
49
|
-
@result = {}
|
50
|
-
threads
|
51
|
-
end
|
52
|
-
|
53
|
-
def init_threads
|
54
|
-
@threads = []
|
55
|
-
@dictionaries.each do |key, value|
|
56
|
-
@threads << Thread.new do
|
57
|
-
loop do
|
58
|
-
@result[key] = value.check(@word.to_s)
|
59
|
-
Thread.stop
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
@threads
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|