summaryService = $summaryService; } /** * Execute the console command. * * @return int */ public function handle() { $book = $this->argument('book'); $paragraph = $this->option('para'); if ($this->option('test')) { $this->isTest = true; $this->info('test mode'); } if ((int)$book === 0) { $maxBookId = PaliText::max('book'); $booksId = range(1, $maxBookId); } else { $booksId = [$book]; } foreach ($booksId as $key => $bookId) { $this->summarize($bookId, $paragraph); } return 0; } /** * Index Pali paragraphs for a given book. * * @param int $book * @return int */ protected function summarize($book, $paragraph = null) { $this->info("Starting to index paragraphs for book: $book"); $total = 0; if ($paragraph) { $paragraphs = PaliText::where('book', $book) ->where('paragraph', $paragraph) ->orderBy('paragraph')->cursor(); } else { $paragraphs = PaliText::where('book', $book) ->orderBy('paragraph')->cursor(); } $commentaryId = ''; $chapterContent = array(); $chapterStart = 0; $chapterEnd = 0; foreach ($paragraphs as $key => $para) { $total++; $content = $para->text; if ($para->level < 8) { $start = $para->paragraph; $end = $start + $para->chapter_len - 1; $subChapter = PaliText::whereBetween('paragraph', [$start, $end]) ->where('level', '<', 8) ->count(); if ($subChapter === 0) { $chapterStart = $start; $chapterEnd = $end; $chapterContent = []; } else { $chapterStart = 0; $chapterEnd = 0; } } else { $summary = $this->summaryService->summarize($para->text); $this->info("{$para['book']}-[{$para['paragraph']}]-{$summary}"); if ($chapterStart !== 0) { $chapterContent[] = $summary; } if ($para->paragraph === $chapterEnd) { $chapterSummary = $this->summaryService->summarize(implode(' ', $chapterContent)); $this->info("{$para['book']}-[{$chapterStart}]-{$chapterSummary}"); $chapterStart = 0; $chapterEnd = 0; $chapterContent = []; } } } $this->info("Successfully indexed $total paragraphs for book: $book"); Log::info("Indexed $total paragraphs for book: $book"); return 0; } }