emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/pyim 234ea39867 1/2: 优化形码输入法的候选词排序方式.


From: ELPA Syncer
Subject: [elpa] externals/pyim 234ea39867 1/2: 优化形码输入法的候选词排序方式.
Date: Sun, 2 Jan 2022 02:57:46 -0500 (EST)

branch: externals/pyim
commit 234ea3986786c9ffa23c0af566de8be1c10dd280
Author: Feng Shu <tumashu@163.com>
Commit: Feng Shu <tumashu@163.com>

    优化形码输入法的候选词排序方式.
    
            * pyim-candidates.el (pyim-candidates-get-chief)
            (pyim-candidates-create:xingma): 优化形码输入法的候选词排序方式。
---
 pyim-candidates.el | 45 ++++++++++++++++++++++++---------------------
 1 file changed, 24 insertions(+), 21 deletions(-)

diff --git a/pyim-candidates.el b/pyim-candidates.el
index a6a69ce69e..34ee4509e9 100644
--- a/pyim-candidates.el
+++ b/pyim-candidates.el
@@ -89,20 +89,28 @@ IMOBJS 获得候选词条。"
          (words100 (cl-subseq words 0 (min 100 length)))
          ;; NOTE: 10个词大概1句话。
          (words10 (cl-subseq words 0 (min 10 length))))
-    (if (equal class 'xingma)
-        ;; 形码输入法选择从词库里面获取到的第一个词条。
-        (car common-words)
+    (cond
+     ((equal class 'xingma)
       (or
-       ;; 最近输入的10个词中出现一次以上。
-       (cl-find-if (lambda (word)
-                     (> (cl-count word words10 :test #'equal) 1))
-                   personal-words)
-       ;; 最近输入的100个词中出现过三次以上。
-       (cl-find-if (lambda (word)
-                     (> (cl-count word words100 :test #'equal) 3))
-                   personal-words)
-       ;; 个人词条中的第一个词。
-       (car personal-words)))))
+       ;; 如果从公共词库里面获取到的第一个词条是汉字,就选择它。
+       (when (= (length (car common-words)) 1)
+         (car common-words))
+       ;; 从个人词库里面按排列的先后顺序,获取一个汉字。
+       (cl-find-if
+        (lambda (word)
+          (= (length word) 1))
+        personal-words)))
+     (t (or
+         ;; 最近输入的10个词中出现一次以上。
+         (cl-find-if (lambda (word)
+                       (> (cl-count word words10 :test #'equal) 1))
+                     personal-words)
+         ;; 最近输入的100个词中出现过三次以上。
+         (cl-find-if (lambda (word)
+                       (> (cl-count word words100 :test #'equal) 3))
+                     personal-words)
+         ;; 个人词条中的第一个词。
+         (car personal-words))))))
 
 (defun pyim-candidates-create:xingma (imobjs scheme-name &optional async)
   "`pyim-candidates-create' 处理五笔仓颉等形码输入法的函数."
@@ -136,20 +144,15 @@ IMOBJS 获得候选词条。"
                 ;; NOTE: 下面这种策略是否合理?
                 ;; 1. 第一个词选择公共词库中的第一个词。
                 ;; 2. 剩下的分成常用字和词,常用字优先排,字和词各按 count 大小排序。
-                (let* ((personal-words (pyim-dcache-get last-code 
'(icode2word)))
+                (let* ((personal-words
+                        (pyim-candidates-sort
+                         (pyim-dcache-get last-code '(icode2word))))
                        (common-words (pyim-dcache-get last-code '(code2word)))
                        (chief-word (pyim-candidates-get-chief scheme-name 
personal-words common-words))
-                       (chars (cl-remove-if (lambda (word)
-                                              ;; NOTE: 
常用字在这里的定义是用户输入次数超过30次的汉字,30这个数字的选取是非常主观的,也许有
-                                              ;; 更合理的取值。
-                                              (or (> (length word) 1)
-                                                  (< (or (car (pyim-dcache-get 
word 'iword2count)) 0) 30)))
-                                            (pyim-dcache-get last-code 
'(icode2word))))
                        (all-words (pyim-dcache-get last-code '(icode2word 
code2word shortcode2word))))
                   (mapcar (lambda (word)
                             (concat prefix word))
                           `(,chief-word
-                            ,@(pyim-candidates-sort chars)
                             ,@(pyim-candidates-sort all-words)))))
           (setq output (remove "" (or output (list prefix))))
           (setq result (append result output))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]