| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- <?php
- namespace App\Console\Commands;
- use Illuminate\Console\Command;
- use App\Models\Channel;
- use App\Models\Sentence;
- use App\Models\PaliSentence;
- use Illuminate\Support\Facades\Cache;
- class StatisticsNissayaCover extends Command
- {
- /**
- * The name and signature of the console command.
- * php artisan statistics:nissaya.cover
- * @var string
- */
- protected $signature = 'statistics:nissaya.cover';
- protected $types = [
- 'mula' => [
- 69,
- 70,
- 71,
- 72,
- 73,
- 74,
- 75,
- 76,
- 77,
- 78,
- 79,
- 80,
- 81,
- 82,
- 83,
- 84,
- 85,
- 86,
- 87,
- 88,
- 89,
- 90,
- 91,
- 92,
- 93,
- 94,
- 95,
- 143,
- 144,
- 145,
- 146,
- 147,
- 148,
- 149,
- 150,
- 151,
- 152,
- 153,
- 154,
- 155,
- 156,
- 157,
- 158,
- 159,
- 160,
- 161,
- 162,
- 163,
- 164,
- 165,
- 166,
- 167,
- 168,
- 169,
- 170,
- 171,
- 213,
- 214,
- 215,
- 216,
- 217,
- ],
- 'atthakatha' => [
- 64,
- 65,
- 96,
- 97,
- 98,
- 99,
- 100,
- 101,
- 102,
- 103,
- 104,
- 105,
- 106,
- 107,
- 108,
- 109,
- 110,
- 111,
- 112,
- 113,
- 114,
- 115,
- 116,
- 117,
- 118,
- 119,
- 120,
- 121,
- 122,
- 123,
- 124,
- 125,
- 126,
- 127,
- 128,
- 129,
- 130,
- 131,
- 132,
- 133,
- 134,
- 135,
- 136,
- 137,
- 138,
- 139,
- 140,
- 141,
- 142,
- ],
- 'tika' => [
- 66,
- 67,
- 68,
- 172,
- 173,
- 174,
- 175,
- 176,
- 177,
- 178,
- 179,
- 180,
- 181,
- 182,
- 183,
- 184,
- 185,
- 186,
- 187,
- 188,
- 189,
- 190,
- 191,
- 192,
- 193,
- 194,
- 195,
- 196,
- 197,
- 198,
- 199,
- 200,
- 201,
- 202,
- 203,
- 204,
- 205,
- 206,
- 207,
- 208,
- 209,
- 210,
- 211,
- 212,
- ],
- 'vinaya' => [138, 139, 140, 141, 142, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,],
- 'sutta' => [
- 82,
- 83,
- 84,
- 85,
- 86,
- 87,
- 88,
- 89,
- 90,
- 91,
- 92,
- 93,
- 94,
- 95,
- 99,
- 100,
- 101,
- 102,
- 103,
- 104,
- 105,
- 106,
- 107,
- 108,
- 109,
- 110,
- 111,
- 112,
- 113,
- 114,
- 115,
- 116,
- 117,
- 118,
- 119,
- 120,
- 121,
- 122,
- 123,
- 124,
- 125,
- 126,
- 127,
- 128,
- 129,
- 130,
- 131,
- 132,
- 133,
- 134,
- 135,
- 136,
- 137,
- 143,
- 144,
- 145,
- 146,
- 147,
- 148,
- 149,
- 150,
- 151,
- 152,
- 153,
- 154,
- 155,
- 156,
- 157,
- 158,
- 159,
- 160,
- 161,
- 162,
- 163,
- 164,
- 165,
- 166,
- 167,
- 168,
- 169,
- 170,
- 171,
- 181,
- 182,
- 183,
- 184,
- 185,
- 186,
- 187,
- 188,
- 189,
- 190,
- 191,
- 192,
- 193,
- 194,
- 195,
- 196,
- 197,
- 198,
- 199,
- ],
- 'abhidhamma' => [69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 96, 97, 98, 172, 173, 174, 175, 176, 177, 178, 179, 180,],
- ];
- /**
- * The console command description.
- *
- * @var string
- */
- protected $description = '统计nissaya覆盖度';
- /**
- * Create a new command instance.
- *
- * @return void
- */
- public function __construct()
- {
- parent::__construct();
- }
- /**
- * Execute the console command.
- *
- * @return int
- */
- public function handle()
- {
- if (\App\Tools\Tools::isStop()) {
- return 0;
- }
- $nissaya_channels = Channel::where('type', 'nissaya')
- ->where('lang', 'my')
- ->select('uid')->get();
- $this->info('channel:' . count($nissaya_channels));
- $output = [];
- foreach ($this->types as $type => $books) {
- # code...
- $pali = PaliSentence::whereIn('book', $books)->sum('length');
- $nissayaSentences = Sentence::whereIn('channel_uid', $nissaya_channels)
- ->whereIn('book_id', $books)
- ->groupBy(['book_id', 'paragraph', 'word_start', 'word_end'])
- ->select(['book_id', 'paragraph', 'word_start', 'word_end'])
- ->get();
- $sentences = [];
- $final = 0;
- $this->info($type . count($nissayaSentences) . " sentences");
- if (count($nissayaSentences) > 0) {
- $count = 0;
- foreach ($nissayaSentences as $value) {
- $sentences[] = [
- $value->book_id,
- $value->paragraph,
- $value->word_start,
- $value->word_end,
- ];
- if ($count % 100 === 0) {
- $final += PaliSentence::whereIns(['book', 'paragraph', 'word_begin', 'word_end'], $sentences)
- ->sum('length');
- $sentences = [];
- $percent = intval($count * 100 / count($nissayaSentences));
- $this->info("[{$percent}] {$final}");
- }
- $count++;
- }
- }
- $this->info($type . '=' . $pali . '=' . $final);
- $output[] = ['type' => $type, 'total' => $pali, 'final' => $final];
- }
- Cache::put('/statistics/nissaya/cover', $output, 48 * 3600);
- return 0;
- }
- }
|