visuddhinanda 2 lat temu
rodzic
commit
cef2e5d641
1 zmienionych plików z 93 dodań i 0 usunięć
  1. 93 0
      app/Console/Commands/ExportFtsPali.php

+ 93 - 0
app/Console/Commands/ExportFtsPali.php

@@ -0,0 +1,93 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use App\Http\Api\DictApi;
+use App\Models\UserDict;
+
+class ExportFtsPali extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'export:fts.pali';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = '导出全文搜索用的巴利语词汇表';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return int
+     */
+    public function handle()
+    {
+        //irregular
+        $dictId = ['4d3a0d92-0adc-4052-80f5-512a2603d0e8'];
+         //regular
+        $dictId[] = DictApi::getSysDict('system_regular');
+        $long = ["ā","ī","ū"];
+        $path = storage_path('app/export/fts');
+        if(!is_dir($path)){
+            $res = mkdir($path,0700,true);
+            if(!$res){
+                Log::error('mkdir fail path='.$exportDir);
+                return 1;
+            }
+        }
+        $fp = fopen($path.'/pali.syn','w') or die("Unable to open file!");
+        $count=0;
+        foreach ($dictId as $key => $value) {
+            $words = UserDict::where('dict_id',$value)
+                             ->select('word')
+                             ->groupBy('word')->cursor();
+            $this->info('word count='.count($words));
+            foreach ($words as $key => $word) {
+                $count++;
+                if($count % 1000 === 0){
+                    $this->info($count);
+                }
+                $parent = UserDict::where('dict_id',$value)
+                             ->where('word',$word->word)
+                             ->selectRaw('parent,char_length("parent")')
+                             ->groupBy('parent')->orderBy('char_length','asc')->first();
+
+                if($parent && !empty($parent->parent)){
+                    $end = mb_substr($parent->parent,-1,null,"UTF-8");
+                    if(in_array($end,["ā","ī","ū"])){
+                        $head = mb_substr($parent->parent,0,mb_strlen($parent->parent)-1,"UTF-8");
+                        $newEnd = str_replace(["ā","ī","ū"],["a","i","u"],$end);
+                        $parentWord = $head.$newEnd;
+
+                    }else{
+                        $parentWord = $parent->parent;
+                    }
+                    fwrite($fp, $word->word.' '.$parentWord.PHP_EOL);
+                }else{
+                    $this->error('word no parent word='.$word->word);
+                }
+            }
+        }
+        fclose($fp);
+
+
+        return 0;
+    }
+}