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

:sparkles: 导出逐词解析数据

visuddhinanda 3 лет назад
Родитель
Сommit
3be9cc96a3
4 измененных файлов с 163 добавлено и 0 удалено
  1. 121 0
      app/Http/Controllers/ExportWbwController.php
  2. 36 0
      resources/views/export_wbw.blade.php
  3. 3 0
      routes/api.php
  4. 3 0
      routes/web.php

+ 121 - 0
app/Http/Controllers/ExportWbwController.php

@@ -0,0 +1,121 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\Wbw;
+use App\Models\WbwBlock;
+use Illuminate\Http\Request;
+
+class ExportWbwController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index(Request $request)
+    {
+        //
+        $sent = explode("\n",$request->get("sent"));
+        $output = [];
+        foreach ($sent as $key => $value) {
+            # code...
+            $sent = [];
+            $value = trim($value);
+            $sentId = explode("-",$value);
+            //先查wbw block 拿到block id
+            $block = WbwBlock::where('book_id',$sentId[0])
+                        ->where('paragraph',$sentId[1])
+                        ->select('uid')
+                        ->where('channel_uid',$request->get("channel"))->first();
+            if(!$block){
+                continue;
+            }
+            $wbwdata = Wbw::where('book_id',$sentId[0])
+                        ->where('paragraph',$sentId[1])
+                        ->where('wid','>=',$sentId[2])
+                        ->where('wid','<=',$sentId[3])
+                        ->where('block_uid',$block->uid)
+                        ->get();
+            $sent['sid']=$value;
+            $sent['data']=[];
+            foreach ($wbwdata as  $wbw) {
+                # code...
+                $data = str_replace("&nbsp;",' ',$wbw->data);
+                $data = str_replace("<br>",' ',$data);
+
+                $xmlString = "<root>" . $data . "</root>";
+                try{
+                    $xmlWord = simplexml_load_string($xmlString);
+                }catch(Exception $e){
+                    continue;
+                }
+
+                $wordsList = $xmlWord->xpath('//word');
+                foreach ($wordsList as $word) {
+                    $type = $word->type->__toString();
+                    $style = $word->style->__toString();
+                    if($type !== '.ctl.' && $style !== 'note'){
+                        $sent['data'][]=[
+                        'pali'=>$word->real->__toString(),
+                    'mean' => $word->mean->__toString(),
+                    'type' => ltrim($type,'.'),
+                    'grammar' => ltrim(str_replace('$.',',',$word->gramma->__toString()),'.') ,
+                    'parent' => $word->parent->__toString(),
+                    'factors' => $word->org->__toString(),
+                    'factormeaning' => $word->om->__toString()
+                    ];
+                    }
+
+                }
+            }
+            $output[]=$sent;
+        }
+        return view('export_wbw',['sentences' => $output] );
+    }
+
+    /**
+     * 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\Wbw  $wbw
+     * @return \Illuminate\Http\Response
+     */
+    public function show(Wbw $wbw)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\Wbw  $wbw
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, Wbw $wbw)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\Wbw  $wbw
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(Wbw $wbw)
+    {
+        //
+    }
+}

+ 36 - 0
resources/views/export_wbw.blade.php

@@ -0,0 +1,36 @@
+<html>
+    <head>
+        <title>export word by word data</title>
+    </head>
+    <body>
+        <div class="container">
+        <form action="/api/v2/export_wbw" method="POST">
+        channel id:<br>
+        <input type="text" name="channel" value="" />
+        <br>
+        sentence list:<br>
+        <textarea type="text" name="sent" value="Mouse"></textarea>
+        <br><br>
+        <input type="submit" value="Submit">
+        </form>
+        </div>
+
+        @foreach ($sentences as $sent)
+            <h3>{{ $sent["sid"] }}</h3>
+            <div>
+            @foreach ($sent["data"] as $wbw)
+            <b>{{$wbw["pali"]}}</b>
+            <span>{{$wbw["type"]}}</span>
+            <span>{{$wbw["grammar"]}}</span>
+            <span> of </span>
+            <span>{{$wbw["parent"]}}</span>
+            <span>{{$wbw["mean"]}}</span>
+            <span style="color:gray;">
+            <span>({{$wbw["factors"]}}</span>
+            <span>{{$wbw["factormeaning"]}})</span>
+            </span>
+            @endforeach
+            </div>
+        @endforeach
+    </body>
+</html>

+ 3 - 0
routes/api.php

@@ -22,6 +22,7 @@ use App\Http\Controllers\ArticleController;
 use App\Http\Controllers\GroupController;
 use App\Http\Controllers\CorpusController;
 use App\Http\Controllers\ArticleProgressController;
+use App\Http\Controllers\ExportWbwController;
 
 /*
 |--------------------------------------------------------------------------
@@ -71,6 +72,8 @@ Route::group(['prefix' => 'v2'],function(){
     Route::get('corpus_sent/{type}/{id}/{mode}',[CorpusController::class,'showSentences']);
     Route::apiResource('article-progress',ArticleProgressController::class);
 
+    Route::post('export_wbw',[ExportWbwController::class,'index']);
+
 
     Route::get('guide/{lang}/{file}', function ($lang,$file) {
         $filename = public_path("app/users_guide/{$lang}/{$file}.md");

+ 3 - 0
routes/web.php

@@ -31,4 +31,7 @@ Route::get('/home/{name}', function ($name) {
 Route::get('/api/sentence/progress/image', [SentenceInfoController::class,'showprogress']);
 Route::get('/api/sentence/progress/daily/image', [SentenceInfoController::class,'showprogressdaily']);
 Route::get('/wbwanalyses', [WbwAnalysisController::class,'index']);
+Route::get('/export/wbw', function (){
+    return view('export_wbw',['sentences' => []]);
+});