zidian 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source "http://rubygems.org"
2
+
3
+ group :development do
4
+ gem "bundler", "~> 1.0.0"
5
+ gem "jeweler", "~> 1.6.2"
6
+ gem "ruby-debug", :platforms => [:ruby_18, :mri_18]
7
+ gem 'ruby-debug19', :platforms => [:ruby_19, :mri_19]
8
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,40 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ archive-tar-minitar (0.5.2)
5
+ columnize (0.3.4)
6
+ git (1.2.5)
7
+ jeweler (1.6.2)
8
+ bundler (~> 1.0)
9
+ git (>= 1.2.5)
10
+ rake
11
+ linecache (0.46)
12
+ rbx-require-relative (> 0.0.4)
13
+ linecache19 (0.5.12)
14
+ ruby_core_source (>= 0.1.4)
15
+ rake (0.9.2)
16
+ rbx-require-relative (0.0.5)
17
+ ruby-debug (0.10.4)
18
+ columnize (>= 0.1)
19
+ ruby-debug-base (~> 0.10.4.0)
20
+ ruby-debug-base (0.10.4)
21
+ linecache (>= 0.3)
22
+ ruby-debug-base19 (0.11.25)
23
+ columnize (>= 0.3.1)
24
+ linecache19 (>= 0.5.11)
25
+ ruby_core_source (>= 0.1.4)
26
+ ruby-debug19 (0.11.6)
27
+ columnize (>= 0.3.1)
28
+ linecache19 (>= 0.5.11)
29
+ ruby-debug-base19 (>= 0.11.19)
30
+ ruby_core_source (0.1.5)
31
+ archive-tar-minitar (>= 0.5.2)
32
+
33
+ PLATFORMS
34
+ ruby
35
+
36
+ DEPENDENCIES
37
+ bundler (~> 1.0.0)
38
+ jeweler (~> 1.6.2)
39
+ ruby-debug
40
+ ruby-debug19
data/Rakefile CHANGED
@@ -1,30 +1,44 @@
1
- require 'rubygems'
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
2
12
  require 'rake'
3
13
  require 'rake/rdoctask'
4
14
 
5
- begin
6
- require 'jeweler'
15
+ require 'jeweler'
7
16
 
8
- Jeweler::Tasks.new do |gemspec|
17
+ Jeweler::Tasks.new do |gemspec|
9
18
  gemspec.name = "zidian"
10
19
  gemspec.summary = "Chinese dictionary"
11
20
  gemspec.description = "Chinese dictionary using the CEDICT word list"
12
21
  gemspec.email = "bastien.vaucher@gmail.com"
13
22
  gemspec.homepage = "http://github.com/bastien/zidian"
14
23
  gemspec.authors = ["Bastien Vaucher"]
15
- end
16
- Jeweler::GemcutterTasks.new
17
- rescue LoadError
18
- puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
19
- end
24
+ end
25
+ Jeweler::GemcutterTasks.new
26
+
27
+ require 'rake/testtask'
28
+ Rake::TestTask.new(:test) do |test|
29
+ test.libs << 'lib' << 'test'
30
+ test.pattern = 'test/**/test_*.rb'
31
+ test.verbose = true
32
+ end
33
+
34
+ task :default => :test
20
35
 
21
36
  desc 'Generate documentation for the Zidian gem.'
22
- Rake::RDocTask.new(:rdoc) do |rdoc|
37
+ Rake::RDocTask.new do |rdoc|
38
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
23
39
  rdoc.rdoc_dir = 'rdoc'
24
40
  rdoc.title = 'Zidian'
25
41
  rdoc.options << '--line-numbers' << '--inline-source'
26
42
  rdoc.rdoc_files.include('README.mkd')
27
43
  rdoc.rdoc_files.include('lib/**/*.rb')
28
- end
29
-
30
- Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
44
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
data/lib/zidian.rb CHANGED
@@ -1,14 +1,14 @@
1
1
  module Zidian
2
2
 
3
3
  def self.find(expression)
4
- $KCODE = 'UTF8'
4
+ $KCODE = 'UTF8' if RUBY_VERSION < "1.9.0"
5
5
  case expression.class.name
6
6
  when "Array"
7
7
  expression.collect{|e| find(e) }.flatten.uniq
8
8
  when "Integer", "Fixnum" then
9
9
  Word.new(get_line(expression), expression)
10
10
  when "String" then
11
- find_word(expression).lines.to_a.collect{|line| Word.new(line) }
11
+ find_words(expression).collect{|raw_word| Word.new(raw_word) }
12
12
  else
13
13
  raise InvalFindInputException
14
14
  end
@@ -16,10 +16,11 @@ module Zidian
16
16
 
17
17
  protected
18
18
 
19
- def self.find_word(word) #:nodoc:
19
+ def self.find_words(word, case_sensitive = false) #:nodoc:
20
20
  words = word.split.map{|w| "#{w}[1-4]?"}.join(" ")
21
21
  # adding the -i option allows to search independently from the case, but it makes it very slow
22
- `less #{File.dirname(__FILE__)}/cedict_ts.u8 | grep -n -E '(^|[^a-zA-Z])#{words}($|[^a-zA-Z])'`
22
+ results = `less #{File.dirname(__FILE__)}/cedict_ts.u8 | grep -n -E#{ case_sensitive ? ' -i' : ''} '(^|[^a-zA-Z])#{words}($|[^a-zA-Z])'`
23
+ sort_lines(results.lines.to_a, words)
23
24
  end
24
25
 
25
26
  def self.get_line(line_number) #:nodoc:
@@ -27,6 +28,22 @@ module Zidian
27
28
  `sed -n '#{line_number}p' #{File.dirname(__FILE__)}/cedict_ts.u8`
28
29
  end
29
30
 
31
+ # Sorts the lines by similarity to the words
32
+ #
33
+ def self.sort_lines(lines, words)
34
+ lines.sort do |a, b|
35
+ line_similarity_to_words(a, words) <=> line_similarity_to_words(b, words)
36
+ end
37
+ end
38
+
39
+ def self.line_similarity_to_words(line, words)
40
+ # words delimited by : ],:/[
41
+ # Very basic similarity determination
42
+ # we count how many characters before and after the word, the less characters the more similar the match is
43
+ match_data = line.match("(^|[,:\\\[\/,])([^\\\[\/,:]*)#{words}([^\\\]\\\[\/,]*)($|[,\\\]\\\[\/,])").to_a
44
+ match_data[2].strip.size + match_data[3].strip.size
45
+ end
46
+
30
47
  class Word
31
48
 
32
49
  attr_reader :id, :traditional, :simplified, :pinyin, :english
data/test/helper.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require "ruby-debug"
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'zidian'
16
+
17
+ class Test::Unit::TestCase
18
+ end
data/test/test_zidian.rb CHANGED
@@ -1,5 +1,5 @@
1
- require "#{File.dirname(__FILE__)}/../lib/zidian"
2
- require "test/unit"
1
+ # encoding: utf-8
2
+ require "helper"
3
3
 
4
4
  class TestZidian < Test::Unit::TestCase
5
5
 
@@ -34,6 +34,11 @@ class TestZidian < Test::Unit::TestCase
34
34
  assert_equal("围城", words.first.simplified)
35
35
  end
36
36
 
37
+ def test_find_word_from_chinese
38
+ words = Zidian.find("围城")
39
+ assert_equal("wei2 cheng2", words.first.pinyin)
40
+ end
41
+
37
42
  def test_find_word_from_pinyin_marked
38
43
  words = Zidian.find("wei2 cheng2")
39
44
  assert_equal("siege", words.first.english.first)
data/zidian.gemspec CHANGED
@@ -1,48 +1,57 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{zidian}
8
- s.version = "0.2.0"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Bastien Vaucher"]
12
- s.date = %q{2010-04-10}
12
+ s.date = %q{2011-08-03}
13
13
  s.description = %q{Chinese dictionary using the CEDICT word list}
14
14
  s.email = %q{bastien.vaucher@gmail.com}
15
15
  s.extra_rdoc_files = [
16
16
  "README.mkd"
17
17
  ]
18
18
  s.files = [
19
- ".gitignore",
20
- "Manifest",
21
- "README.mkd",
22
- "Rakefile",
23
- "VERSION",
24
- "lib/cedict_ts.u8",
25
- "lib/zidian.rb",
26
- "test/test_zidian.rb",
27
- "zidian.gemspec"
19
+ "Gemfile",
20
+ "Gemfile.lock",
21
+ "Manifest",
22
+ "README.mkd",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "lib/cedict_ts.u8",
26
+ "lib/zidian.rb",
27
+ "test/helper.rb",
28
+ "test/test_zidian.rb",
29
+ "zidian.gemspec"
28
30
  ]
29
31
  s.homepage = %q{http://github.com/bastien/zidian}
30
- s.rdoc_options = ["--charset=UTF-8"]
31
32
  s.require_paths = ["lib"]
32
- s.rubygems_version = %q{1.3.6}
33
+ s.rubygems_version = %q{1.6.2}
33
34
  s.summary = %q{Chinese dictionary}
34
- s.test_files = [
35
- "test/test_zidian.rb"
36
- ]
37
35
 
38
36
  if s.respond_to? :specification_version then
39
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
40
37
  s.specification_version = 3
41
38
 
42
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
39
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
40
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
41
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.2"])
42
+ s.add_development_dependency(%q<ruby-debug>, [">= 0"])
43
+ s.add_development_dependency(%q<ruby-debug19>, [">= 0"])
43
44
  else
45
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
46
+ s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
47
+ s.add_dependency(%q<ruby-debug>, [">= 0"])
48
+ s.add_dependency(%q<ruby-debug19>, [">= 0"])
44
49
  end
45
50
  else
51
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
52
+ s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
53
+ s.add_dependency(%q<ruby-debug>, [">= 0"])
54
+ s.add_dependency(%q<ruby-debug19>, [">= 0"])
46
55
  end
47
56
  end
48
57
 
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zidian
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 2
8
- - 0
9
- version: 0.2.0
4
+ prerelease:
5
+ version: 0.3.0
10
6
  platform: ruby
11
7
  authors:
12
8
  - Bastien Vaucher
@@ -14,10 +10,53 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2010-04-10 00:00:00 +02:00
13
+ date: 2011-08-03 00:00:00 +02:00
18
14
  default_executable:
19
- dependencies: []
20
-
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: bundler
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: 1.0.0
24
+ type: :development
25
+ prerelease: false
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: jeweler
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: 1.6.2
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: ruby-debug
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ type: :development
47
+ prerelease: false
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: ruby-debug19
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: *id004
21
60
  description: Chinese dictionary using the CEDICT word list
22
61
  email: bastien.vaucher@gmail.com
23
62
  executables: []
@@ -27,13 +66,15 @@ extensions: []
27
66
  extra_rdoc_files:
28
67
  - README.mkd
29
68
  files:
30
- - .gitignore
69
+ - Gemfile
70
+ - Gemfile.lock
31
71
  - Manifest
32
72
  - README.mkd
33
73
  - Rakefile
34
74
  - VERSION
35
75
  - lib/cedict_ts.u8
36
76
  - lib/zidian.rb
77
+ - test/helper.rb
37
78
  - test/test_zidian.rb
38
79
  - zidian.gemspec
39
80
  has_rdoc: true
@@ -41,30 +82,31 @@ homepage: http://github.com/bastien/zidian
41
82
  licenses: []
42
83
 
43
84
  post_install_message:
44
- rdoc_options:
45
- - --charset=UTF-8
85
+ rdoc_options: []
86
+
46
87
  require_paths:
47
88
  - lib
48
89
  required_ruby_version: !ruby/object:Gem::Requirement
90
+ none: false
49
91
  requirements:
50
92
  - - ">="
51
93
  - !ruby/object:Gem::Version
94
+ hash: 4377275587190922647
52
95
  segments:
53
96
  - 0
54
97
  version: "0"
55
98
  required_rubygems_version: !ruby/object:Gem::Requirement
99
+ none: false
56
100
  requirements:
57
101
  - - ">="
58
102
  - !ruby/object:Gem::Version
59
- segments:
60
- - 0
61
103
  version: "0"
62
104
  requirements: []
63
105
 
64
106
  rubyforge_project:
65
- rubygems_version: 1.3.6
107
+ rubygems_version: 1.6.2
66
108
  signing_key:
67
109
  specification_version: 3
68
110
  summary: Chinese dictionary
69
- test_files:
70
- - test/test_zidian.rb
111
+ test_files: []
112
+
data/.gitignore DELETED
@@ -1,2 +0,0 @@
1
- pkg
2
- doc