Просмотр исходного кода

Merge pull request #1825 from visuddhinanda/laravel

add SentencesInChapterController
visuddhinanda 2 лет назад
Родитель
Сommit
830187aead

+ 2 - 2
app/Console/Commands/ImportArticle.php

@@ -12,10 +12,10 @@ class ImportArticle extends Command
 {
     /**
      * The name and signature of the console command.
-     * php artisan import:article --token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJuYmYiOjE2OTc3Mjg2ODUsImV4cCI6MTcyOTI2NDY4NSwidWlkIjoiYmE1NDYzZjMtNzJkMS00NDEwLTg1OGUtZWFkZDEwODg0NzEzIiwiaWQiOjR9.fiXhnY2LczZ9kKVHV0FfD3AJPZt-uqM5wrDe4EhToVexdd007ebPFYssZefmchfL0mx9nF0rgHSqjNhx4P0yDA --studio=visuddhinanda --anthology=eb9e3f7f-b942-4ca4-bd6f-b7876b59a523
+     * php artisan import:article --studio=visuddhinanda --anthology=eb9e3f7f-b942-4ca4-bd6f-b7876b59a523 --token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJuYmYiOjE2OTc3Mjg2ODUsImV4cCI6MTcyOTI2NDY4NSwidWlkIjoiYmE1NDYzZjMtNzJkMS00NDEwLTg1OGUtZWFkZDEwODg0NzEzIiwiaWQiOjR9.fiXhnY2LczZ9kKVHV0FfD3AJPZt-uqM5wrDe4EhToVexdd007ebPFYssZefmchfL0mx9nF0rgHSqjNhx4P0yDA
      * @var string
      */
-    protected $signature = 'import:article {--token=} {--studio=} {--anthology=}';
+    protected $signature = 'import:article {--studio=} {--anthology=} {--token=}';
 
     /**
      * The console command description.

+ 5 - 4
app/Http/Controllers/CorpusController.php

@@ -395,6 +395,9 @@ class CorpusController extends Controller
         if(!$chapter){
             return $this->error("no data");
         }
+        $paraFrom = $sentId[1];
+        $paraTo = $sentId[1]+$chapter->chapter_len-1;
+
         if(empty($chapter->toc)){
             $this->result['title'] = "unknown";
         }else{
@@ -403,8 +406,6 @@ class CorpusController extends Controller
             $this->result['path'] = json_decode($chapter->path);
         }
 
-        $paraFrom = $sentId[1];
-        $paraTo = $sentId[1]+$chapter->chapter_len-1;
         //获取标题
         $heading = PaliText::select(["book","paragraph","level"])
                             ->where('book',$sentId[0])
@@ -460,7 +461,7 @@ class CorpusController extends Controller
                                 ->orderBy('paragraph')
                                 ->value('paragraph');
         $between = $nextChapter - $sentId[1];
-        //输出子目录
+        //查找子目录
         $chapterLen = $chapter->chapter_len;
         $toc = PaliText::where('book',$sentId[0])
                         ->whereBetween('paragraph',[$paraFrom+1,$paraFrom+$chapterLen-1])
@@ -481,7 +482,7 @@ class CorpusController extends Controller
                     //没有子目录 全部输出
                 }
             }else{
-                //章节小。全部输出 不输出章节
+                //章节小。全部输出 不输出子目录
                 $toc = [];
             }
         }

+ 118 - 0
app/Http/Controllers/SentencesInChapterController.php

@@ -0,0 +1,118 @@
+<?php
+/**
+ * 输出某章节的句子列表。算法跟随章节显示功能
+ */
+namespace App\Http\Controllers;
+
+use App\Models\PaliText;
+use App\Models\PaliSentence;
+use Illuminate\Http\Request;
+
+class SentencesInChapterController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index(Request $request)
+    {
+        //
+        $book = $request->get('book');
+        $para = $request->get('para');
+        $chapter = PaliText::where('book',$book)
+                           ->where('paragraph',$para)
+                           ->first();
+        if(!$chapter){
+            return $this->error("no chapter data");
+        }
+        $paraFrom = $para;
+        $paraTo = $para+$chapter->chapter_len-1;
+
+        //1. 计算 标题和下一级第一个标题之间 是否有间隔
+        $nextChapter =  PaliText::where('book',$book)
+                        ->where('paragraph',">",$para)
+                        ->where('level','<',8)
+                        ->orderBy('paragraph')
+                        ->value('paragraph');
+        $between = $nextChapter - $para;
+        //查找子目录
+        $chapterLen = $chapter->chapter_len;
+        $toc = PaliText::where('book',$book)
+                ->whereBetween('paragraph',[$paraFrom+1,$paraFrom+$chapterLen-1])
+                ->where('level','<',8)
+                ->orderBy('paragraph')
+                ->select(['book','paragraph','level','toc'])
+                ->get();
+
+        if($between > 1){
+        //有间隔
+            $paraTo = $nextChapter - 1;
+        }else{
+            if($chapter->chapter_strlen>2000){
+                if(count($toc)>0){
+                    //有子目录只输出标题和目录
+                    $paraTo = $paraFrom;
+                }else{
+                    //没有子目录 全部输出
+                }
+            }else{
+                //章节小。全部输出 不输出子目录
+                $toc = [];
+            }
+        }
+
+        $sent = PaliSentence::where('book',$book)
+                            ->whereBetween('paragraph',[$paraFrom,$paraTo])
+                            ->select(['book','paragraph','word_begin','word_end'])
+                            ->orderBy('paragraph')
+                            ->orderBy('word_begin')
+                            ->get();
+        return $this->ok(['rows'=>$sent,'count'=>count($sent)]);
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  \App\Models\PaliText  $paliText
+     * @return \Illuminate\Http\Response
+     */
+    public function show(PaliText $paliText)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\PaliText  $paliText
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, PaliText $paliText)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\PaliText  $paliText
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(PaliText $paliText)
+    {
+        //
+    }
+}

+ 2 - 0
routes/api.php

@@ -82,6 +82,7 @@ use App\Http\Controllers\SystemTermController;
 use App\Http\Controllers\TermExportController;
 use App\Http\Controllers\NavArticleController;
 use App\Http\Controllers\NavCSParaController;
+use App\Http\Controllers\SentencesInChapterController;
 
 /*
 |--------------------------------------------------------------------------
@@ -219,6 +220,7 @@ Route::group(['prefix' => 'v2'],function(){
     Route::apiResource('nav-article',NavArticleController::class);
     Route::apiResource('nav-cs-para',NavCSParaController::class);
     Route::apiResource('book-title',BookTitleController::class);
+    Route::apiResource('sentences-in-chapter',SentencesInChapterController::class);
 
     Route::get('download/{type1}/{type2}/{uuid}/{filename}', function ($type1,$type2,$uuid,$filename) {
         header("Content-Type: {$type1}/{$type1}");