47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/pokemon_name_generator/cli/commands.rb', line 47
def call(**options)
corpus = Corpus.new
actual_pokemon = corpus.pokemon
all_data = corpus.pokemon_phonemes.shuffle
longest_name = actual_pokemon.max_by(&:length)
shortest_name = actual_pokemon.min_by(&:length)
mid_point = (all_data.size + 1) / 2
training_data = all_data[..mid_point]
test_data = all_data[mid_point..]
algorithm = case options.fetch(:algorithm)
when "naive" then Naive.new(training_data)
when "markov" then Markov.new(training_data, context_length: options.fetch(:context).to_i)
end
puts "============================="
puts "๐งช Generator: #{algorithm.name}"
puts "============================="
generated_names = options.fetch(:number).to_i.times.map { algorithm.generate_name }
puts "Training Data: #{training_data.size}"
puts "Test Data: #{test_data.size}"
puts "Generated Names: #{generated_names.size}"
puts "Unique Generated Names: #{generated_names.uniq.size}"
puts "Training Data Names Generated: #{training_data.map { |datum| datum.join("") }.intersection(generated_names.uniq).size}"
puts "Test Data Names Generated: #{test_data.map { |datum| datum.join("") }.intersection(generated_names.uniq).size}"
puts "Test Data Names Generated: #{test_data.map { |datum| datum.join("") }.intersection(generated_names.uniq)}"
puts "Overly Short Names: #{generated_names.count { |name| name.size < shortest_name.size }}"
puts "Overly Long Names: #{generated_names.count { |name| name.size > longest_name.size }}"
puts ""
end
|