class PossibleKey
Constants
- BASE_64
- CONSONANTS
- FEATURE_LETTERS
- LETTER_COUNT_HASH
- VOWELS
Attributes
string[R]
Public Class Methods
new(string, key = nil)
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 28 def initialize(string, key = nil) @string = string @key = key end
Public Instance Methods
alnum_chunks()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 155 def alnum_chunks @alnum_chunks ||= string.scan(/[A-Za-z0-9]+/) end
alpha_chunks()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 151 def alpha_chunks @alpha_chunks ||= string.scan(/[A-Za-z]+/) end
character_set()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 82 def character_set # rubocop:disable Metrics/MethodLength @character_set ||= case string when /^[a-fA-F0-9\-]+$/ then :hex when /^[a-z0-9]+$/ then :lower36 when /^[A-Z0-9]+$/ then :upper36 when %r{^[A-Za-z0-9\-_+/]+={0,2}$} then :base64 end end
character_set_total()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 91 def character_set_total # rubocop:disable Metrics/MethodLength case character_set when :hex then 16 when :lower36 then 36 when :upper36 then 36 when :base64 then 64 else 0 end end
classification()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 69 def classification key_class = key? ? 'key' : 'not_key' "#{key_class}_#{character_set}" end
digit_chunks()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 135 def digit_chunks @digit_chunks ||= string.scan(/\d+/) end
features()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 33 def features # rubocop:disable Metrics/AbcSize, Metrics/MethodLength { **letter_frequency_difference_features, equal: letter_count[:'='], length: length, hex: character_set == :hex ? 1 : 0, lower36: character_set == :lower36 ? 1 : 0, upper36: character_set == :upper36 ? 1 : 0, base64: character_set == :base64 ? 1 : 0, mean_title_chunk_size: mean(title_chunks, &:length), variance_title_chunk_size: variance(title_chunks, &:length), max_title_chunk_size: max(title_chunks, &:length), mean_lower_chunk_size: mean(lower_chunks, &:length), variance_lower_chunk_size: variance(lower_chunks, &:length), mean_upper_chunk_size: mean(upper_chunks, &:length), variance_upper_chunk_size: variance(upper_chunks, &:length), mean_alpha_chunk_size: mean(alpha_chunks, &:length), variance_alpha_chunk_size: variance(alpha_chunks, &:length), mean_alnum_chunk_size: mean(alnum_chunks, &:length), variance_alnum_chunk_size: variance(alnum_chunks, &:length), mean_digit_chunk_size: mean(digit_chunks, &:length), variance_digit_chunk_size: variance(digit_chunks, &:length), vowel_consonant_ratio: vowel_consonant_ratio, alpha_chunks: alpha_chunks.length, alnum_chunks: alnum_chunks.length, digit_chunks: digit_chunks.length, title_chunks: title_chunks.length, mean_letter_frequency_difference: mean(letter_frequency_difference.values), variance_letter_frequency_difference: max(letter_frequency_difference.values) } end
ideal_letter_frequency()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 101 def ideal_letter_frequency 1.0 / character_set_total * length end
key?()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 65 def key? @key end
length()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 74 def length string.length end
letter_count()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 105 def letter_count @letter_count ||= begin string.chars.each_with_object(LETTER_COUNT_HASH.dup) do |letter, hash| hash[letter.to_sym] += 1 end end end
letter_frequency()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 113 def letter_frequency @letter_frequency ||= begin l = letter_count.dup l.each { |k, v| l[k] = v.to_f / string.length } l end end
letter_frequency_difference()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 121 def letter_frequency_difference @letter_frequency_difference ||= begin l = letter_frequency.dup l.each { |k, v| l[k] = (v - ideal_letter_frequency).abs } l end end
letter_frequency_difference_features()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 78 def letter_frequency_difference_features letter_frequency_difference.slice(*FEATURE_LETTERS) end
lower_chunks()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 143 def lower_chunks @lower_chunks ||= string.scan(/[a-z]+/) end
title_chunks()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 139 def title_chunks @title_chunks ||= string.scan(/[A-Z][a-z]+/) end
upper_chunks()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 147 def upper_chunks @upper_chunks ||= string.scan(/[A-Z]+/) end
vowel_consonant_ratio()
click to toggle source
# File lib/spellr/key_tuner/possible_key.rb, line 129 def vowel_consonant_ratio vowels = letter_count.fetch_values(*VOWELS).sum consonants = letter_count.fetch_values(*CONSONANTS).sum vowels / (consonants.nonzero? || 1) end