Browse Source

:art: formatting

visuddhinanda 1 year ago
parent
commit
200a2e948b
1 changed files with 75 additions and 70 deletions
  1. 75 70
      api-v8/app/Console/Commands/UpgradeCommunityTerm.php

+ 75 - 70
api-v8/app/Console/Commands/UpgradeCommunityTerm.php

@@ -44,27 +44,27 @@ class UpgradeCommunityTerm extends Command
      */
     public function handle()
     {
-        if(\App\Tools\Tools::isStop()){
+        if (\App\Tools\Tools::isStop()) {
             return 0;
         }
         $lang = strtolower($this->argument('lang'));
-        $langFamily = explode('-',$lang)[0];
+        $langFamily = explode('-', $lang)[0];
         $localTerm = ChannelApi::getSysChannel("_community_term_{$lang}_");
-        if(!$localTerm){
+        if (!$localTerm) {
             return 1;
         }
 
         $channelId = ChannelApi::getSysChannel('_System_Pali_VRI_');
-        if($channelId === false){
+        if ($channelId === false) {
             $this->error('no channel');
             return 1;
         }
-        $table = DhammaTerm::select(['word','tag'])
-                            ->whereIn('language',[$this->argument('lang'),$lang,$langFamily])
-                            ->groupBy(['word','tag']);
+        $table = DhammaTerm::select(['word', 'tag'])
+            ->whereIn('language', [$this->argument('lang'), $lang, $langFamily])
+            ->groupBy(['word', 'tag']);
 
-        if($this->argument('word')){
-            $table = $table->where('word',$this->argument('word'));
+        if ($this->argument('word')) {
+            $table = $table->where('word', $this->argument('word'));
         }
         $words = $table->get();
         $bar = $this->output->createProgressBar(count($words));
@@ -74,49 +74,50 @@ class UpgradeCommunityTerm extends Command
              * 1. 找到最常见的意思
              * 2. 找到分数最高的
              */
-            $bestNote = "" ;
-            $allTerm = DhammaTerm::where('word',$word->word)
-                                ->where('tag',$word->tag)
-                                ->whereIn('language',[$this->argument('lang'),$lang,$langFamily])
-                                ->get();
+            $bestNote = "";
+            $allTerm = DhammaTerm::where('word', $word->word)
+                ->where('tag', $word->tag)
+                ->whereIn('language', [$this->argument('lang'), $lang, $langFamily])
+                ->get();
             $score = [];
+            //$term_exp = [];
             foreach ($allTerm as $key => $term) {
-                //经验值
-                $exp = UserOperationDaily::where('user_id',$term->editor_id)
-                                        ->where('date_int','<=',date_timestamp_get(date_create($term->updated_at))*1000)
-                                        ->sum('duration');
-                $iExp = (int)($exp/1000);
-                $noteStrLen = $term->note? mb_strlen($term->note,'UTF-8'):0;
+                //获取经验值
+                $exp = UserOperationDaily::where('user_id', $term->editor_id)
+                    ->where('date_int', '<=', date_timestamp_get(date_create($term->updated_at)) * 1000)
+                    ->sum('duration');
+                $iExp = (int)($exp / 1000);
+                $noteStrLen = $term->note ? mb_strlen($term->note, 'UTF-8') : 0;
                 $paliStrLen = 0;
                 $tranStrLen = 0;
                 $noteWithoutPali = "";
-                if($term->note && !empty(trim($term->note))){
+                if ($term->note && !empty(trim($term->note))) {
                     //计算note得分
                     //查找句子模版
                     $pattern = "/\{\{[0-9].+?\}\}/";
                     //获取去掉句子模版的剩余部分
-                    $noteWithoutPali = preg_replace($pattern,"",$term->note);
+                    $noteWithoutPali = preg_replace($pattern, "", $term->note);
                     $sentences = [];
-                    $iSent = preg_match_all($pattern,$term->note,$sentences);
-                    if($iSent>0){
+                    $iSent = preg_match_all($pattern, $term->note, $sentences);
+                    if ($iSent > 0) {
                         foreach ($sentences[0] as  $sentence) {
-                            $sentId = explode("-",trim($sentence,"{}"));
-                            if(count($sentId) === 4){
-                                $hasTran = Sentence::where('book_id',$sentId[0])
-                                                    ->where('paragraph',$sentId[1])
-                                                    ->where('word_start',$sentId[2])
-                                                    ->where('word_end',$sentId[3])
-                                                    ->exists();
+                            $sentId = explode("-", trim($sentence, "{}"));
+                            if (count($sentId) === 4) {
+                                $hasTran = Sentence::where('book_id', $sentId[0])
+                                    ->where('paragraph', $sentId[1])
+                                    ->where('word_start', $sentId[2])
+                                    ->where('word_end', $sentId[3])
+                                    ->exists();
 
-                                $sentLen = Sentence::where('book_id',$sentId[0])
-                                                    ->where('paragraph',$sentId[1])
-                                                    ->where('word_start',$sentId[2])
-                                                    ->where('word_end',$sentId[3])
-                                                    ->where("channel_uid", $channelId)
-                                                    ->value('strlen');
-                                if($sentLen){
+                                $sentLen = Sentence::where('book_id', $sentId[0])
+                                    ->where('paragraph', $sentId[1])
+                                    ->where('word_start', $sentId[2])
+                                    ->where('word_end', $sentId[3])
+                                    ->where("channel_uid", $channelId)
+                                    ->value('strlen');
+                                if ($sentLen) {
                                     $paliStrLen += $sentLen;
-                                    if($hasTran){
+                                    if ($hasTran) {
                                         $tranStrLen += $sentLen;
                                     }
                                 }
@@ -124,45 +125,49 @@ class UpgradeCommunityTerm extends Command
                         }
                     }
                 }
-                //计算该术语总得分
-                $score["{$key}"] = $iExp*$noteStrLen;
+                //计算该术语note的总得分
+                $score["{$key}"] = $iExp * $noteStrLen;
+                //$term_exp["{$key}"] = $iExp;
+                //$updated_time["{$key}"] = $term->updated_at 先提取,具体如何使用待定
+
             }
 
+            //需要过滤掉system_term的数量,把count(*)替换为经验值加合作为基础得分,(基础经验得分之和转化为标准活动周,再加上最近的更新时间,为最终得分)
             $hotMeaning = DhammaTerm::selectRaw('meaning,count(*) as co')
-                        ->where('word',$word->word)
-                        ->whereIn('language',[$this->argument('lang'),$lang,$langFamily])
-                        ->groupBy('meaning')
-                        ->orderBy('co','desc')
-                        ->first();
-            if($hotMeaning){
+                ->where('word', $word->word)
+                ->whereIn('language', [$this->argument('lang'), $lang, $langFamily])
+                ->groupBy('meaning')
+                ->orderBy('co', 'desc')
+                ->first();
+            if ($hotMeaning) {
                 $bestNote = "";
-                if(count($score)>0){
+                if (count($score) > 0) {
                     arsort($score);
                     $bestNote = $allTerm[(int)key($score)]->note;
                 }
 
-                $term = DhammaTerm::where('channal',$localTerm)->firstOrNew(
-                        [
-                            "word" => $word->word,
-                            "tag" => $word->tag,
-                            "channal" => $localTerm,
-                        ],
-                        [
-                            'id' =>app('snowflake')->id(),
-                            'guid' =>Str::uuid(),
-                            'word_en' =>Tools::getWordEn($word->word),
-                            'meaning' => '',
-                            'language' => $this->argument('lang'),
-                            'owner' => config("mint.admin.root_uuid"),
-                            'editor_id' => 0,
-                            'create_time' => time()*1000,
-                        ]
-                    );
-                    $term->tag = $word->tag;
-                    $term->meaning = $hotMeaning->meaning;
-                    $term->note = $bestNote;
-                    $term->modify_time = time()*1000;
-                    $term->save();
+                $term = DhammaTerm::where('channal', $localTerm)->firstOrNew(
+                    [
+                        "word" => $word->word,
+                        "tag" => $word->tag,
+                        "channal" => $localTerm,
+                    ],
+                    [
+                        'id' => app('snowflake')->id(),
+                        'guid' => Str::uuid(),
+                        'word_en' => Tools::getWordEn($word->word),
+                        'meaning' => '',
+                        'language' => $this->argument('lang'),
+                        'owner' => config("mint.admin.root_uuid"),
+                        'editor_id' => 0,
+                        'create_time' => time() * 1000,
+                    ]
+                );
+                $term->tag = $word->tag;
+                $term->meaning = $hotMeaning->meaning;
+                $term->note = $bestNote;
+                $term->modify_time = time() * 1000;
+                $term->save();
             }
             $bar->advance();
         }