17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/pokemon_name_generator/cli/commands/test.rb', line 17
def call(**options)
actual_pokemon = Corpus::Data.new.load_pokemon_names
all_data = Corpus::Names.as_letters.shuffle
mid_point = (all_data.size + 1) / 2
training_data = all_data[..mid_point]
test_data = all_data[mid_point..]
algorithm = Algorithm::Factory.new(training_data: training_data, **options).build_algorithm
puts "============================="
puts "🧪 Generator: #{algorithm.name}"
puts "============================="
puts "Generating #{options.fetch(:sample)} names..."
generated_names = options.fetch(:sample).to_i.times.map { algorithm.generate_name }
unique_pokemon_generated = generated_names.uniq
training_pokemon_generated = unique_pokemon_generated.intersection(training_data.map(&:join))
test_pokemon_generated = unique_pokemon_generated.intersection(test_data.map(&:join))
new_pokemon_generated = unique_pokemon_generated - actual_pokemon
upper_limit = actual_pokemon.max_by(&:size).size
lower_limit = actual_pokemon.min_by(&:size).size
puts "Done."
puts ""
puts "Unique Names: #{unique_pokemon_generated.size}"
puts "Training Pokémon: #{training_pokemon_generated.size}"
puts training_pokemon_generated.to_s if options.fetch(:show_names, false)
puts "Test Pokémon: #{test_pokemon_generated.size}"
puts test_pokemon_generated.to_s if options.fetch(:show_names, false)
puts "New Pokémon: #{new_pokemon_generated.size}"
puts " Too Long: #{new_pokemon_generated.count { |x| x.size > upper_limit }}"
puts " Too Short: #{new_pokemon_generated.count { |x| x.size < lower_limit }}"
puts new_pokemon_generated.to_s if options.fetch(:show_names, false)
puts ""
end
|