/**
  * Execute the job.
  *
  * @return void
  */
 public function handle()
 {
     $client = new Client(['base_uri' => env('SP_ENDPOINT', 'http://feedback.dev/'), 'timeout' => 30.0]);
     $response = $client->request('POST', 'process/', ['form_params' => ['content' => $this->feedback->content]]);
     $jsonData = json_decode($response->getBody());
     $jsonData = collect($jsonData->data);
     $classifications = Category::classifications()->get()->keyBy('name');
     $sentences = [];
     $jsonData->sortBy(function ($item, $key) use($classifications) {
         return $classifications->get($item->classification)->id;
     })->each(function ($item, $key) use($classifications, &$sentences) {
         $sentence = new Sentence(["content" => $item->content, "classification_id" => $classifications->get($item->classification)->id]);
         array_push($sentences, $sentence);
     });
     $this->feedback->sentences()->saveMany($sentences);
 }
 public function calculateProbabilities()
 {
     $this->load('sentences');
     $sentences = $this->sentences;
     $grouped = $this->sentences->groupBy('classification_id');
     $classifications = Category::classifications()->get()->keyBy('id');
     $percentage = 1;
     $probabilities = $grouped->map(function ($item, $key) use($sentences, $classifications, &$percentage) {
         $proportion = count($item) / count($sentences);
         $percentage = $percentage - $proportion;
         if ($percentage <= 0) {
             $proportion = $proportion - $percentage;
             $percentage = 1;
         }
         return ["classification" => $classifications->get($key)->name, "probability" => $proportion];
     });
     $this->probabilities = $probabilities->values()->toArray();
     $this->save();
 }