Class: PokemonNameGenerator::CLI::Commands::Test

Inherits:
Dry::CLI::Command
  • Object
show all
Defined in:
lib/pokemon_name_generator/cli/commands.rb

Instance Method Summary collapse

Instance Method Details

#call(**options) ⇒ Object



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