OXIESEC PANEL
- Current Dir:
/
/
usr
/
lib
/
ruby
/
vendor_ruby
/
did_you_mean
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
03/05/2020 06:33:15 AM
rwxr-xr-x
📁
core_ext
-
02/10/2020 11:55:58 AM
rwxr-xr-x
📁
experimental
-
02/10/2020 11:55:58 AM
rwxr-xr-x
📄
experimental.rb
121 bytes
03/31/2018 05:00:01 PM
rw-r--r--
📁
formatters
-
02/10/2020 11:55:58 AM
rwxr-xr-x
📄
jaro_winkler.rb
1.79 KB
03/31/2018 05:00:01 PM
rw-r--r--
📄
levenshtein.rb
1.34 KB
03/31/2018 05:00:01 PM
rw-r--r--
📄
spell_checker.rb
1.29 KB
03/31/2018 05:00:01 PM
rw-r--r--
📁
spell_checkers
-
02/10/2020 11:55:58 AM
rwxr-xr-x
📄
verbose.rb
132 bytes
03/31/2018 05:00:01 PM
rw-r--r--
📄
verbose_formatter.rb
313 bytes
03/31/2018 05:00:01 PM
rw-r--r--
📄
version.rb
42 bytes
03/31/2018 05:00:01 PM
rw-r--r--
Editing: spell_checker.rb
Close
# frozen-string-literal: true require "did_you_mean/levenshtein" require "did_you_mean/jaro_winkler" module DidYouMean class SpellChecker def initialize(dictionary: ) @dictionary = dictionary end def correct(input) input = normalize(input) threshold = input.length > 3 ? 0.834 : 0.77 words = @dictionary.select {|word| JaroWinkler.distance(normalize(word), input) >= threshold } words.reject! {|word| input == word.to_s } words.sort_by! {|word| JaroWinkler.distance(word.to_s, input) } words.reverse! # Correct mistypes threshold = (input.length * 0.25).ceil corrections = words.select {|c| Levenshtein.distance(normalize(c), input) <= threshold } # Correct misspells if corrections.empty? corrections = words.select do |word| word = normalize(word) length = input.length < word.length ? input.length : word.length Levenshtein.distance(word, input) < length end.first(1) end corrections end private def normalize(str_or_symbol) #:nodoc: str = if str_or_symbol.is_a?(String) str_or_symbol.dup else str_or_symbol.to_s end str.downcase! str.tr!("@", "") str end end end