info('upgrade:wbwanalyses start'); $bar = $this->output->createProgressBar(Wbw::count()); $counter = 0; if (empty($this->argument('id'))) { $it = Wbw::orderby('id')->cursor(); } else { $arrId = explode(',', $this->argument('id')); $it = Wbw::whereIn('id', $arrId)->orderby('id')->cursor(); } foreach ($it as $wbwrow) { $counter++; WbwAnalysis::where('wbw_id', $wbwrow->id)->delete(); // code... $data = str_replace(' ', ' ', $wbwrow->data); $data = str_replace('
', ' ', $data); $xmlString = ''.$data.''; try { $xmlWord = simplexml_load_string($xmlString); } catch (Exception $e) { continue; } $wordsList = $xmlWord->xpath('//word'); foreach ($wordsList as $word) { $pali = $word->real->__toString(); $factors = []; foreach ($word as $key => $value) { $strValue = trim($value->__toString()); if ($strValue !== '?' && $strValue !== '' && $strValue !== '.ctl.' && $strValue !== '.a.' && mb_substr($strValue, 0, 3, 'UTF-8') !== '[a]' && $strValue !== '_un_auto_factormean_' && $strValue !== '_un_auto_mean_') { $iType = 0; $lang = 'pali'; $newData = [ 'wbw_id' => $wbwrow->id, 'wbw_word' => $wbwrow->word, 'book_id' => $wbwrow->book_id, 'paragraph' => $wbwrow->paragraph, 'wid' => $wbwrow->wid, 'type' => 0, 'data' => $strValue, 'confidence' => 100, 'lang' => 'en', 'editor_id' => $wbwrow->editor_id, 'created_at' => $wbwrow->created_at, 'updated_at' => $wbwrow->updated_at, ]; // TODO 加虚词 switch ($key) { case 'type': $newData['type'] = 1; WbwAnalysis::insert($newData); break; case 'gramma': $newData['type'] = 2; WbwAnalysis::insert($newData); break; case 'mean': $newData['type'] = 3; WbwAnalysis::insert($newData); break; case 'org': $newData['type'] = 4; WbwAnalysis::insert($newData); $factors = explode('+', $strValue); break; case 'om': $newData['type'] = 5; WbwAnalysis::insert($newData); // 存储拆分意思 $newData['type'] = 7; $factorMeaning = explode('+', $strValue); foreach ($factors as $index => $factor) { if (isset($factorMeaning[$index]) && ! empty($factorMeaning[$index]) && $factorMeaning[$index] !== '↓↓') { $newData['wbw_word'] = $factor; $newData['data'] = $factorMeaning[$index]; WbwAnalysis::insert($newData); } } break; case 'parent': $newData['type'] = 6; WbwAnalysis::insert($newData); break; case 'case': $newData['type'] = 8; WbwAnalysis::insert($newData); break; case 'rela': /* [{"sour_id":"p199-764-6","sour_spell":"dhammacakkappavattanatthaṃ","dest_id":"p199-764-8","dest_spell":"āmantanā","relation":"ADV","note":""}] */ $newData['type'] = 9; $rlt = json_decode($strValue); foreach ($rlt as $rltValue) { // code... if (! empty($rltValue->relation)) { $newData['data'] = $rltValue->relation; if (isset($word->gramma) && ! empty($word->gramma)) { $grm = explode('$', $word->gramma); if (count($grm) > 0) { $newData['d1'] = $grm[count($grm) - 1]; } else { $newData['d1'] = $word->type; } } $newData['d2'] = (int) (explode('-', $rltValue->dest_id)[2]) - (int) (explode('-', $rltValue->sour_id)[2]); WbwAnalysis::insert($newData); } } break; } } } } $bar->advance(); } $bar->finish(); $time = time() - $startAt; $this->info("wbw analyses done in {$time}"); return 0; } }