spellingbee 0.0.2
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.
- data/.gitignore +3 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/README +40 -0
- data/Rakefile +2 -0
- data/dict/default.txt +2 -0
- data/doc/Gemfile.html +98 -0
- data/doc/LICENSE.html +117 -0
- data/doc/README.html +146 -0
- data/doc/Rakefile.html +95 -0
- data/doc/SpellingBee.html +586 -0
- data/doc/created.rid +8 -0
- data/doc/dict/default_txt.html +97 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +80 -0
- data/doc/js/darkfish.js +116 -0
- data/doc/js/jquery.js +32 -0
- data/doc/js/quicksearch.js +114 -0
- data/doc/js/thickbox-compressed.js +10 -0
- data/doc/lib/spellingbee/version_rb.html +52 -0
- data/doc/lib/spellingbee_rb.html +52 -0
- data/doc/rdoc.css +706 -0
- data/lib/spellingbee.rb +94 -0
- data/lib/spellingbee/version.rb +3 -0
- data/spellingbee.gemspec +21 -0
- metadata +108 -0
data/lib/spellingbee.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
|
2
|
+
class SpellingBee
|
3
|
+
attr_accessor :dict_words, :dict_frequency
|
4
|
+
|
5
|
+
DEFAULT_DICT = File.join(File.dirname(__FILE__), '..', 'dict', 'default.txt')
|
6
|
+
|
7
|
+
def initialize(opts = {})
|
8
|
+
options = { :source_text => DEFAULT_DICT }.merge opts
|
9
|
+
@dict_frequency = Hash.new(1)
|
10
|
+
@dict_words = File.new(options[:source_text]).read.downcase.scan(/[a-z]+/)
|
11
|
+
@dict_words.each { |word| @dict_frequency[word] += 1 }
|
12
|
+
end
|
13
|
+
|
14
|
+
# Returns all the combinations of the word with one character removed
|
15
|
+
#
|
16
|
+
# Example:
|
17
|
+
# deletions("word") #=> ["ord", "wrd", "wod", "wor"]
|
18
|
+
#
|
19
|
+
def deletions word
|
20
|
+
n = word.length
|
21
|
+
deletion = (0...n).collect {|i| word[0...i]+word[i+1..-1] }
|
22
|
+
end
|
23
|
+
|
24
|
+
# Returns all combinations of the word with adjacent words transposed.
|
25
|
+
#
|
26
|
+
# Example:
|
27
|
+
# transpositions("word") #=> ["owrd", "wrod", "wodr"]
|
28
|
+
#
|
29
|
+
def transpositions word
|
30
|
+
n = word.length
|
31
|
+
(0...n-1).collect {|i| word[0...i]+word[i+1,1]+word[i,1]+word[i+2..-1] }
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns all variations of the word with each character replaced by all
|
35
|
+
# characters from 'a' to 'z'.
|
36
|
+
#
|
37
|
+
# Example:
|
38
|
+
# replacements("word") #=> ["aord", "bord", "cord", ... "ward", "wbrd" ...]
|
39
|
+
#
|
40
|
+
def replacements word
|
41
|
+
n = word.length
|
42
|
+
new_words = []
|
43
|
+
n.times {|i| ('a'..'z').each {|l| new_words << word[0...i]+l.chr+word[i+1..-1] } }
|
44
|
+
new_words
|
45
|
+
end
|
46
|
+
|
47
|
+
# Returns all variations of the word with an alphabet inserted between the
|
48
|
+
# characters.
|
49
|
+
#
|
50
|
+
# Example:
|
51
|
+
# insertions("word") #=> ["aword", "bword", "cword" ... "waord", "wbord" ... ]
|
52
|
+
#
|
53
|
+
def insertions word
|
54
|
+
n = word.length
|
55
|
+
new_words = []
|
56
|
+
(n+1).times {|i| ('a'..'z').each {|l| new_words << word[0...i]+l.chr+word[i..-1] } }
|
57
|
+
new_words
|
58
|
+
end
|
59
|
+
|
60
|
+
# Returns the variations of the given spelling. This set will contain all the
|
61
|
+
# possible variations of the spelling havind edit distance = 1. (Edit
|
62
|
+
# distance is the number of edits it takes to obtain the second word from
|
63
|
+
# the first.)
|
64
|
+
def variation_words word
|
65
|
+
( deletions(word) + transpositions(word) + replacements(word) + insertions(word) ).uniq
|
66
|
+
end
|
67
|
+
|
68
|
+
# Selects the words from the list that are present in the dictionary.
|
69
|
+
#
|
70
|
+
# Example:
|
71
|
+
#
|
72
|
+
# known ["asdfgh", "known", "word", "qqqq"] #=> ["known", "word"]
|
73
|
+
#
|
74
|
+
def known words
|
75
|
+
known_words = words.find_all { |w| @dict_frequency.has_key? w }
|
76
|
+
known_words.empty? ? nil : known_words
|
77
|
+
end
|
78
|
+
|
79
|
+
# Returns the suggestion for the correction. If the word is found in the
|
80
|
+
# dictionary, it is returned, otherwise the word closest to it is returned.
|
81
|
+
# If there are no spelling suggestions, the same word is returned.
|
82
|
+
#
|
83
|
+
# Example:
|
84
|
+
#
|
85
|
+
# s = Spellingbee.new
|
86
|
+
# s.correct "spelling" #=> ["spelling"] -> word from dictionary
|
87
|
+
# s.correct "speling" #=> ["spelling"] -> corrected spelling
|
88
|
+
# s.correct "qqqqqq" #=> ["qqqqqq"] -> no suggestions
|
89
|
+
#
|
90
|
+
def correct word
|
91
|
+
known [word] or known(variation_words word) or [word]
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
data/spellingbee.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "spellingbee/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "spellingbee"
|
7
|
+
s.version = SpellingBee::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Nithin Bekal"]
|
10
|
+
s.email = ["nithinbekal@gmail.com"]
|
11
|
+
s.homepage = "http://rubygems.org/gems/spellingbee"
|
12
|
+
s.summary = %q{A spelling correction tool for ruby.}
|
13
|
+
s.description = %q{Suggests corrections for mis-spelled words.}
|
14
|
+
|
15
|
+
s.rubyforge_project = "spellingbee"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: spellingbee
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Nithin Bekal
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-01-01 00:00:00 +05:30
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Suggests corrections for mis-spelled words.
|
22
|
+
email:
|
23
|
+
- nithinbekal@gmail.com
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- .gitignore
|
32
|
+
- Gemfile
|
33
|
+
- LICENSE
|
34
|
+
- README
|
35
|
+
- Rakefile
|
36
|
+
- dict/default.txt
|
37
|
+
- doc/Gemfile.html
|
38
|
+
- doc/LICENSE.html
|
39
|
+
- doc/README.html
|
40
|
+
- doc/Rakefile.html
|
41
|
+
- doc/SpellingBee.html
|
42
|
+
- doc/created.rid
|
43
|
+
- doc/dict/default_txt.html
|
44
|
+
- doc/images/brick.png
|
45
|
+
- doc/images/brick_link.png
|
46
|
+
- doc/images/bug.png
|
47
|
+
- doc/images/bullet_black.png
|
48
|
+
- doc/images/bullet_toggle_minus.png
|
49
|
+
- doc/images/bullet_toggle_plus.png
|
50
|
+
- doc/images/date.png
|
51
|
+
- doc/images/find.png
|
52
|
+
- doc/images/loadingAnimation.gif
|
53
|
+
- doc/images/macFFBgHack.png
|
54
|
+
- doc/images/package.png
|
55
|
+
- doc/images/page_green.png
|
56
|
+
- doc/images/page_white_text.png
|
57
|
+
- doc/images/page_white_width.png
|
58
|
+
- doc/images/plugin.png
|
59
|
+
- doc/images/ruby.png
|
60
|
+
- doc/images/tag_green.png
|
61
|
+
- doc/images/wrench.png
|
62
|
+
- doc/images/wrench_orange.png
|
63
|
+
- doc/images/zoom.png
|
64
|
+
- doc/index.html
|
65
|
+
- doc/js/darkfish.js
|
66
|
+
- doc/js/jquery.js
|
67
|
+
- doc/js/quicksearch.js
|
68
|
+
- doc/js/thickbox-compressed.js
|
69
|
+
- doc/lib/spellingbee/version_rb.html
|
70
|
+
- doc/lib/spellingbee_rb.html
|
71
|
+
- doc/rdoc.css
|
72
|
+
- lib/spellingbee.rb
|
73
|
+
- lib/spellingbee/version.rb
|
74
|
+
- spellingbee.gemspec
|
75
|
+
has_rdoc: true
|
76
|
+
homepage: http://rubygems.org/gems/spellingbee
|
77
|
+
licenses: []
|
78
|
+
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options: []
|
81
|
+
|
82
|
+
require_paths:
|
83
|
+
- lib
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
segments:
|
90
|
+
- 0
|
91
|
+
version: "0"
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
segments:
|
98
|
+
- 0
|
99
|
+
version: "0"
|
100
|
+
requirements: []
|
101
|
+
|
102
|
+
rubyforge_project: spellingbee
|
103
|
+
rubygems_version: 1.3.7
|
104
|
+
signing_key:
|
105
|
+
specification_version: 3
|
106
|
+
summary: A spelling correction tool for ruby.
|
107
|
+
test_files: []
|
108
|
+
|