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;
}
}