language_detection 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -22,15 +22,15 @@ Or install it yourself as:
22
22
  >> require 'language_detection'
23
23
  => true
24
24
  >> language = LanguageDetection.perform("This is some example text for language detection")
25
- => {:name=>"ENGLISH", :code=>"en", :reliable=>true, :text_bytes=>51, :details=>[{:name=>"ENGLISH", :code=>"en", :percent=>100, :score=>49.43273905996759}]}
25
+ => #<LanguageDetection::Language:0x007fae0404f628 @name="english", @code="en", @reliable=true, @text_bytes=51, @details=[#<LanguageDetection::Language:0x007fae0404eb10 @name="english", @code="en", @details=[], @percent=100, @score=49.43273905996759>]>
26
26
  >> language.name
27
- => "ENGLISH"
27
+ => "english"
28
28
  >> language.code
29
29
  => "en"
30
30
  >> language.reliable
31
31
  => true
32
32
  >> language.details # contains up to 3 languages sorted by score
33
- => [{:name=>"ENGLISH", :code=>"en", :percent=>100, :score=>49.43273905996759}]
33
+ => [#<LanguageDetection::Language:0x007fae0404eb10 @name="english", @code="en", @details=[], @percent=100, @score=49.43273905996759>]
34
34
  >> language.details.first.percent
35
35
  => 100
36
36
  >> language.details.first.score
@@ -61,7 +61,7 @@ which provides `Article#language` method using `Article#to_s` method as paramete
61
61
  ```ruby
62
62
  >> article = Article.new :title => "Web development that doesn't hurt", :content => "Tens of thousands of Rails applications are already live..."
63
63
  >> article.language
64
- => {:name=>"ENGLISH", :code=>"en", :reliable=>true, :text_bytes=>93, :details=>[{:name=>"ENGLISH", :code=>"en", :percent=>100, :score=>80.22690437601297}]}
64
+ => #<LanguageDetection::Language:0x007fae049dd8e8 @name="english", @code="en", @reliable=true, @text_bytes=93, @details=[#<LanguageDetection::Language:0x007fae049dd118 @name="english", @code="en", @details=[], @percent=100, @score=80.22690437601297>]>
65
65
  ```
66
66
 
67
67
  or you can add `String#language` method by `require 'language_detection/string'`
@@ -72,7 +72,7 @@ or you can add `String#language` method by `require 'language_detection/string'`
72
72
  >> require 'language_detection/string'
73
73
  => true
74
74
  >> "Web development that doesn't hurt".language
75
- => {:name=>"ENGLISH", :code=>"en", :reliable=>true, :text_bytes=>36, :details=>[{:name=>"ENGLISH", :code=>"en", :percent=>100, :score=>39.70826580226905}]}
75
+ => #<LanguageDetection::Language:0x007fae049cfec8 @name="english", @code="en", @reliable=true, @text_bytes=36, @details=[#<LanguageDetection::Language:0x007fae049cf7e8 @name="english", @code="en", @details=[], @percent=100, @score=39.70826580226905>]>
76
76
  ```
77
77
 
78
78
 
data/Rakefile CHANGED
@@ -1,11 +1,24 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rake/testtask'
2
3
 
3
4
  task :default => :test
4
5
 
5
- require 'rake/testtask'
6
+ desc "Compile extension"
7
+ task :compile do
8
+ path = File.expand_path("ext/cld/cld.so", File.dirname(__FILE__))
9
+
10
+ if !File.exists?(path) || ENV['RECOMPILE']
11
+ puts "Compiling extension..."
12
+ `cd #{File.expand_path("ext/cld/")} && make`
13
+ else
14
+ puts "Extension already compiled. To recompile set env variable RECOMPILE=true."
15
+ end
16
+ end
17
+
6
18
  Rake::TestTask.new(:test) do |test|
19
+ Rake::Task["compile"].invoke
20
+
7
21
  test.libs << 'lib' << 'test'
8
22
  test.test_files = FileList['test/*_test.rb']
9
23
  test.verbose = true
10
- # test.warning = true
11
24
  end
@@ -8,9 +8,9 @@ Gem::Specification.new do |gem|
8
8
  gem.version = LanguageDetection::VERSION
9
9
  gem.authors = ["Vojtech Hyza"]
10
10
  gem.email = ["vhyza@vhyza.eu"]
11
- gem.description = %q{Language detection}
12
- gem.summary = %q{Wrapped Chrome's compact language detector}
13
- gem.homepage = ""
11
+ gem.description = %q{Ruby bindings for Chromium Compact Language Detector}
12
+ gem.summary = %q{Ruby bindings for Chromium Compact Language Detector}
13
+ gem.homepage = "https://github.com/vhyza/language_detection"
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -19,7 +19,6 @@ Gem::Specification.new do |gem|
19
19
  gem.extensions = ["ext/cld/extconf.rb"]
20
20
 
21
21
  gem.add_dependency "ffi"
22
- gem.add_dependency "hashr"
23
22
  gem.add_dependency "rake"
24
23
 
25
24
  gem.add_development_dependency "shoulda"
@@ -1,6 +1,6 @@
1
1
  require "language_detection/version"
2
+ require "language_detection/language"
2
3
  require "ffi"
3
- require "hashr"
4
4
 
5
5
  module LanguageDetection
6
6
 
@@ -10,12 +10,11 @@ module LanguageDetection
10
10
  result = language_detection(text.to_s, is_plain_text)
11
11
 
12
12
  language = parse_result(result, result.members - [:details])
13
- language[:details] = []
14
13
 
15
- details = FFI::Pointer.new(LanguageDetection::Detail, result[:details])
14
+ details = FFI::Pointer.new(LanguageDetection::DetailStruct, result[:details])
16
15
  3.times do |i|
17
- detail = parse_result(LanguageDetection::Detail.new(details[i]))
18
- language[:details] << detail unless detail.code == 'un'
16
+ detail = parse_result(LanguageDetection::DetailStruct.new(details[i]))
17
+ language.details << detail unless detail.code == 'un'
19
18
  end
20
19
 
21
20
  language
@@ -28,19 +27,19 @@ module LanguageDetection
28
27
  private
29
28
 
30
29
  def self.parse_result(result, members = result.members)
31
- Hashr.new(Hash[ members.map {|member| [member.to_sym, result[member]]} ])
30
+ Language.new(Hash[ members.map {|member| [member.to_sym, result[member]]} ])
32
31
  end
33
32
 
34
33
  extend FFI::Library
35
34
 
36
- class Detail < FFI::Struct
35
+ class DetailStruct < FFI::Struct
37
36
  layout :name, :string,
38
37
  :code, :string,
39
38
  :percent, :int,
40
39
  :score, :double
41
40
  end
42
41
 
43
- class Language < FFI::Struct
42
+ class LanguageStruct < FFI::Struct
44
43
  layout :name, :string,
45
44
  :code, :string,
46
45
  :reliable, :bool,
@@ -49,6 +48,6 @@ module LanguageDetection
49
48
  end
50
49
 
51
50
  ffi_lib File.expand_path("../../ext/cld/cld.so", __FILE__)
52
- attach_function "language_detection","language_detection", [:buffer_in, :bool], Language.by_value
51
+ attach_function "language_detection","language_detection", [:buffer_in, :bool], LanguageStruct.by_value
53
52
 
54
53
  end
@@ -0,0 +1,18 @@
1
+ module LanguageDetection
2
+
3
+ class Language
4
+
5
+ attr_accessor :name, :code, :reliable, :text_bytes, :details, :percent, :score
6
+
7
+ def initialize(attributes = {})
8
+ attributes.each_pair do |attribute, value|
9
+ self.send("#{attribute}=", value)
10
+ end
11
+
12
+ @details ||= []
13
+ @name.downcase!
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -1,3 +1,3 @@
1
1
  module LanguageDetection
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -7,24 +7,23 @@ class LanguageDetectionTest < Test::Unit::TestCase
7
7
 
8
8
  context "Language detection" do
9
9
 
10
- should "be able to convert result from native call to Hashr instance" do
10
+ should "be able to convert result from native call to Language instance" do
11
11
  result = LanguageDetection.language_detection("this is some text", false)
12
12
  parsed_result = LanguageDetection.parse_result(result)
13
13
 
14
- assert_kind_of LanguageDetection::Language, result
15
- assert_kind_of Hashr, parsed_result
14
+ assert_kind_of LanguageDetection::LanguageStruct, result
15
+ assert_kind_of LanguageDetection::Language, parsed_result
16
16
 
17
- assert_equal "ENGLISH", parsed_result.name
18
- assert_nil parsed_result.non_existing_property
17
+ assert_equal "english", parsed_result.name
19
18
  end
20
19
 
21
- should "convert details from FFI pointer to Hashr instance" do
20
+ should "convert details from FFI pointer to Language instance" do
22
21
  language = LanguageDetection.perform("this is some text")
23
22
 
24
- assert_kind_of Array, language.details
25
- assert_kind_of Hashr, language.details.first
26
- assert_equal "ENGLISH", language.details.first.name
27
- assert_equal 65, language.details.first.percent
23
+ assert_kind_of Array, language.details
24
+ assert_kind_of LanguageDetection::Language, language.details.first
25
+ assert_equal "english", language.details.first.name
26
+ assert_equal 65, language.details.first.percent
28
27
  end
29
28
 
30
29
  should "recognize languages in testing data" do
@@ -67,7 +66,7 @@ class LanguageDetectionTest < Test::Unit::TestCase
67
66
 
68
67
  should "return detected language" do
69
68
  language = @article.language
70
- assert_equal "ENGLISH", language.name
69
+ assert_equal "english", language.name
71
70
  assert_equal true, language.reliable
72
71
  assert_equal 100, language.details.first.percent
73
72
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: language_detection
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-01 00:00:00.000000000 Z
12
+ date: 2012-10-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffi
@@ -27,22 +27,6 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: hashr
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
30
  - !ruby/object:Gem::Dependency
47
31
  name: rake
48
32
  requirement: !ruby/object:Gem::Requirement
@@ -107,7 +91,7 @@ dependencies:
107
91
  - - ! '>='
108
92
  - !ruby/object:Gem::Version
109
93
  version: '0'
110
- description: Language detection
94
+ description: Ruby bindings for Chromium Compact Language Detector
111
95
  email:
112
96
  - vhyza@vhyza.eu
113
97
  executables: []
@@ -209,12 +193,13 @@ files:
209
193
  - ext/cld/languages/public/languages.h
210
194
  - language_detection.gemspec
211
195
  - lib/language_detection.rb
196
+ - lib/language_detection/language.rb
212
197
  - lib/language_detection/string.rb
213
198
  - lib/language_detection/version.rb
214
199
  - test/_helper.rb
215
200
  - test/fixtures/languages.csv
216
201
  - test/language_detection_test.rb
217
- homepage: ''
202
+ homepage: https://github.com/vhyza/language_detection
218
203
  licenses: []
219
204
  post_install_message:
220
205
  rdoc_options: []
@@ -228,7 +213,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
228
213
  version: '0'
229
214
  segments:
230
215
  - 0
231
- hash: 301210449373780646
216
+ hash: 3522077385673025298
232
217
  required_rubygems_version: !ruby/object:Gem::Requirement
233
218
  none: false
234
219
  requirements:
@@ -237,13 +222,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
237
222
  version: '0'
238
223
  segments:
239
224
  - 0
240
- hash: 301210449373780646
225
+ hash: 3522077385673025298
241
226
  requirements: []
242
227
  rubyforge_project:
243
228
  rubygems_version: 1.8.24
244
229
  signing_key:
245
230
  specification_version: 3
246
- summary: Wrapped Chrome's compact language detector
231
+ summary: Ruby bindings for Chromium Compact Language Detector
247
232
  test_files:
248
233
  - test/_helper.rb
249
234
  - test/fixtures/languages.csv