class Syncmind::OperateChatBot

Public Class Methods

analyze_script() click to toggle source
# File lib/syncmind.rb, line 1326
def self.analyze_script
    
  loop do
    require "naive_bayes"
    
    # Personality statistics and files.
    iteration           = File.read("data/iteration.txt") # Controls the sleep time between personality details and input.
    script              = File.readlines("data/script.txt") # The script file the mindfile reads from.
    personality_details = script.sample # Personality detail read from a script.
    
    bot_name  = File.read("bot_identity/bot_name.txt").strip
    your_name = File.read("your_identity/your_name.txt").strip
    
    puts "#{bot_name}: #{personality_details}"
    
    a = NaiveBayes.new(:pets, :hobbies, :jobs, :skills, :weather)
    
    # Pets
    a.train(:pets,      "dog", "word")
    a.train(:pets,      "cat", "word")
    a.train(:pets,      "rat", "word")
    a.train(:pets,   "gerbil", "word")
    a.train(:pets,  "hamster", "word")
    a.train(:pets,    "snake", "word")
    a.train(:pets,   "monkey", "word")
    a.train(:pets,     "dog.", "word")
    a.train(:pets,     "cat.", "word")
    a.train(:pets,     "rat.", "word")
    a.train(:pets,  "gerbil.", "word")
    a.train(:pets, "hamster.", "word")
    a.train(:pets,   "snake.", "word")
    a.train(:pets,  "monkey.", "word")
    a.train(:pets,     "dog;", "word")
    a.train(:pets,     "cat;", "word")
    a.train(:pets,     "rat;", "word")
    a.train(:pets,  "gerbil;", "word")
    a.train(:pets, "hamster;", "word")
    a.train(:pets,   "snake;", "word")
    a.train(:pets,  "monkey;", "word")
    a.train(:pets,     "dog:", "word")
    a.train(:pets,     "cat:", "word")
    a.train(:pets,     "rat:", "word")
    a.train(:pets,  "gerbil:", "word")
    a.train(:pets, "hamster:", "word")
    a.train(:pets,   "snake:", "word")
    a.train(:pets,  "monkey:", "word")
    a.train(:pets,     "dog?", "word")
    a.train(:pets,     "cat?", "word")
    a.train(:pets,     "rat?", "word")
    a.train(:pets,  "gerbil?", "word")
    a.train(:pets, "hamster?", "word")
    a.train(:pets,   "snake?", "word")
    a.train(:pets,  "monkey?", "word")

    # Hobbies
    a.train(:hobbies,           "sing", "word")
    a.train(:hobbies,     "illustrate", "word")
    a.train(:hobbies,           "draw", "word")
    a.train(:hobbies,          "write", "word")
    a.train(:hobbies,         "widdle", "word")
    a.train(:hobbies,          "dance", "word")
    a.train(:hobbies,           "clog", "word")
    a.train(:hobbies,          "weave", "word")
    a.train(:hobbies,        "crochet", "word")
    a.train(:hobbies,           "knit", "word")
    a.train(:hobbies,           "swim", "word")
    a.train(:hobbies,           "BDSM", "word")
    a.train(:hobbies,           "game", "word")
    a.train(:hobbies,           "JRPG", "word")
    a.train(:hobbies,         "MMORPG", "word")
    a.train(:hobbies,            "FPS", "word")
    a.train(:hobbies,            "SIM", "word")
    a.train(:hobbies,   "metroidvania", "word")
    a.train(:hobbies,       "football", "word")
    a.train(:hobbies,       "baseball", "word")
    a.train(:hobbies,         "soccer", "word")
    a.train(:hobbies,     "volleyball", "word")
    a.train(:hobbies,     "skateboard", "word")
    a.train(:hobbies,           "bike", "word")
    a.train(:hobbies,          "skate", "word")
    a.train(:hobbies,          "sing.", "word")
    a.train(:hobbies,    "illustrate.", "word")
    a.train(:hobbies,          "draw.", "word")
    a.train(:hobbies,         "write.", "word")
    a.train(:hobbies,        "widdle.", "word")
    a.train(:hobbies,         "dance.", "word")
    a.train(:hobbies,          "clog.", "word")
    a.train(:hobbies,         "weave.", "word")
    a.train(:hobbies,       "crochet.", "word")
    a.train(:hobbies,          "knit.", "word")
    a.train(:hobbies,          "swim.", "word")
    a.train(:hobbies,          "BDSM.", "word")
    a.train(:hobbies,          "game.", "word")
    a.train(:hobbies,          "JRPG.", "word")
    a.train(:hobbies,        "MMORPG.", "word")
    a.train(:hobbies,           "FPS.", "word")
    a.train(:hobbies,           "SIM.", "word")
    a.train(:hobbies,  "metroidvania.", "word")
    a.train(:hobbies,      "football.", "word")
    a.train(:hobbies,      "baseball.", "word")
    a.train(:hobbies,        "soccer.", "word")
    a.train(:hobbies,    "volleyball.", "word")
    a.train(:hobbies,    "skateboard.", "word")
    a.train(:hobbies,          "bike.", "word")
    a.train(:hobbies,         "skate.", "word")
    a.train(:hobbies,          "sing;", "word")
    a.train(:hobbies,    "illustrate;", "word")
    a.train(:hobbies,          "draw;", "word")
    a.train(:hobbies,         "write;", "word")
    a.train(:hobbies,        "widdle;", "word")
    a.train(:hobbies,         "dance;", "word")
    a.train(:hobbies,          "clog;", "word")
    a.train(:hobbies,         "weave;", "word")
    a.train(:hobbies,       "crochet;", "word")
    a.train(:hobbies,          "knit;", "word")
    a.train(:hobbies,          "swim;", "word")
    a.train(:hobbies,          "BDSM;", "word")
    a.train(:hobbies,          "game;", "word")
    a.train(:hobbies,          "JRPG;", "word")
    a.train(:hobbies,        "MMORPG;", "word")
    a.train(:hobbies,           "FPS;", "word")
    a.train(:hobbies,           "SIM;", "word")
    a.train(:hobbies,  "metroidvania;", "word")
    a.train(:hobbies,      "football;", "word")
    a.train(:hobbies,      "baseball;", "word")
    a.train(:hobbies,        "soccer;", "word")
    a.train(:hobbies,    "volleyball;", "word")
    a.train(:hobbies,    "skateboard;", "word")
    a.train(:hobbies,          "bike;", "word")
    a.train(:hobbies,         "skate;", "word")
    a.train(:hobbies,          "sing:", "word")
    a.train(:hobbies,    "illustrate:", "word")
    a.train(:hobbies,          "draw:", "word")
    a.train(:hobbies,         "write:", "word")
    a.train(:hobbies,        "widdle:", "word")
    a.train(:hobbies,         "dance:", "word")
    a.train(:hobbies,          "clog:", "word")
    a.train(:hobbies,         "weave:", "word")
    a.train(:hobbies,       "crochet:", "word")
    a.train(:hobbies,          "knit:", "word")
    a.train(:hobbies,          "swim:", "word")
    a.train(:hobbies,          "BDSM:", "word")
    a.train(:hobbies,          "game:", "word")
    a.train(:hobbies,          "JRPG:", "word")
    a.train(:hobbies,        "MMORPG:", "word")
    a.train(:hobbies,           "FPS:", "word")
    a.train(:hobbies,           "SIM:", "word")
    a.train(:hobbies,  "metroidvania:", "word")
    a.train(:hobbies,      "football:", "word")
    a.train(:hobbies,      "baseball:", "word")
    a.train(:hobbies,        "soccer:", "word")
    a.train(:hobbies,    "volleyball:", "word")
    a.train(:hobbies,    "skateboard:", "word")
    a.train(:hobbies,          "bike:", "word")
    a.train(:hobbies,         "skate:", "word")
    a.train(:hobbies,          "sing?", "word")
    a.train(:hobbies,    "illustrate?", "word")
    a.train(:hobbies,          "draw?", "word")
    a.train(:hobbies,         "write?", "word")
    a.train(:hobbies,        "widdle?", "word")
    a.train(:hobbies,         "dance?", "word")
    a.train(:hobbies,          "clog?", "word")
    a.train(:hobbies,         "weave?", "word")
    a.train(:hobbies,       "crochet?", "word")
    a.train(:hobbies,          "knit?", "word")
    a.train(:hobbies,          "swim?", "word")
    a.train(:hobbies,          "BDSM?", "word")
    a.train(:hobbies,          "game?", "word")
    a.train(:hobbies,          "JRPG?", "word")
    a.train(:hobbies,        "MMORPG?", "word")
    a.train(:hobbies,           "FPS?", "word")
    a.train(:hobbies,           "SIM?", "word")
    a.train(:hobbies,  "metroidvania?", "word")
    a.train(:hobbies,      "football?", "word")
    a.train(:hobbies,      "baseball?", "word")
    a.train(:hobbies,        "soccer?", "word")
    a.train(:hobbies,    "volleyball?", "word")
    a.train(:hobbies,    "skateboard?", "word")
    a.train(:hobbies,          "bike?", "word")
    a.train(:hobbies,         "skate?", "word")
    
    # Jobs
    a.train(:jobs,          "nurse", "word")
    a.train(:jobs,        "officer", "word")
    a.train(:jobs,        "fireman", "word")
    a.train(:jobs,        "cashier", "word")
    a.train(:jobs,        "stocker", "word")
    a.train(:jobs,         "barber", "word")
    a.train(:jobs,        "stylist", "word")
    a.train(:jobs,          "clerk", "word")
    a.train(:jobs,        "butcher", "word")
    a.train(:jobs,       "reporter", "word")
    a.train(:jobs,        "manager", "word")
    a.train(:jobs,          "crane", "word")
    a.train(:jobs,         "lawyer", "word")
    a.train(:jobs,      "cameraman", "word")
    a.train(:jobs,       "engineer", "word")
    a.train(:jobs,          "pilot", "word")
    a.train(:jobs,         "nurse.", "word")
    a.train(:jobs,       "officer.", "word")
    a.train(:jobs,       "fireman.", "word")
    a.train(:jobs,       "cashier.", "word")
    a.train(:jobs,       "stocker.", "word")
    a.train(:jobs,        "barber.", "word")
    a.train(:jobs,       "stylist.", "word")
    a.train(:jobs,         "clerk.", "word")
    a.train(:jobs,       "butcher.", "word")
    a.train(:jobs,      "reporter.", "word")
    a.train(:jobs,       "manager.", "word")
    a.train(:jobs,         "crane.", "word")
    a.train(:jobs,        "lawyer.", "word")
    a.train(:jobs,     "cameraman.", "word")
    a.train(:jobs,      "engineer.", "word")
    a.train(:jobs,         "pilot.", "word")
    a.train(:jobs,         "nurse;", "word")
    a.train(:jobs,       "officer;", "word")
    a.train(:jobs,       "fireman;", "word")
    a.train(:jobs,       "cashier;", "word")
    a.train(:jobs,       "stocker;", "word")
    a.train(:jobs,        "barber;", "word")
    a.train(:jobs,       "stylist;", "word")
    a.train(:jobs,         "clerk;", "word")
    a.train(:jobs,       "butcher;", "word")
    a.train(:jobs,      "reporter;", "word")
    a.train(:jobs,       "manager;", "word")
    a.train(:jobs,         "crane;", "word")
    a.train(:jobs,        "lawyer;", "word")
    a.train(:jobs,     "cameraman;", "word")
    a.train(:jobs,      "engineer;", "word")
    a.train(:jobs,         "pilot;", "word")
    a.train(:jobs,         "nurse:", "word")
    a.train(:jobs,       "officer:", "word")
    a.train(:jobs,       "fireman:", "word")
    a.train(:jobs,       "cashier:", "word")
    a.train(:jobs,       "stocker:", "word")
    a.train(:jobs,        "barber:", "word")
    a.train(:jobs,       "stylist:", "word")
    a.train(:jobs,         "clerk:", "word")
    a.train(:jobs,       "butcher:", "word")
    a.train(:jobs,      "reporter:", "word")
    a.train(:jobs,       "manager:", "word")
    a.train(:jobs,         "crane:", "word")
    a.train(:jobs,        "lawyer:", "word")
    a.train(:jobs,     "cameraman:", "word")
    a.train(:jobs,      "engineer:", "word")
    a.train(:jobs,         "pilot:", "word")
    
    # Skills
    a.train(:skills,   "codebreak", "word")
    a.train(:skills,        "cook", "word")
    a.train(:skills,       "climb", "word")
    a.train(:skills,      "yoddle", "word")
    a.train(:skills,  "blacksmith", "word")
    a.train(:skills,  "codebreak.", "word")
    a.train(:skills,       "cook.", "word")
    a.train(:skills,      "climb.", "word")
    a.train(:skills,     "yoddle.", "word")
    a.train(:skills, "blacksmith.", "word")
    a.train(:skills,  "codebreak;", "word")
    a.train(:skills,       "cook;", "word")
    a.train(:skills,      "climb;", "word")
    a.train(:skills,     "yoddle;", "word")
    a.train(:skills, "blacksmith;", "word")
    a.train(:skills,  "codebreak:", "word")
    a.train(:skills,       "cook:", "word")
    a.train(:skills,      "climb:", "word")
    a.train(:skills,     "yoddle:", "word")
    a.train(:skills, "blacksmith:", "word")
    a.train(:skills,  "codebreak?", "word")
    a.train(:skills,       "cook?", "word")
    a.train(:skills,      "climb?", "word")
    a.train(:skills,     "yoddle?", "word")
    a.train(:skills, "blacksmith?", "word")
    
    # Weather
    a.train(:weather,   "sunny", "word")
    a.train(:weather,   "rainy", "word")
    a.train(:weather,  "cloudy", "word")
    a.train(:weather,   "foggy", "word")
    a.train(:weather,   "humid", "word")
    a.train(:weather,  "sunny.", "word")
    a.train(:weather,  "rainy.", "word")
    a.train(:weather, "cloudy.", "word")
    a.train(:weather,  "foggy.", "word")
    a.train(:weather,  "humid.", "word")
    a.train(:weather,  "sunny;", "word")
    a.train(:weather,  "rainy;", "word")
    a.train(:weather, "cloudy;", "word")
    a.train(:weather,  "foggy;", "word")
    a.train(:weather,  "humid;", "word")
    a.train(:weather,  "sunny:", "word")
    a.train(:weather,  "rainy:", "word")
    a.train(:weather, "cloudy:", "word")
    a.train(:weather,  "foggy:", "word")
    a.train(:weather,  "humid:", "word")
    a.train(:weather,  "sunny?", "word")
    a.train(:weather,  "rainy?", "word")
    a.train(:weather, "cloudy?", "word")
    a.train(:weather,  "foggy?", "word")
    a.train(:weather,  "humid?", "word")
    
    # Chatbot process for asking about pets.
    print "#{bot_name}: How do you do?\n#{your_name}: "
    b = gets.chomp
    
    if b == "Goodbye"
      abort
    end
  
    # Classify b and convert to string.
    a_class     = a.classify(*b)
    result      = a_class[0]
    probability = a_class[1].to_f
    decision    = result.to_s
    
    # Responce with a pet, hobby, job, skill, or weather rejoinder based on probability.
    if    decision ==    "pets"
          if probability >= 1.7741802839285145e-10
            puts "#{bot_name}: Is that a nice pet?"
          else
            puts "#{bot_name}: Sorry but that's not a pet."
          end
    elsif decision == "hobbies"
          if probability >= 1.7741802839285145e-10
            puts "#{bot_name}: Can you guide me in that hobby?"
          else
            puts "#{bot_name}: I don't think that's a hobby."
          end
    elsif decision ==    "jobs"
          if probability >= 1.7741802839285145e-10
            puts "#{bot_name}: Do you like that job?"
          else
            puts "#{bot_name}: That doesn't seem like a real job."
          end
    elsif decision ==  "skills"
          if probability >= 1.7741802839285145e-10
            puts "#{bot_name}: That sounds like an interesting skill."
          else
            puts "#{bot_name}: Have you ever considered switching skills?"
          end
    elsif decision == "weather"
          if probability >= 1.7741802839285145e-10
            puts "#{bot_name}: The weather is #{decision}?"
          else
            puts "#{bot_name}: That weather doesn't seem likely."
          end
    else
      puts "#{bot_name}: I'm not sure what you mean."
    end
    
  end
  
end