post(); parent::boot(); static::saving(function ($model) use ($add) { $data = $model->attributes; $textLabel= [ 'label' => [ 'inspection' => new \ArrayObject(), 'test' => new \ArrayObject(), 'operation' => new \ArrayObject(), 'medicine' => new \ArrayObject(), 'symptom' => new \ArrayObject(), 'disease' => new \ArrayObject(), 'date' => new \ArrayObject() ], 'text' => $data['text'] ]; if (empty($add['symptom'])){ $add['symptom'] = []; } if (empty($add['add_symptom'])){ $add['add_symptom']['values'] = []; } if (empty($add['operation'])){ $add['operation'] = []; } if (empty($add['add_operation'])){ $add['add_operation']['values'] = []; } if (empty($add['medicine'])){ $add['medicine'] = []; } if (empty($add['add_medicine'])){ $add['add_medicine']['values'] = []; } if (empty($add['inspection'])){ $add['inspection'] = []; } if (empty($add['test'])){ $add['test'] = []; } if (empty($add['disease'])){ $add['disease'] = []; } if (empty($add['add_disease'])){ $add['add_disease']['values'] = []; } if (empty($add['date'])){ $add['date'] = []; } if (empty($add['add_date'])){ $add['add_date']['values'] = []; } $inspection = array_column($add['inspection'],'terms'); $inspectionArray = array_column($add['inspection'],'tag','terms'); $test = array_column($add['test'],'terms'); $testArray = array_column($add['test'],'tag','terms'); $symptom = array_unique(array_merge($add['symptom'],$add['add_symptom']['values'])); $operation = array_unique(array_merge($add['operation'],$add['add_operation']['values'])); $medicine = array_unique(array_merge($add['medicine'],$add['add_medicine']['values'])); $disease = array_unique(array_merge($add['disease'],$add['add_disease']['values'])); $date = array_unique(array_merge($add['date'],$add['add_date']['values'])); $terms = array_filter(array_unique(array_merge($symptom,$operation,$medicine,$disease,$inspection,$test,$date))); foreach ($terms as $item){ $count = mb_substr_count($data['text'],$item); $length = mb_strlen($data['text']); $offset = 0; for ($i = 0;$i < $count;$i++){ if ($offset > $length){ break; } $pos = mb_strpos($data['text'],$item,$offset); if ($pos === false){ break; } $len = mb_strlen($item); $offset += $pos+$len; if (in_array($item,$inspection)){ $textLabel['label']['inspection'][$item.'@#'.$inspectionArray[$item]][] = [$pos,$pos+$len]; } if (in_array($item,$test)){ $textLabel['label']['test'][$item.'@#'.$testArray[$item]][] = [$pos,$pos+$len]; } if (in_array($item,$symptom)){ $textLabel['label']['symptom'][$item][] = [$pos,$pos+$len]; } if (in_array($item,$symptom)){ $textLabel['label']['operation'][$item][] = [$pos,$pos+$len]; } if (in_array($item,$symptom)){ $textLabel['label']['medicine'][$item][] = [$pos,$pos+$len]; } if (in_array($item,$disease)){ $textLabel['label']['disease'][$item][] = [$pos,$pos+$len]; } if (in_array($item,$date)){ $textLabel['label']['date'][$item][] = [$pos,$pos+$len]; } } } $json['data'][] = $textLabel; $json['filename'] = 'corpus.json'; $url = 'http://121.36.94.218:10090/disease/ner/data'; $post = json_encode($json); $result = self::sendPost($url,$post); if ($result['code'] == '200'){ self::query()->where('id',$data['id'])->update(['status'=>1]); } }); } public static function sendPost($url,$data){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $output = curl_exec($ch); curl_close($ch); $output = json_decode($output,true); return $output; } }