opener-language-identifier 4.2.2 → 4.4.1

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
- SHA1:
3
- metadata.gz: 0b0ad863a41e9866efa8852bf2c7580503e2ff7c
4
- data.tar.gz: f83c2953ff093e72ac460f70a1a250c5350edf72
2
+ SHA256:
3
+ metadata.gz: 677b72460e849ea75c868ccc3720ecc51949ada502dd24ddb8dbb9a6d0d86059
4
+ data.tar.gz: 732a58fb7a5f35d172fc72faebb4a9fd59b3327a140365f71047166781d000d9
5
5
  SHA512:
6
- metadata.gz: 7559934086f7c1b0e669b8bdcd0706a8724ad007bb01563641da7a365563f9d8a879fce06061bdb20fe20ada8c7a327f9823c12a9b5f40b2654db458766cf330
7
- data.tar.gz: cd97178ed250c759ced83a122cf3f4792f2efd3edd50738fa571b788f38d7ac4630f00296e7abc070136898cdc89a3d6d6ccc2797636785dfdd428df8f1aa984
6
+ metadata.gz: e54b3a901fdaaa44fb5772c1227dc9b381a8f335bb9a1e1f10ef8470308d5a84623d56873fa11c13ca8ff32273678a10e509292efb211057884bc487db2fb9da
7
+ data.tar.gz: 5719ece6c399d8831fd6020ee865386c1767f5afccaa9bd39bc54f938ff9e1f22e25d40faca45028bbfe436c20b89d0fbd6ac3ac2acaafa748023bff2d5cb87c
@@ -1,13 +1,19 @@
1
1
  require 'open3'
2
2
  require 'slop'
3
3
  require 'builder'
4
+ require 'pp'
4
5
 
5
- require_relative '../../core/target/LanguageDetection-1.0.0.jar'
6
+ require 'detect_language'
6
7
 
7
8
  require_relative 'language_identifier/version'
8
9
  require_relative 'language_identifier/kaf_builder'
9
10
  require_relative 'language_identifier/cli'
10
- require_relative 'language_identifier/detector.rb'
11
+ require_relative 'language_identifier/detector'
12
+ require_relative 'language_identifier/backend/detect_language_com'
13
+ if RUBY_ENGINE == 'jruby'
14
+ require_relative 'language_identifier/backend/language_detection'
15
+ require_relative 'language_identifier/backend/opennlp'
16
+ end
11
17
 
12
18
  module Opener
13
19
  ##
@@ -26,9 +32,8 @@ module Opener
26
32
  # @return [Hash]
27
33
  #
28
34
  DEFAULT_OPTIONS = {
29
- :args => [],
30
- :kaf => true,
31
- :probs => false
35
+ args: [],
36
+ kaf: true,
32
37
  }.freeze
33
38
 
34
39
  ##
@@ -40,12 +45,9 @@ module Opener
40
45
  # @option options [TrueClass|FalseClass] :kaf When set to `true` the
41
46
  # results will be displayed as KAF.
42
47
  #
43
- # @option options [TrueClass|FalseClass] :probs Wen set the probabilities
44
- # are returned instead of the language/KAF.
45
- #
46
48
  def initialize(options = {})
47
49
  @options = DEFAULT_OPTIONS.merge(options)
48
- @detector = Detector.new
50
+ @detector = Detector.new ENV['BACKEND'], ENV['FALLBACK']
49
51
  end
50
52
 
51
53
  ##
@@ -55,13 +57,9 @@ module Opener
55
57
  # @param [String] input The text of which to detect the language.
56
58
  # @return [Array]
57
59
  #
58
- def run(input)
59
- if options[:probs]
60
- output = @detector.probabilities(input)
61
- else
62
- output = @detector.detect(input)
63
- output = build_kaf(input, output) if options[:kaf]
64
- end
60
+ def run input, params = {}
61
+ output = @detector.detect input
62
+ output = build_kaf input, output if options[:kaf]
65
63
 
66
64
  return output
67
65
  end
@@ -0,0 +1,58 @@
1
+ module Opener
2
+ class LanguageIdentifier
3
+ module Backend
4
+ class DetectLanguageCom
5
+
6
+ ##
7
+ # Unknown or languages that use a different code
8
+ #
9
+ CODE_MAP = {
10
+ bug: nil,
11
+ ceb: :tl,
12
+ chr: nil,
13
+ crs: nil,
14
+ egy: nil,
15
+ got: nil,
16
+ haw: nil,
17
+ hmn: nil,
18
+ iw: :he,
19
+ jw: :jv,
20
+ kha: nil,
21
+ lif: :li,
22
+ mfe: nil,
23
+ nso: nil,
24
+ sco: nil,
25
+ syr: nil,
26
+ tlh: nil,
27
+ war: :tl,
28
+ zh: :'zh-cn',
29
+ 'zh-Hant': :'zh-cn',
30
+ }
31
+
32
+ def initialize
33
+ DetectLanguage.configure do |config|
34
+ config.secure = true
35
+ config.api_key = ENV['DETECT_LANGUAGE_TOKEN']
36
+ config.http_read_timeout = 300
37
+ config.http_open_timeout = 300
38
+ raise 'no detectlanguage token specified' if config.api_key.nil?
39
+ end
40
+ end
41
+
42
+ def detect input
43
+ code = DetectLanguage.simple_detect input
44
+ return 'unknown' unless code
45
+
46
+ mapped_code = CODE_MAP[code.to_sym]
47
+ return mapped_code.to_s if mapped_code
48
+
49
+ code
50
+
51
+ rescue
52
+ retry
53
+ end
54
+
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,142 @@
1
+ require_relative '../../../../core/target/LanguageDetection-1.0.0.jar'
2
+
3
+ module Opener
4
+ class LanguageIdentifier
5
+ module Backend
6
+ class LanguageDetection
7
+
8
+ ##
9
+ # Path to the directory containing the default profiles.
10
+ #
11
+ # @return [String]
12
+ #
13
+ DEFAULT_PROFILES_PATH = File.expand_path(
14
+ '../../../../../core/target/classes/profiles',
15
+ __FILE__
16
+ )
17
+
18
+ ##
19
+ # Path to the directory containing the default short profiles.
20
+ #
21
+ # @return [String]
22
+ #
23
+ DEFAULT_SHORT_PROFILES_PATH = File.expand_path(
24
+ '../../../../../core/target/classes/short_profiles',
25
+ __FILE__
26
+ )
27
+
28
+ ##
29
+ # Prioritize OpeNER languages over the rest. Languages not covered by this
30
+ # list are automatically given a default priority.
31
+ #
32
+ # @return [Hash]
33
+ #
34
+ PRIORITIES = {
35
+ 'en' => 1.0,
36
+ 'es' => 0.9,
37
+ 'it' => 0.9,
38
+ 'fr' => 0.9,
39
+ 'de' => 0.9,
40
+ 'nl' => 0.9,
41
+
42
+ # These languages are disabled (for the time being) due to conflicting
43
+ # with other (OpeNER) languages too often.
44
+ 'af' => 0.0, # conflicts with Dutch
45
+ }
46
+
47
+ ##
48
+ # The default priority for non OpeNER languages.
49
+ #
50
+ # @return [Float]
51
+ #
52
+ DEFAULT_PRIORITY = 0.5
53
+
54
+ ##
55
+ # The amount of characters after which the detector should switch to using
56
+ # the longer profiles set.
57
+ #
58
+ # @return [Fixnum]
59
+ #
60
+ SHORT_THRESHOLD = 15
61
+
62
+ def initialize
63
+ @factory = com.cybozu.labs.langdetect.DetectorFactory.new
64
+ end
65
+
66
+ def new_detector input
67
+ @factory.load_profile determine_profiles input
68
+ @factory.set_seed 1
69
+
70
+ priorities = build_priorities input, @factory.langlist
71
+ detector = com.cybozu.labs.langdetect.Detector.new @factory
72
+
73
+ detector.set_prior_map priorities
74
+ detector.append input.downcase
75
+ detector
76
+ end
77
+
78
+ ##
79
+ # @return [String]
80
+ #
81
+ def detect input
82
+ detector = new_detector input
83
+ detector.detect
84
+
85
+ # The core Java code raise an exception when it can't detect a language.
86
+ # Since this isn't actually something fatal we'll capture this and return
87
+ # "unknown" instead.
88
+ rescue com.cybozu.labs.langdetect.LangDetectException
89
+ return 'unknown'
90
+ end
91
+
92
+ protected
93
+
94
+ ##
95
+ # Builds a Java Hash mapping the priorities for all OpeNER and non OpeNER
96
+ # languages.
97
+ #
98
+ # If the input size is smaller than the short profiles threshold non
99
+ # OpeNER languages are _disabled_. This is to ensure that these languages
100
+ # are detected properly when analysing only 1-2 words.
101
+ #
102
+ # @param [String] input
103
+ # @param [Array<String>] languages
104
+ # @return [java.util.HashMap]
105
+ #
106
+ def build_priorities input, languages
107
+ priorities = java.util.HashMap.new
108
+ priority = if short_input? input then 0.0 else DEFAULT_PRIORITY end
109
+
110
+ PRIORITIES.each do |lang, val|
111
+ priorities.put(lang, val)
112
+ end
113
+
114
+ languages.each do |language|
115
+ unless priorities.contains_key(language)
116
+ priorities.put(language, priority)
117
+ end
118
+ end
119
+
120
+ priorities
121
+ end
122
+
123
+ ##
124
+ # @param [String] input
125
+ # @return [String]
126
+ #
127
+ def determine_profiles input
128
+ if short_input? input then DEFAULT_SHORT_PROFILES_PATH else DEFAULT_PROFILES_PATH end
129
+ end
130
+
131
+ ##
132
+ # @param [String] input
133
+ # @return [TrueClass|FalseClass]
134
+ #
135
+ def short_input? input
136
+ input.length <= SHORT_THRESHOLD
137
+ end
138
+
139
+ end
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,143 @@
1
+ if ENV.values_at('BACKEND', 'FALLBACK').include? 'Opennlp'
2
+ require_relative '../../../../core/target/opennlp/opennlp-tools-1.8.4.jar'
3
+ end
4
+
5
+ module Opener
6
+ class LanguageIdentifier
7
+ module Backend
8
+ class Opennlp
9
+
10
+ include_package 'opennlp.tools.langdetect'
11
+
12
+ MODEL_FILE = File.expand_path '../../../../core/target/opennlp/langdetect-183.bin', File.dirname(__FILE__)
13
+ ISOCODE_MAP = {
14
+ afr: :nl,
15
+ ara: :ar,
16
+ aze: :az,
17
+ bak: :ba,
18
+ bel: :be,
19
+ ben: :bn,
20
+ bos: :bs,
21
+ bre: :br,
22
+ bul: :bg,
23
+ cat: :ca,
24
+ ces: :cs,
25
+ che: :ce,
26
+ cmn: :'zh-cn',
27
+ nan: :'zh-cn',
28
+ cym: :cy,
29
+ dan: :da,
30
+ deu: :de,
31
+ gsw: :de,
32
+ nds: :de,
33
+ ell: :el,
34
+ eng: :en,
35
+ epo: :eo,
36
+ est: :et,
37
+ ekk: :et,
38
+ eus: :eu,
39
+ fao: :fo,
40
+ fin: :fi,
41
+ fra: :fr,
42
+ fry: :fy,
43
+ gle: :ga,
44
+ glg: :gl,
45
+ guj: :gu,
46
+ heb: :he,
47
+ hin: :hi,
48
+ hrv: :hr,
49
+ hun: :hu,
50
+ hye: :hy,
51
+ ind: :id,
52
+ isl: :is,
53
+ ita: :it,
54
+ jav: :jv,
55
+ jpn: :ja,
56
+ kan: :kn,
57
+ kat: :ka,
58
+ kaz: :kk,
59
+ kir: :ky,
60
+ kor: :ko,
61
+ lat: :la,
62
+ lim: :li,
63
+ lit: :lt,
64
+ ltz: :lb,
65
+ lav: :lv,
66
+ lvs: :lv,
67
+ mal: :ml,
68
+ mar: :mr,
69
+ mkd: :mk,
70
+ mlt: :mt,
71
+ mon: :mn,
72
+ mri: :mi,
73
+ min: :ms,
74
+ msa: :ms,
75
+ nep: :ne,
76
+ nld: :nl,
77
+ nno: :nn,
78
+ nob: :no,
79
+ oci: :oc,
80
+ pan: :pa,
81
+ pnb: :pa,
82
+ plt: :mg,
83
+ fas: :fa,
84
+ pes: :fa,
85
+ pol: :pl,
86
+ por: :pt,
87
+ pus: :ps,
88
+ ron: :ro,
89
+ rus: :ru,
90
+ san: :sa,
91
+ sin: :si,
92
+ slk: :sk,
93
+ slv: :sl,
94
+ som: :so,
95
+ ast: :es,
96
+ spa: :es,
97
+ sqi: :sq,
98
+ srp: :sr,
99
+ sun: :su,
100
+ swa: :sw,
101
+ swe: :sv,
102
+ tam: :ta,
103
+ tat: :tt,
104
+ tel: :te,
105
+ tgk: :tg,
106
+ ceb: :tl,
107
+ tgl: :tl,
108
+ war: :tl,
109
+ tha: :th,
110
+ tur: :tr,
111
+ ukr: :uk,
112
+ urd: :ur,
113
+ uzb: :uz,
114
+ vie: :vi,
115
+ vol: :vo,
116
+ zul: :zu,
117
+ }
118
+
119
+ def initialize
120
+ model_file = java.io.File.new MODEL_FILE
121
+ input = java.io.FileInputStream.new model_file
122
+ @model = LanguageDetectorModel.new input
123
+ @detector = LanguageDetectorME.new @model
124
+ end
125
+
126
+ def detect input
127
+ language = @detector.predictLanguage input
128
+ return 'unknown' unless language
129
+
130
+ code = ISOCODE_MAP[language.getLang.to_sym]
131
+ return 'unknown' unless code
132
+
133
+ code.to_s
134
+
135
+ rescue
136
+ return 'unknown'
137
+ end
138
+
139
+ end
140
+ end
141
+ end
142
+ end
143
+
@@ -48,25 +48,18 @@ Example:
48
48
  end
49
49
 
50
50
  on :'no-kaf', 'Disables KAF output'
51
- on :p, :probs, 'Displays probabilities instead of a language code'
52
51
 
53
52
  run do |opts, args|
54
53
  enable_kaf = true
55
- enable_probs = false
56
54
 
57
55
  if opts[:'no-kaf']
58
56
  enable_kaf = false
59
57
  end
60
58
 
61
- if opts[:probs]
62
- enable_kf = false
63
- enable_probs = true
64
- end
65
-
66
59
  identifier = LanguageIdentifier.new(
67
- :args => args,
68
- :kaf => enable_kaf,
69
- :probs => enable_probs
60
+ args: args,
61
+ kaf: enable_kaf,
62
+ probs: false,
70
63
  )
71
64
 
72
65
  input = STDIN.tty? ? nil : STDIN.read
@@ -6,165 +6,42 @@ module Opener
6
6
  # assigning priorities to languages, etc.
7
7
  #
8
8
  class Detector
9
- attr_reader :profiles_path, :short_profiles_path
10
9
 
11
- ##
12
- # Path to the directory containing the default profiles.
13
- #
14
- # @return [String]
15
- #
16
- DEFAULT_PROFILES_PATH = File.expand_path(
17
- '../../../../core/target/classes/profiles',
18
- __FILE__
19
- )
20
-
21
- ##
22
- # Path to the directory containing the default short profiles.
23
- #
24
- # @return [String]
25
- #
26
- DEFAULT_SHORT_PROFILES_PATH = File.expand_path(
27
- '../../../../core/target/classes/short_profiles',
28
- __FILE__
29
- )
30
-
31
- ##
32
- # The amount of characters after which the detector should switch to using
33
- # the longer profiles set.
34
- #
35
- # @return [Fixnum]
36
- #
37
- SHORT_THRESHOLD = 15
38
-
39
- ##
40
- # Prioritize OpeNER languages over the rest. Languages not covered by this
41
- # list are automatically given a default priority.
42
- #
43
- # @return [Hash]
44
- #
45
- PRIORITIES = {
46
- 'en' => 1.0,
47
- 'es' => 0.9,
48
- 'it' => 0.9,
49
- 'fr' => 0.9,
50
- 'de' => 0.9,
51
- 'nl' => 0.9,
52
-
53
- # These languages are disabled (for the time being) due to conflicting
54
- # with other (OpeNER) languages too often.
55
- 'af' => 0.0, # conflicts with Dutch
56
- }
57
-
58
- ##
59
- # The default priority for non OpeNER languages.
60
- #
61
- # @return [Float]
62
- #
63
- DEFAULT_PRIORITY = 0.5
10
+ attr_reader :backend
64
11
 
65
12
  ##
66
13
  # @param [Hash] options
67
14
  #
68
- # @option options [String] :profiles_path
69
- # @option options [String] :short_profiles_path
70
15
  #
71
- def initialize(options = {})
72
- options.each do |key, value|
73
- instance_variable_set("@#{key}", value) if respond_to?(key)
74
- end
16
+ def initialize backend = nil, fallback = nil
17
+ klass = Backend.const_get backend.to_sym if backend
18
+ klass ||= Backend::LanguageDetection
19
+ @backend = klass.new
75
20
 
76
- @profiles_path ||= DEFAULT_PROFILES_PATH
77
- @short_profiles_path ||= DEFAULT_SHORT_PROFILES_PATH
21
+ klass = Backend.const_get fallback.to_sym if fallback
22
+ @fallback = klass.new if klass
23
+
24
+ @timeout = ENV['TIMEOUT']&.to_i
78
25
  end
79
26
 
80
27
  ##
81
28
  # @return [String]
82
29
  #
83
30
  def detect(input)
84
- return new_detector(input).detect
85
-
86
- # The core Java code raise an exception when it can't detect a language.
87
- # Since this isn't actually something fatal we'll capture this and return
88
- # "unknown" instead.
89
- rescue com.cybozu.labs.langdetect.LangDetectException
90
- return 'unknown'
31
+ backend_detect @backend, input
32
+ rescue
33
+ raise unless @fallback
34
+ puts 'Using fallback backend' if ENV['DEBUG']
35
+ backend_detect @fallback, input
91
36
  end
92
37
 
93
- ##
94
- # @return [Array]
95
- #
96
- def probabilities(input)
97
- return new_detector(input).get_probabilities.to_array
98
- end
99
-
100
- ##
101
- # Returns a new detector with the profiles set based on the input.
102
- #
103
- # This method analyses a lowercased version of the input as this yields
104
- # better results for short text.
105
- #
106
- # @param [String] input
107
- # @return [CybozuDetector]
108
- #
109
- def new_detector(input)
110
- factory = com.cybozu.labs.langdetect.DetectorFactory.new
111
-
112
- factory.load_profile(determine_profiles(input))
113
- factory.set_seed(1)
114
-
115
- priorities = build_priorities(input, factory.langlist)
116
- detector = com.cybozu.labs.langdetect.Detector.new(factory)
117
-
118
- detector.set_prior_map(priorities)
119
- detector.append(input.downcase)
120
-
121
- return detector
122
- end
123
-
124
- ##
125
- # Builds a Java Hash mapping the priorities for all OpeNER and non OpeNER
126
- # languages.
127
- #
128
- # If the input size is smaller than the short profiles threshold non
129
- # OpeNER languages are _disabled_. This is to ensure that these languages
130
- # are detected properly when analysing only 1-2 words.
131
- #
132
- # @param [String] input
133
- # @param [Array<String>] languages
134
- # @return [java.util.HashMap]
135
- #
136
- def build_priorities(input, languages)
137
- priorities = java.util.HashMap.new
138
- priority = short_input?(input) ? 0.0 : DEFAULT_PRIORITY
139
-
140
- PRIORITIES.each do |lang, val|
141
- priorities.put(lang, val)
142
- end
143
-
144
- languages.each do |language|
145
- unless priorities.contains_key(language)
146
- priorities.put(language, priority)
147
- end
38
+ def backend_detect backend, input
39
+ return backend.detect input unless @timeout
40
+ Timeout.timeout @timeout do
41
+ backend.detect input
148
42
  end
149
-
150
- return priorities
151
43
  end
152
44
 
153
- ##
154
- # @param [String] input
155
- # @return [String]
156
- #
157
- def determine_profiles(input)
158
- return short_input?(input) ? short_profiles_path : profiles_path
159
- end
160
-
161
- ##
162
- # @param [String] input
163
- # @return [TrueClass|FalseClass]
164
- #
165
- def short_input?(input)
166
- return input.length <= SHORT_THRESHOLD
167
- end
168
- end # Detector
169
- end # LanguageIdentifier
170
- end # Opener
45
+ end
46
+ end
47
+ end
@@ -1,5 +1,7 @@
1
1
  module Opener
2
2
  class LanguageIdentifier
3
- VERSION = '4.2.2'
3
+
4
+ VERSION = '4.4.1'
5
+
4
6
  end
5
7
  end
@@ -5,15 +5,15 @@ Gem::Specification.new do |gem|
5
5
  gem.version = Opener::LanguageIdentifier::VERSION
6
6
  gem.authors = ['development@olery.com']
7
7
  gem.summary = 'Language identifier for human readable text.'
8
- gem.description = gem.summary
8
+ gem.description = gem.summary + " "
9
9
  gem.homepage = "http://opener-project.github.com/"
10
- gem.has_rdoc = 'yard'
11
10
  gem.required_ruby_version = '>= 1.9.2'
12
11
 
13
12
  gem.license = 'Apache 2.0'
14
13
 
15
14
  gem.files = Dir.glob([
16
15
  'core/target/LanguageDetection-*.jar',
16
+ 'core/target/opennlp/*',
17
17
  'core/target/classes/**/*',
18
18
  'exec/**/*',
19
19
  'lib/**/*',
@@ -25,12 +25,15 @@ Gem::Specification.new do |gem|
25
25
 
26
26
  gem.executables = Dir.glob('bin/*').map { |file| File.basename(file) }
27
27
 
28
- gem.add_dependency 'opener-daemons', '~> 2.2'
28
+ gem.add_dependency 'newrelic_rpm'
29
+
30
+ gem.add_dependency 'opener-daemons', ['~> 2.5', '>= 2.5.6']
29
31
  gem.add_dependency 'opener-webservice', '~> 2.1'
30
32
 
31
33
  gem.add_dependency 'builder'
32
34
  gem.add_dependency 'nokogiri'
33
35
  gem.add_dependency 'slop', '~> 3.5'
36
+ gem.add_dependency 'detect_language'
34
37
 
35
38
  gem.add_development_dependency 'rspec', '~> 3.0'
36
39
  gem.add_development_dependency 'rake'
metadata CHANGED
@@ -1,267 +1,304 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opener-language-identifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.2
4
+ version: 4.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - development@olery.com
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-06 00:00:00.000000000 Z
11
+ date: 2020-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: opener-daemons
14
+ name: newrelic_rpm
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
15
22
  version_requirements: !ruby/object:Gem::Requirement
16
23
  requirements:
17
- - - ~>
24
+ - - ">="
18
25
  - !ruby/object:Gem::Version
19
- version: '2.2'
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: opener-daemons
20
29
  requirement: !ruby/object:Gem::Requirement
21
30
  requirements:
22
- - - ~>
31
+ - - "~>"
23
32
  - !ruby/object:Gem::Version
24
- version: '2.2'
25
- prerelease: false
33
+ version: '2.5'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 2.5.6
26
37
  type: :runtime
27
- - !ruby/object:Gem::Dependency
28
- name: opener-webservice
38
+ prerelease: false
29
39
  version_requirements: !ruby/object:Gem::Requirement
30
40
  requirements:
31
- - - ~>
41
+ - - "~>"
32
42
  - !ruby/object:Gem::Version
33
- version: '2.1'
43
+ version: '2.5'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 2.5.6
47
+ - !ruby/object:Gem::Dependency
48
+ name: opener-webservice
34
49
  requirement: !ruby/object:Gem::Requirement
35
50
  requirements:
36
- - - ~>
51
+ - - "~>"
37
52
  - !ruby/object:Gem::Version
38
53
  version: '2.1'
39
- prerelease: false
40
54
  type: :runtime
41
- - !ruby/object:Gem::Dependency
42
- name: builder
55
+ prerelease: false
43
56
  version_requirements: !ruby/object:Gem::Requirement
44
57
  requirements:
45
- - - '>='
58
+ - - "~>"
46
59
  - !ruby/object:Gem::Version
47
- version: '0'
60
+ version: '2.1'
61
+ - !ruby/object:Gem::Dependency
62
+ name: builder
48
63
  requirement: !ruby/object:Gem::Requirement
49
64
  requirements:
50
- - - '>='
65
+ - - ">="
51
66
  - !ruby/object:Gem::Version
52
67
  version: '0'
53
- prerelease: false
54
68
  type: :runtime
55
- - !ruby/object:Gem::Dependency
56
- name: nokogiri
69
+ prerelease: false
57
70
  version_requirements: !ruby/object:Gem::Requirement
58
71
  requirements:
59
- - - '>='
72
+ - - ">="
60
73
  - !ruby/object:Gem::Version
61
74
  version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: nokogiri
62
77
  requirement: !ruby/object:Gem::Requirement
63
78
  requirements:
64
- - - '>='
79
+ - - ">="
65
80
  - !ruby/object:Gem::Version
66
81
  version: '0'
67
- prerelease: false
68
82
  type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
69
89
  - !ruby/object:Gem::Dependency
70
90
  name: slop
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '3.5'
96
+ type: :runtime
97
+ prerelease: false
71
98
  version_requirements: !ruby/object:Gem::Requirement
72
99
  requirements:
73
- - - ~>
100
+ - - "~>"
74
101
  - !ruby/object:Gem::Version
75
102
  version: '3.5'
103
+ - !ruby/object:Gem::Dependency
104
+ name: detect_language
76
105
  requirement: !ruby/object:Gem::Requirement
77
106
  requirements:
78
- - - ~>
107
+ - - ">="
79
108
  - !ruby/object:Gem::Version
80
- version: '3.5'
81
- prerelease: false
109
+ version: '0'
82
110
  type: :runtime
83
- - !ruby/object:Gem::Dependency
84
- name: rspec
111
+ prerelease: false
85
112
  version_requirements: !ruby/object:Gem::Requirement
86
113
  requirements:
87
- - - ~>
114
+ - - ">="
88
115
  - !ruby/object:Gem::Version
89
- version: '3.0'
116
+ version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: rspec
90
119
  requirement: !ruby/object:Gem::Requirement
91
120
  requirements:
92
- - - ~>
121
+ - - "~>"
93
122
  - !ruby/object:Gem::Version
94
123
  version: '3.0'
95
- prerelease: false
96
124
  type: :development
97
- - !ruby/object:Gem::Dependency
98
- name: rake
125
+ prerelease: false
99
126
  version_requirements: !ruby/object:Gem::Requirement
100
127
  requirements:
101
- - - '>='
128
+ - - "~>"
102
129
  - !ruby/object:Gem::Version
103
- version: '0'
130
+ version: '3.0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: rake
104
133
  requirement: !ruby/object:Gem::Requirement
105
134
  requirements:
106
- - - '>='
135
+ - - ">="
107
136
  - !ruby/object:Gem::Version
108
137
  version: '0'
109
- prerelease: false
110
138
  type: :development
111
- - !ruby/object:Gem::Dependency
112
- name: cliver
139
+ prerelease: false
113
140
  version_requirements: !ruby/object:Gem::Requirement
114
141
  requirements:
115
- - - '>='
142
+ - - ">="
116
143
  - !ruby/object:Gem::Version
117
144
  version: '0'
145
+ - !ruby/object:Gem::Dependency
146
+ name: cliver
118
147
  requirement: !ruby/object:Gem::Requirement
119
148
  requirements:
120
- - - '>='
149
+ - - ">="
121
150
  - !ruby/object:Gem::Version
122
151
  version: '0'
123
- prerelease: false
124
152
  type: :development
125
- description: Language identifier for human readable text.
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ description: 'Language identifier for human readable text. '
126
160
  email:
127
161
  executables:
128
162
  - language-identifier
129
- - language-identifier-server
130
163
  - language-identifier-daemon
164
+ - language-identifier-server
131
165
  extensions: []
132
166
  extra_rdoc_files: []
133
167
  files:
168
+ - LICENSE.txt
169
+ - README.md
170
+ - bin/language-identifier
171
+ - bin/language-identifier-daemon
172
+ - bin/language-identifier-server
173
+ - config.ru
134
174
  - core/target/LanguageDetection-1.0.0.jar
135
- - core/target/LanguageDetection-0.0.1.jar
136
- - core/target/classes/profiles/fi
137
- - core/target/classes/profiles/ta
138
- - core/target/classes/profiles/mr
139
- - core/target/classes/profiles/ml
140
- - core/target/classes/profiles/hr
141
- - core/target/classes/profiles/id
142
- - core/target/classes/profiles/es
143
- - core/target/classes/profiles/no
175
+ - core/target/classes/com/cybozu/labs/langdetect/Detector.class
176
+ - core/target/classes/com/cybozu/labs/langdetect/DetectorFactory.class
177
+ - core/target/classes/com/cybozu/labs/langdetect/ErrorCode.class
178
+ - core/target/classes/com/cybozu/labs/langdetect/LangDetectException.class
179
+ - core/target/classes/com/cybozu/labs/langdetect/Language.class
180
+ - core/target/classes/com/cybozu/labs/langdetect/util/LangProfile.class
181
+ - core/target/classes/com/cybozu/labs/langdetect/util/Messages.class
182
+ - core/target/classes/com/cybozu/labs/langdetect/util/NGram.class
183
+ - core/target/classes/com/cybozu/labs/langdetect/util/messages.properties
184
+ - core/target/classes/profiles/af
185
+ - core/target/classes/profiles/ar
186
+ - core/target/classes/profiles/bg
187
+ - core/target/classes/profiles/bn
144
188
  - core/target/classes/profiles/ca
189
+ - core/target/classes/profiles/cs
190
+ - core/target/classes/profiles/da
191
+ - core/target/classes/profiles/de
192
+ - core/target/classes/profiles/el
145
193
  - core/target/classes/profiles/en
146
- - core/target/classes/profiles/ru
147
- - core/target/classes/profiles/te
148
- - core/target/classes/profiles/lt
149
- - core/target/classes/profiles/pa
194
+ - core/target/classes/profiles/es
195
+ - core/target/classes/profiles/et
150
196
  - core/target/classes/profiles/eu
151
- - core/target/classes/profiles/ja
152
- - core/target/classes/profiles/he
153
- - core/target/classes/profiles/nl
154
- - core/target/classes/profiles/sl
155
- - core/target/classes/profiles/tr
156
- - core/target/classes/profiles/pl
157
- - core/target/classes/profiles/sk
158
197
  - core/target/classes/profiles/fa
159
- - core/target/classes/profiles/de
160
- - core/target/classes/profiles/bg
161
- - core/target/classes/profiles/it
198
+ - core/target/classes/profiles/fi
162
199
  - core/target/classes/profiles/fr
163
- - core/target/classes/profiles/el
164
- - core/target/classes/profiles/pt
165
- - core/target/classes/profiles/uk
166
- - core/target/classes/profiles/da
167
- - core/target/classes/profiles/ar
168
- - core/target/classes/profiles/zh-tw
169
- - core/target/classes/profiles/sq
170
- - core/target/classes/profiles/th
200
+ - core/target/classes/profiles/gu
201
+ - core/target/classes/profiles/he
202
+ - core/target/classes/profiles/hi
203
+ - core/target/classes/profiles/hr
204
+ - core/target/classes/profiles/hu
205
+ - core/target/classes/profiles/id
206
+ - core/target/classes/profiles/it
207
+ - core/target/classes/profiles/ja
171
208
  - core/target/classes/profiles/kn
172
- - core/target/classes/profiles/sw
173
209
  - core/target/classes/profiles/ko
174
- - core/target/classes/profiles/ro
210
+ - core/target/classes/profiles/lt
175
211
  - core/target/classes/profiles/lv
176
- - core/target/classes/profiles/sv
177
- - core/target/classes/profiles/so
178
- - core/target/classes/profiles/vi
179
- - core/target/classes/profiles/et
180
- - core/target/classes/profiles/hi
181
- - core/target/classes/profiles/af
182
- - core/target/classes/profiles/gu
183
- - core/target/classes/profiles/zh-cn
184
212
  - core/target/classes/profiles/mk
213
+ - core/target/classes/profiles/ml
214
+ - core/target/classes/profiles/mr
185
215
  - core/target/classes/profiles/ne
186
- - core/target/classes/profiles/ur
187
- - core/target/classes/profiles/hu
188
- - core/target/classes/profiles/cs
189
- - core/target/classes/profiles/bn
216
+ - core/target/classes/profiles/nl
217
+ - core/target/classes/profiles/no
218
+ - core/target/classes/profiles/pa
219
+ - core/target/classes/profiles/pl
220
+ - core/target/classes/profiles/pt
221
+ - core/target/classes/profiles/ro
222
+ - core/target/classes/profiles/ru
223
+ - core/target/classes/profiles/sk
224
+ - core/target/classes/profiles/sl
225
+ - core/target/classes/profiles/so
226
+ - core/target/classes/profiles/sq
227
+ - core/target/classes/profiles/sv
228
+ - core/target/classes/profiles/sw
229
+ - core/target/classes/profiles/ta
230
+ - core/target/classes/profiles/te
231
+ - core/target/classes/profiles/th
190
232
  - core/target/classes/profiles/tl
233
+ - core/target/classes/profiles/tr
234
+ - core/target/classes/profiles/uk
235
+ - core/target/classes/profiles/ur
236
+ - core/target/classes/profiles/vi
237
+ - core/target/classes/profiles/zh-cn
238
+ - core/target/classes/profiles/zh-tw
239
+ - core/target/classes/short_profiles/ar
240
+ - core/target/classes/short_profiles/bg
241
+ - core/target/classes/short_profiles/bn
242
+ - core/target/classes/short_profiles/ca
243
+ - core/target/classes/short_profiles/cs
244
+ - core/target/classes/short_profiles/da
245
+ - core/target/classes/short_profiles/de
246
+ - core/target/classes/short_profiles/el
247
+ - core/target/classes/short_profiles/en
248
+ - core/target/classes/short_profiles/es
249
+ - core/target/classes/short_profiles/et
250
+ - core/target/classes/short_profiles/fa
191
251
  - core/target/classes/short_profiles/fi
192
- - core/target/classes/short_profiles/ta
193
- - core/target/classes/short_profiles/ml
252
+ - core/target/classes/short_profiles/fr
253
+ - core/target/classes/short_profiles/gu
254
+ - core/target/classes/short_profiles/he
255
+ - core/target/classes/short_profiles/hi
194
256
  - core/target/classes/short_profiles/hr
257
+ - core/target/classes/short_profiles/hu
195
258
  - core/target/classes/short_profiles/id
196
- - core/target/classes/short_profiles/es
197
- - core/target/classes/short_profiles/no
198
- - core/target/classes/short_profiles/ca
199
- - core/target/classes/short_profiles/en
200
- - core/target/classes/short_profiles/ru
201
- - core/target/classes/short_profiles/te
202
- - core/target/classes/short_profiles/lt
203
- - core/target/classes/short_profiles/pa
259
+ - core/target/classes/short_profiles/it
204
260
  - core/target/classes/short_profiles/ja
205
- - core/target/classes/short_profiles/he
261
+ - core/target/classes/short_profiles/ko
262
+ - core/target/classes/short_profiles/lt
263
+ - core/target/classes/short_profiles/lv
264
+ - core/target/classes/short_profiles/mk
265
+ - core/target/classes/short_profiles/ml
206
266
  - core/target/classes/short_profiles/nl
207
- - core/target/classes/short_profiles/tr
267
+ - core/target/classes/short_profiles/no
268
+ - core/target/classes/short_profiles/pa
208
269
  - core/target/classes/short_profiles/pl
209
- - core/target/classes/short_profiles/si
210
- - core/target/classes/short_profiles/fa
211
- - core/target/classes/short_profiles/de
212
- - core/target/classes/short_profiles/bg
213
- - core/target/classes/short_profiles/it
214
- - core/target/classes/short_profiles/fr
215
- - core/target/classes/short_profiles/el
216
270
  - core/target/classes/short_profiles/pt
217
- - core/target/classes/short_profiles/uk
218
- - core/target/classes/short_profiles/da
219
- - core/target/classes/short_profiles/ar
220
- - core/target/classes/short_profiles/zh-tw
221
- - core/target/classes/short_profiles/sq
222
- - core/target/classes/short_profiles/th
223
- - core/target/classes/short_profiles/ko
224
271
  - core/target/classes/short_profiles/ro
225
- - core/target/classes/short_profiles/lv
272
+ - core/target/classes/short_profiles/ru
273
+ - core/target/classes/short_profiles/si
274
+ - core/target/classes/short_profiles/sq
226
275
  - core/target/classes/short_profiles/sv
276
+ - core/target/classes/short_profiles/ta
277
+ - core/target/classes/short_profiles/te
278
+ - core/target/classes/short_profiles/th
279
+ - core/target/classes/short_profiles/tl
280
+ - core/target/classes/short_profiles/tr
281
+ - core/target/classes/short_profiles/uk
282
+ - core/target/classes/short_profiles/ur
227
283
  - core/target/classes/short_profiles/vi
228
- - core/target/classes/short_profiles/et
229
- - core/target/classes/short_profiles/hi
230
- - core/target/classes/short_profiles/gu
231
284
  - core/target/classes/short_profiles/zh-cn
232
- - core/target/classes/short_profiles/mk
233
- - core/target/classes/short_profiles/ur
234
- - core/target/classes/short_profiles/hu
235
- - core/target/classes/short_profiles/cs
236
- - core/target/classes/short_profiles/bn
237
- - core/target/classes/short_profiles/tl
238
- - core/target/classes/com/cybozu/labs/langdetect/ErrorCode.class
239
- - core/target/classes/com/cybozu/labs/langdetect/LangDetectException.class
240
- - core/target/classes/com/cybozu/labs/langdetect/Language.class
241
- - core/target/classes/com/cybozu/labs/langdetect/Detector.class
242
- - core/target/classes/com/cybozu/labs/langdetect/af
243
- - core/target/classes/com/cybozu/labs/langdetect/DetectorFactory.class
244
- - core/target/classes/com/cybozu/labs/langdetect/util/NGram.class
245
- - core/target/classes/com/cybozu/labs/langdetect/util/LangProfile.class
246
- - core/target/classes/com/cybozu/labs/langdetect/util/Messages.class
247
- - core/target/classes/com/cybozu/labs/langdetect/util/messages.properties
285
+ - core/target/classes/short_profiles/zh-tw
286
+ - core/target/opennlp/langdetect-183.bin
287
+ - core/target/opennlp/opennlp-tools-1.8.4.jar
248
288
  - exec/language-identifier.rb
249
289
  - lib/opener/language_identifier.rb
250
- - lib/opener/language_identifier/kaf_builder.rb
251
- - lib/opener/language_identifier/version.rb
252
- - lib/opener/language_identifier/server.rb
253
- - lib/opener/language_identifier/detector.rb
290
+ - lib/opener/language_identifier/backend/detect_language_com.rb
291
+ - lib/opener/language_identifier/backend/language_detection.rb
292
+ - lib/opener/language_identifier/backend/opennlp.rb
254
293
  - lib/opener/language_identifier/cli.rb
294
+ - lib/opener/language_identifier/detector.rb
295
+ - lib/opener/language_identifier/kaf_builder.rb
255
296
  - lib/opener/language_identifier/public/markdown.css
297
+ - lib/opener/language_identifier/server.rb
298
+ - lib/opener/language_identifier/version.rb
256
299
  - lib/opener/language_identifier/views/index.erb
257
300
  - lib/opener/language_identifier/views/result.erb
258
- - config.ru
259
301
  - opener-language-identifier.gemspec
260
- - README.md
261
- - LICENSE.txt
262
- - bin/language-identifier
263
- - bin/language-identifier-server
264
- - bin/language-identifier-daemon
265
302
  homepage: http://opener-project.github.com/
266
303
  licenses:
267
304
  - Apache 2.0
@@ -272,19 +309,18 @@ require_paths:
272
309
  - lib
273
310
  required_ruby_version: !ruby/object:Gem::Requirement
274
311
  requirements:
275
- - - '>='
312
+ - - ">="
276
313
  - !ruby/object:Gem::Version
277
314
  version: 1.9.2
278
315
  required_rubygems_version: !ruby/object:Gem::Requirement
279
316
  requirements:
280
- - - '>='
317
+ - - ">="
281
318
  - !ruby/object:Gem::Version
282
319
  version: '0'
283
320
  requirements: []
284
321
  rubyforge_project:
285
- rubygems_version: 2.1.9
322
+ rubygems_version: 2.7.6.2
286
323
  signing_key:
287
324
  specification_version: 4
288
325
  summary: Language identifier for human readable text.
289
326
  test_files: []
290
- has_rdoc: yard
@@ -1 +0,0 @@
1
- {"freq":{"D":9246,"E":2445,"F":2510,"G":3299,"A":6930,"B":3706,"C":2451,"L":2519,"M":3951,"N":3334,"O":2514,"H":3034,"I":2837,"J":2196,"K":3663,"U":687,"T":2336,"W":2258,"V":2714,"Q":182,"P":3097,"S":8234,"R":3039,"Y":252,"X":214,"Z":422,"f":13583,"g":42805,"d":77385,"Feb":207,"e":240974,"b":21626,"c":4896,"a":128566,"n":127153,"o":86673,"l":57433,"m":31352,"j":4048,"k":45378,"h":17527,"i":140621,"w":24930,"v":32618,"u":35166,"t":82606,"s":102389,"r":98861,"q":199,"p":23331,"z":1187,"y":11757,"x":1123,"ï":264,"ë":2903,"ê":1053,"é":765,"á":212,"ü":233,"ö":184,"ó":216,"Eur":318,"Eng":637," l":3565," m":7731," n":16000," o":12065," h":7358," i":23795," j":1325," k":6363," d":33601," e":13358," f":1200," g":11018,"р":242,"с":306," a":8747,"т":161," b":8379," c":434," u":1931," t":8537," w":13128," v":24617," p":4859," s":15482," r":3617," J":2155," K":3559," H":2961," I":2185," N":3120," O":2318," L":2396," M":3803," B":3554," C":2109," A":6365," F":2371," G":3138," D":8986," E":2271,"л":219,"к":266," Z":368," Y":241,"и":371,"о":333,"н":199," S":7708,"Ger":200," R":2881,"в":199," Q":162," P":2912,"а":481," W":2205," V":2322," U":571,"е":266," T":2130,"Fra":1006,"A ":345,"Da":804,"Co":478,"Ch":621,"Du":1025,"Do":201,"De":763,"Di":5828,"Fe":367,"Eu":354,"En":721,"El":212,"Ge":659,"Ga":319,"I ":452,"Fr":1217,"Fo":165,"Fi":216,"II ":246,"C ":278,"Au":486,"Ar":425,"At":187,"As":201,"D ":158,"Ba":648,"Af":2087,"Am":566,"An":491,"Ap":353,"Al":628,"Bu":243,"Br":778,"Ca":399,"Bi":180,"Be":880,"Bo":481,"Bl":161,"Kr":224,"Ko":657,"Le":490,"Li":504,"La":658,"Lu":245,"Lo":347,"Me":800,"Mi":548,"Ma":1360,"Mu":186,"Mo":627,"Ni":257,"Ne":763,"Na":666,"No":1092,"Ok":339,"Ol":206,"Her":157,"Gr":1326,"Go":356,"Ha":534,"He":680,"II":369,"Hi":301,"Ho":503,"Hu":294,"Hy":550,"In":919,"Is":158,"It":218,"Ja":713,"Je":157,"Jo":565,"Ju":623,"Ka":1489,"Ki":194,"Ke":447,"Un":253,"Tu":248,"Tr":236,"To":272,"Th":313,"Te":262,"Ta":276,"V ":280,"Sw":402,"Sy":292,"St":964,"Su":1701,"Wo":181,"Wi":534,"Wa":412,"We":720,"Vo":315,"Vr":251,"Vi":374,"Va":314,"Ve":689,"Pr":551,"S ":157,"Pe":310,"Pa":727,"Po":681,"Pi":230,"Os":236,"Oo":423,"Or":191,"Se":814,"Sc":197,"Si":387,"Sl":222,"Sk":201,"Sp":443,"So":680,"Ru":645,"Ry":194,"Sa":728,"Re":621,"Ri":222,"Ro":746,"SA":233,"Ra":223,"Gre":501,"Gri":383,"Gra":158,"b ":1179,"Gro":254,"a ":7054,"i ":2513,"gd":570,"ge":16432,"ga":1621,"gb":319,"fk":224,"fl":183,"fg":323,"ff":351,"fi":1111,"fh":169,"fs":1224,"fr":2334,"fu":174,"ft":300,"fo":725,"Int":180,"he":6229,"ha":2610,"gn":360,"gl":334,"gi":2135,"gh":921,"gg":418,"gu":592,"gt":1512,"gs":1974,"gr":3459,"go":1385,"dt":211,"du":998,"dw":506,"g ":10256,"ea":936,"eb":3497,"ec":406,"ed":5721,"de":18394,"dd":606,"dg":161,"di":29432,"dh":249,"dj":173,"dm":299,"do":2521,"ds":2062,"dr":1453,"ew":3034,"eu":3603,"ev":2016,"ey":309,"fa":570,"h ":864,"Ind":251,"fd":469,"fe":948,"eh":993,"eg":3187,"ef":995,"ee":12296,"el":15653,"ek":7920,"ei":5726,"ep":2393,"eo":692,"en":27638,"em":4686,"et":10282,"es":15156,"er":33393,"ca":479,"e ":78745,"by":1025,"br":1953,"bu":1057,"bo":2123,"bl":1117,"bi":1966,"bb":156,"be":8513,"db":222,"In ":319,"da":3617,"f ":4067,"ct":207,"co":446,"ck":502,"ci":340,"ch":1526,"ce":547,"c ":311,"az":190,"ay":279,"ba":2057,"d ":15502,"at":11369,"as":9342,"ar":11432,"aw":597,"av":407,"au":883,"ak":2797,"al":9554,"ai":1291,"aj":155,"ap":2087,"am":3989,"an":36357,"ac":615,"ad":4564,"aa":18307,"ab":1064,"ag":2729,"ah":292,"ae":907,"af":1901,"nu":917,"nt":6760,"ns":9243,"nr":212,"no":2885,"nn":1621,"ny":191,"nw":666,"nv":455,"oe":6026,"of":3797,"oc":387,"od":1636,"oa":178,"ob":729,"om":5480,"on":10533,"ok":2525,"ol":5346,"oi":587,"og":2271,"oh":382,"ot":3827,"os":3306,"ov":1152,"ou":2993,"op":4558,"oo":12667,"or":14221,"r ":19504,"ow":1144,"pe":3683,"pg":229,"pa":2371,"pl":1195,"lê":351,"po":1932,"ph":223,"pi":1008,"lo":3369,"lm":315,"ll":2990,"ls":2634,"lp":392,"lw":311,"lv":239,"lu":1548,"lt":993,"ly":716,"o ":2083,"md":261,"ma":3853,"mb":2182,"mg":224,"me":9151,"mi":2940,"mm":802,"mp":1223,"mo":1485,"ië":1437,"mt":249,"ms":966,"mu":1085,"p ":4720,"na":6444,"nb":510,"nc":507,"nd":12581,"ne":5737,"nf":203,"ng":9804,"nh":460,"ni":6127,"nj":300,"nk":2057,"nl":616,"nm":203,"jo":532,"ki":2683,"kh":210,"kg":239,"ke":8584,"ka":6722,"m ":5913,"kw":457,"ky":282,"ks":2318,"kt":2084,"ku":1443,"ko":3908,"kr":2375,"kk":1579,"kl":2200,"km":469,"li":9515,"lh":279,"lk":1158,"lj":705,"le":10290,"ld":1944,"lg":1526,"lf":717,"la":8341,"lb":446,"n ":58065,"hr":313,"ht":702,"hu":1684,"hi":1067,"ho":3048,"dé":160,"id":5034,"ic":1058,"ib":451,"ia":2568,"ig":5540,"if":581,"ie":47836,"hy":348,"k ":9212,"ir":2359,"is":17403,"it":9361,"iu":405,"iv":1008,"iw":219,"ik":8953,"il":3774,"im":1386,"in":25004,"io":1984,"eë":1032,"ip":899,"je":609,"ji":572,"iz":156,"l ":8172,"ja":1960,"wy":994,"z ":242,"wi":1800,"wo":4179,"vy":166,"y ":4684,"wa":9856,"we":6959,"vl":1196,"vi":4040,"vu":178,"vr":662,"vo":4078,"uw":282,"uu":992,"ve":5906,"va":16173,"x ":845,"ui":7822,"uk":678,"ul":2052,"ue":905,"ug":1045,"ur":5410,"us":5098,"ut":907,"um":1711,"un":2596,"up":170,"ty":1434,"tu":2643,"tt":1277,"tw":1177,"tv":217,"ub":1182,"ua":728,"ud":950,"uc":160,"w ":232,"to":5433,"tm":201,"tl":667,"ts":3814,"tr":4026,"tg":532,"te":20430,"tk":279,"tj":177,"ti":5658,"th":1701,"tb":213,"ta":9118,"su":1177,"sv":424,"ss":2799,"st":17122,"sy":1309,"sw":531,"sl":1811,"sk":5006,"sn":242,"sm":693,"sp":2566,"oë":412,"so":3731,"sr":312,"sd":385,"sc":448,"sf":208,"se":15556,"sh":473,"sg":396,"sj":338,"si":8436,"u ":1834,"sa":2367,"sb":577,"rr":652,"rs":6262,"rt":4139,"ru":2543,"rv":1198,"rw":1199,"ry":2450,"rp":1265,"ro":8165,"rn":1586,"rm":2087,"rl":1734,"rk":2996,"ri":11752,"rh":614,"rg":2653,"rf":378,"re":10923,"rd":7372,"rc":234,"rb":955,"ra":7710,"t ":22731,"qu":168,"s ":35284,"px":614,"Hy ":529,"py":231,"pt":765,"pu":844,"pp":1058,"pr":3258,"ps":659,"wê":320,"zi":170,"ze":169,"za":209,"yg":162,"ye":406,"yf":643,"yd":927,"yw":439,"ys":1141,"yn":1041,"yl":288,"yk":1145,"Apr":247,"Aug":272,"Afr":2048,"Ame":464,"Ber":218,"Bel":171,"Bre":163,"Bra":191,"Bri":282,"Des":273,"Daa":460,"Chr":224,"Cha":171,"ër":307,"ël":325,"êr":697,"ë ":1979,"ê ":310,"é ":228,"Dit":1028,"Die":4537,"Dui":918,"Ned":417,"Nas":187,"Nov":238,"Noo":595,"Okt":256,"Oli":158,"Oos":361,"Par":313,"Pro":177,"Pre":186,"SA ":161,"Ita":207,"Jan":348,"Joh":290,"Jul":297,"Jun":245,"Kaa":543,"Kan":220,"Kat":191,"Kar":171,"Ker":270,"Kon":276,"Lat":181,"Lit":162,"Mei":281,"Mar":370,"Maa":286,"Mon":210,"Mid":157,"Wil":165,"Wes":439,"Vry":192,"Vol":161,"êre":674,"Swe":193,"Sy ":252,"Sui":1515,"Sta":443,"Ste":208,"Sep":228,"Spa":253,"Rus":560,"Sch":162,"Rep":214,"Rom":176,"Ver":555,"Uni":236,"The":196,"Tur":159,"bin":400,"blo":205,"bli":525,"bla":215,"boe":246,"boo":276,"bor":587,"bou":330,"ban":283,"bal":289,"bai":191,"baa":372,"bas":270,"bar":272,"beh":366,"beg":372,"bee":325,"bed":285,"ber":1916,"bel":540,"bek":1148,"bew":349,"bev":630,"bes":1308,"bet":510,"bie":1052,"ce ":276,"bri":159,"bro":237,"bra":211,"bre":258,"bru":1062,"bur":584,"by ":693,"am ":1182,"ake":292,"al ":2759,"ain":204,"ak ":856,"aie":241,"agt":446,"anu":467,"ann":632,"ant":1705,"ans":3841,"ane":404,"ang":1856,"ani":742,"anj":191,"ank":961,"ap ":635,"ana":788,"anc":195,"and":5528,"amm":186,"amp":480,"ami":512,"ame":657,"amb":236,"ama":204,"alt":231,"als":160,"all":667,"alk":171,"alg":320,"ali":1276,"ald":217,"ale":2352,"alf":209,"ala":367,"an ":18298,"aks":261,"akt":740,"akl":166,"abe":229,"abi":201,"aby":216,"ae ":624,"aag":175,"aad":172,"aak":679,"aai":350,"aan":6190,"aal":1515,"aam":1083,"aas":579,"aar":5293,"aap":567,"aat":1563,"ad ":2565,"afg":266,"ai ":311,"age":184,"afd":268,"adm":206,"adi":436,"ade":539,"ag ":1304,"ads":176,"ach":166,"ada":249,"af ":494,"at ":6755,"arg":256,"are":965,"ard":1124,"ara":390,"aro":332,"arn":185,"arm":157,"arl":301,"ark":397,"ari":1177,"arv":249,"ars":463,"art":1494,"ary":171,"asi":1669,"ase":210,"aso":169,"ar ":3216,"apa":189,"app":418,"aps":269,"as ":5230,"awe":308,"awi":169,"ata":346,"ast":673,"ass":518,"ato":426,"ate":1382,"ati":871,"ats":404,"atu":409,"aty":167,"aus":156,"jaa":1087,"jar":470,"je ":175,"joe":306,"jin":161,"jie":306,"ito":170,"itt":191,"its":1623,"isk":182,"ism":266,"iss":374,"ist":1582,"ita":608,"ite":1331,"itg":386,"iti":469,"ius":176,"ium":203,"ivi":590,"ive":294,"is ":12546,"ion":1252,"eër":158,"ipa":265,"ir ":1648,"isi":1018,"ise":601,"isa":220,"ire":181,"it ":3772,"kil":644,"kie":536,"kin":914,"km ":266,"kgr":173,"kee":210,"kei":339,"kel":962,"ken":2090,"kep":166,"ker":1342,"ke ":3014,"kra":345,"kse":472,"kry":1085,"kri":662,"kou":249,"kor":369,"kop":214,"koo":391,"kon":866,"kom":903,"kol":246,"koe":157,"ks ":710,"kke":1272,"kki":178,"klu":430,"kle":511,"kla":387,"kli":749,"kat":157,"kar":183,"kas":204,"kap":818,"kan":1256,"kal":611,"kaa":1596,"ka ":1388," Ga":319," Ge":658," Fo":161," Fr":1217," Fi":213," Ha":534," He":680," Go":354," Gr":1318," Hy":549," Hu":294," Ho":502," II":202," Hi":301," Ja":710," Is":157," It":218," In":916,"han":779," Ka":1486,"hal":311," Ke":447,"haw":164," Ki":192,"har":356," Jo":563," Ju":622,"haa":238,"had":164," La":657," Le":488," Li":502," Ko":657," Kr":224," Ma":1348," Mi":547," Me":799,"he ":399," Lo":346," Lu":244," Ne":762," Na":662," Ni":257," Mo":624," Mu":186,"hel":273,"hei":994,"hee":465,"hed":169,"het":2911,"her":350,"hem":255," Ap":349," Am":563," An":491," Al":626," Af":2082," Ba":645," Au":486," At":187," As":200," Ar":422," Be":877,"hie":290," Bi":179," Bl":161," Bo":479," Br":777," Bu":243,"his":173," Ca":384," Ch":612," Co":473," Da":803," Di":5802," De":761," Do":196," Du":1024," El":212," En":720," Eu":354," Fe":367," Wo":179," Wi":530," We":720," Wa":412,"god":193,"gs ":887,"gor":522,"gro":2150,"gra":537,"gri":320,"gre":401," Os":236," Or":191," Oo":422," Po":674," Pi":229," Pe":309," Pa":725,"gst":406," No":1092," Ol":205," Ok":339,"gte":962,"gti":391," Ra":221," Ro":743," Re":620," Ri":222," Pr":547,"gus":284," Sy":292," Sw":400," Su":1700," St":953," Ta":273," Th":307," Te":261," Tr":236," To":270," Ry":194," Ru":645," Sa":724," Si":385," Sc":196," Se":811," So":678," Sp":441," Sk":201," Sl":222," Va":313," Ve":669," Vi":371," Vo":314," Vr":251," Tu":243," Un":253," ja":1102,"ial":357,"ian":256," in":12303,"iaa":736," is":11238," ka":1533," ki":531," ke":481,"id ":2425," ha":612," he":3438," gr":2075," go":365,"ia ":794," hy":292," hi":477," ho":1750," hu":727,"iet":320,"ieu":180,"iew":413," ni":722,"iel":277," ne":437,"ien":998," na":2339,"ier":2228,"ies":4471,"ied":1248,"ief":177,"iek":2103," mu":691,"ig ":1346," mo":667," om":1497," on":2106," of":1952,"ifi":218," no":1205," le":910," li":598," n ":10980," la":1290," ku":387,"ich":258,"ie ":34696," km":407," kl":879,"ica":209," kr":319," ko":1672," me":4100," mi":830,"ids":257," ma":1329," lu":186,"idi":291,"ide":993,"idd":457,"ida":156," lo":197," af":820," aa":2320," ad":269," am":322," an":759," ak":286," al":829," ar":263," at":229," as":2284," ba":599,"il ":459," bi":320," be":5430," bo":565," bl":263," by":612," bu":213," br":340,"ika":2950,"igd":381,"ige":1604,"igh":698,"igi":270,"igg":185,"igt":498,"igs":156,"ik ":2305," en":9738,"imp":231," ei":517," el":502,"ime":187," ek":223," ee":1730,"ind":1030,"ina":506," fa":191,"inn":302," fo":227,"int":638,"ins":1349,"ine":545,"ing":6095," fi":368,"ini":615,"ink":417," ge":8191," ga":169,"inw":455,"ikk":629," ch":185,"ike":1814,"ila":498," da":1923,"in ":12178,"iku":209,"iks":287," do":1111,"ilo":514,"ill":662," dr":523," de":3947,"ilj":228,"ili":684,"ild":294," di":25510,"imb":245,"eë ":693,"io ":196," du":309," wê":298,"hom":166,"hou":360,"hoo":1325,"hoe":410," wy":201,"hul":552,"hui":260,"hri":224,"ht ":578," ru":233," sa":888," se":2315," si":590," sl":329," sk":1250," sp":887," so":2211," ra":237," re":1576," ri":825," ro":614," pr":1589," s ":207," px":614,"hy ":302," ou":447,"hum":674," oo":2639," op":2809," or":325," pe":402," pa":556," pl":641," po":737," lê":242," wa":7840," we":1395," wo":2888," wi":454," va":14670," ve":4043," vo":2359," vr":575," vi":2068," vl":594," ty":439," tw":582," tu":692," ui":1746," ta":895," sw":227," sy":1183," st":4293," su":859," tr":387," to":1857," th":729," ti":190," te":2715,"ffe":165,"fer":157,"fel":155,"fha":158,"fge":290,"fam":176,"fde":429,"eta":359,"ete":1299,"eti":372,"esp":358,"eso":210,"est":2951,"ess":405,"eun":234,"eto":320,"etr":438,"ets":217,"ett":493,"eve":456,"eva":262,"evo":907,"evi":274,"eur":2292,"eus":242,"ewi":337,"ewe":1704,"ewo":449,"ey ":181,"ewa":222,"epe":254,"er ":10617,"epa":228,"eor":221,"es ":4626,"ept":277,"epu":400,"epr":184,"erk":2067,"erl":875,"eri":1765,"erg":1022,"erh":416,"ere":1861,"erf":286,"erd":1514,"era":1470,"erb":529,"et ":6083,"esk":1018,"esl":228,"esi":976,"ese":3607,"eu ":338,"erv":860,"erw":949,"err":349,"ert":1101,"ers":4583,"ern":1142,"erm":861,"erp":342,"ero":382,"ekg":155,"ekk":206,"eko":474,"eks":950,"ekt":701,"en ":13492,"ela":904,"eld":1199,"elf":322,"ele":2593,"eli":1906,"elj":427,"elg":226,"elk":209,"ell":778,"elo":234,"els":1983,"elt":333,"ely":255,"emb":839,"ema":484,"eme":1266,"emo":181,"emi":456,"ep ":699,"ene":1142,"enh":254,"eng":314,"enb":269,"ena":610,"end":3112,"eno":500,"enn":400,"enk":275,"eni":1151,"ens":2864,"ent":2318,"ego":497,"ege":690,"egi":516,"eha":370,"egr":238,"egs":217,"egt":193,"eho":266,"ehe":259,"ek ":1799,"eis":330,"eil":544,"ein":1010,"eie":633,"eid":1307,"el ":3516,"eit":680,"eke":2739,"eka":220,"em ":967,"gin":784,"gie":714,"ght":548,"gep":249,"gen":1564,"get":297,"ger":1248,"ges":2014,"gev":788,"gew":944,"gee":448,"ged":475,"geb":2499,"geh":356,"geg":181,"gem":756,"gel":1995,"gek":350,"gde":427,"ge ":1916,"gaa":266,"gan":539,"ga ":157,"fst":852,"fri":2089,"for":371,"fie":369,"fil":208,"fin":174,"fis":177,"da ":327,"de ":6409,"daa":645,"dag":700,"dae":480,"dat":659,"dan":233,"dam":165,"dde":490,"ch ":316,"cha":160,"ck ":233,"che":490,"ed ":1090,"eba":159,"ebe":354,"ebi":752,"ebo":768,"ebr":1168,"ei ":821,"ega":168,"eek":631,"een":2520,"eel":2072,"eem":410,"eed":587,"ees":884,"eer":3295,"eeu":449,"eet":195,"edi":638,"ede":2561,"eda":161,"eg ":316,"eds":321,"edr":340,"ee ":892,"ef ":280,"dwe":310,"dus":171,"dor":875,"doo":416,"don":160,"dom":227,"ds ":353,"dmi":211,"doe":283,"dst":428,"dui":309,"dri":421,"dra":423,"dry":204,"dsk":181,"dse":527,"dia":294,"der":4829,"des":476,"deu":1676,"dee":1279,"del":1695,"dek":186,"den":1206,"do ":172,"din":875,"dio":177,"dis":425,"dit":656,"die":24964,"dig":1168,"dik":198,"rhe":301,"rga":496,"rgi":335,"rge":595,"ret":312,"res":944,"rg ":777,"rea":245,"ree":1091,"ref":257,"red":294,"rei":545,"reg":1039,"ren":1300,"rek":765,"rel":674,"rep":191,"rf ":180,"rdo":215,"rdi":841,"rde":1873,"re ":2607,"rd ":3667,"ras":532,"rat":587,"rbi":190,"rba":160,"rbe":287,"rag":291,"ran":2011,"ram":317,"ral":832,"rak":247,"raa":1046,"raf":284,"rad":331,"rs ":1922,"ros":273,"rot":330,"rom":305,"ron":1072,"roo":1778,"rop":575,"rou":212,"rov":708,"rod":199,"rol":315,"roe":1277,"rog":195,"rno":196,"rp ":728,"rna":508,"rne":469,"rmo":164,"rma":539,"rme":324,"rmi":175,"rlo":320,"rli":409,"rle":270,"rla":508,"rks":184,"rko":248,"rki":199,"rkl":203,"rke":440,"rka":271,"rm ":692,"rio":174,"rit":493,"ris":571,"riv":501,"rig":863,"ril":278,"rik":3384,"rin":1384,"ria":924,"ric":236,"rie":2029,"rk ":1040,"rwe":410,"rwy":498,"ryf":393,"rui":1143,"rug":256,"rum":244,"ruk":231,"rus":225,"rva":502,"rvl":353,"rvo":192,"rwa":171,"ry ":383,"rsk":872,"rsi":432,"rso":249,"rsp":591,"rsa":225,"rse":478,"rta":186,"rst":1083,"rtk":160,"rto":274,"rte":620,"rti":334,"rua":209,"rty":351,"rt ":1413,"rre":272,"saa":540,"sal":170,"sam":303,"san":408,"sas":204,"sa ":155,"ryw":338,"rys":282,"ryk":576,"sge":305,"sie":4039,"sid":185,"sia":299,"sit":436,"sis":296,"sip":279,"sin":541,"sio":799,"sil":194,"sim":173,"sik":231,"sif":160,"sig":289,"sbu":231,"se ":9840,"sch":268,"ser":501,"ses":400,"set":250,"seu":239,"sea":162,"see":618,"sed":264,"sen":1323,"sem":298,"sel":1093,"sek":186,"spo":405,"spr":756,"spe":934,"spa":260,"sow":508,"som":247,"son":545,"soo":954,"soe":195,"sok":377,"st ":267,"sli":202,"slu":297,"sky":183,"sla":1006,"sle":205,"ski":804,"sko":594,"skr":1152,"sku":244,"ska":1212,"ske":665,"sië":283,"sma":173,"sme":382,"sse":1275,"ssa":198,"ssi":922,"ste":6829,"sta":5065,"sto":805,"sti":1396,"stu":693,"str":1673,"sty":226,"sui":596,"sve":167,"sy ":1199,"swa":313,"tal":1301,"taa":2499,"tad":2323,"tau":165,"tat":456,"tas":164,"tan":1021,"te ":8469,"ta ":339,"pa ":202,"pe ":459,"par":608,"pas":176,"paa":333,"pal":324,"pan":428,"pge":207,"pen":295,"per":1379,"pes":438,"pee":201,"pel":568,"pla":660,"lê ":268,"pli":169,"ple":241,"pie":480,"por":394,"poo":160,"pos":197,"pol":518,"ppy":184,"ppe":636,"pst":229,"pub":435,"pte":575,"pra":251,"pri":484,"pre":726,"pro":1677,"pun":246,"px ":614,"py ":166,"ra ":424,"ngo":161,"ngr":289,"ngs":1292,"nge":2327,"nhe":276,"nel":314,"nen":189,"nem":225,"ner":1014,"net":468,"nes":533,"ng ":4906,"nee":762,"nce":206,"ne ":1530,"ndr":216,"nds":657,"ndo":326,"ndi":878,"nde":5081,"nda":453,"nal":790,"nam":291,"nad":316,"naf":372,"nab":229,"naa":1198,"nd ":4245,"nat":282,"nas":677,"na ":1572,"nwo":542,"nus":209,"nua":266,"ntw":393,"nto":201,"nts":300,"ntr":543,"nti":571,"ntl":164,"nta":457,"nte":1815,"nst":787,"nse":3345,"nsi":1079,"nsl":207,"nsk":498,"nt ":1757,"ns ":2476,"nog":456,"noe":477,"noo":659,"nom":368,"nne":904,"nni":442,"nië":246,"nli":373,"nke":345,"nkl":391,"nks":179,"nkr":453,"nje":156,"nig":640,"nie":1831,"nk ":274,"niv":210,"nis":1512,"nin":804,"ogr":272,"ogi":423,"oi ":216,"oha":228,"oeë":178,"ok ":1432,"ol ":554,"ock":164,"oe ":303,"ode":551,"odi":176,"ods":177,"of ":2323,"oek":499,"oel":276,"oem":563,"oeg":231,"oei":336,"oer":752,"oes":295,"oet":302,"oen":602,"oep":714,"odu":188,"oed":477,"og ":895,"ofs":803,"oew":261,"od ":254,"obe":382,"oud":510,"oue":197,"ote":350,"ott":175,"ots":913,"oto":266,"ost":637,"osi":266,"ose":346,"oss":176,"oso":190,"owa":484,"owe":208,"ovi":678,"ove":370,"ous":302,"our":167,"out":306,"opo":205,"opp":449,"ope":438,"opg":213,"opa":195,"os ":1171,"oon":731,"ool":561,"oom":393,"ook":1376,"ooi":288,"oof":1146,"oog":389,"ood":288,"or ":1152,"oot":1351,"oos":958,"oor":4776,"oop":341,"ork":260,"orl":386,"orm":964,"orp":858,"ord":4583,"ore":773,"org":587,"ori":1212,"ou ":999,"ort":1219,"ors":871,"orw":195,"ot ":1528,"orb":186,"ora":235,"ola":171,"on ":1522,"oli":772,"oll":288,"olk":702,"ole":263,"olg":904,"ols":270,"olo":636,"om ":1870,"okk":553,"ona":980,"ond":1915,"one":1178,"ong":620,"oni":1012,"onl":220,"onk":232,"onn":184,"ono":391,"ons":511,"ont":1339,"oma":425,"ome":845,"omi":324,"omm":454,"omp":297,"oms":595,"op ":2264,"la ":334,"le ":3834,"lf ":175,"lde":601,"laa":982,"lad":180,"lag":434,"lak":490,"lan":4154,"lar":155,"lat":361,"las":433,"ld ":695,"kus":410,"kun":548,"kul":242,"kwe":204,"kwa":191,"kte":822,"kst":257,"ksi":463,"ktr":342,"ktu":210,"kti":247,"kto":369,"ls ":1008,"lon":293,"lom":430,"loo":382,"loe":423,"log":655,"los":274,"lië":349,"lti":157,"lub":411,"lug":221,"lst":643,"lte":252,"lse":623,"lge":754,"lew":250,"leu":193,"les":329,"let":347,"ler":415,"lem":358,"len":1056,"lek":605,"lei":1010,"leg":257,"lee":477,"led":218,"lg ":483,"lo ":169,"lla":325,"lle":1578,"lli":615,"lke":200,"lki":447,"ljo":223,"ll ":176,"lja":430,"lit":831,"lis":504,"leë":449,"lin":1208,"lim":201,"lid":165,"lia":364,"lik":2917,"lig":818,"lie":1618,"ma ":226,"mb ":655,"maa":1244,"mag":221,"mar":331,"mas":207,"mal":270,"man":726,"mat":394,"mba":172,"mbi":179,"mbe":814,"mbo":161,"me ":936,"mde":163,"med":223,"mee":1533,"met":2981,"mes":247,"mer":991,"mel":330,"men":1550,"lui":390,"lus":194,"lwe":213,"lyk":221,"lyn":187,"mpi":220,"mpe":208,"mpo":176,"mpt":267,"ms ":488,"moe":196,"mod":233,"mon":329,"mst":248,"mus":488,"mun":417,"ër ":180,"mge":191,"min":806,"mil":465,"mit":231,"mig":184,"mie":523,"mid":310,"ië ":1136,"mme":353,"wêr":319,"yst":183,"ys ":680,"ywe":370,"ye ":306,"yf ":380,"yde":281,"yds":165,"yd ":230,"yn ":461,"yns":175,"yk ":810,"wys":531,"wor":2620,"woo":760,"won":526,"we ":1260,"wes":799,"wer":1583,"wet":305,"wen":427,"wel":545,"weg":270,"wee":1257,"wis":166,"wit":342,"wie":194,"win":417,"wil":177,"wik":231,"wan":300,"wat":5174,"war":532,"was":2236,"waa":1031,"vry":194,"vro":313,"vir":1570,"vin":921,"vie":880,"vis":289,"vla":709,"vlo":280,"voe":444,"vol":1592,"voo":1083,"vor":625,"ver":4566,"ven":170,"vem":236,"vel":250,"vee":302,"val":319,"van":14723,"vat":155,"vaa":414,"uwe":229,"uur":863,"usl":180,"usi":606,"use":380,"ust":585,"uss":1129,"ute":176,"uto":171,"us ":1998,"ure":395,"urg":669,"uri":191,"urk":167,"uro":352,"urs":211,"urt":189,"ur ":2547,"umb":689,"ume":172,"unt":325,"uns":289,"uni":820,"und":530,"um ":614,"ult":270,"ull":459,"uli":358,"un ":219,"uid":2285,"uik":850,"uim":162,"uis":508,"uk ":200,"uit":3378,"ul ":272,"ugb":161,"ugu":278,"ude":184,"udi":240,"ue ":322,"ug ":159,"ub ":406,"uar":522,"ubl":464,"ud ":181,"tyn":228,"ty ":384,"tur":232,"tus":988,"tuu":617,"tui":232,"tud":171,"tyd":628,"twi":269,"twe":751,"ts ":533,"tre":1022,"tra":1128,"tri":607,"tru":366,"tro":780,"tse":746,"tsk":298,"tsl":425,"tst":993,"tte":641,"tti":226,"to ":272,"tof":244,"toe":713,"tob":268,"tot":1108,"tom":182,"ton":586,"tol":317,"tor":808,"too":280,"til":187,"tik":334,"tie":1846,"tig":1053,"tis":241,"tin":826,"tio":267,"thu":695,"tkl":165,"tli":191,"tla":301,"tem":732,"ten":1059,"tei":844,"tek":528,"tel":2135,"tee":779,"teg":166,"ted":237,"th ":270,"teu":212,"tes":357,"ter":4231,"tge":442,"the":380},"n_words":[1541130,1808182,1328687],"name":"af"}