Closed lld2001 closed 2 years ago
pyim 的全拼输入法, 第一个位置是预留的,剩下的词就通过count大小来排序,型码输入法也可以搞成这样,但我不知道合理不合理,因为我不了解
因为以前有人反映过,不希望词的位置频繁变动。
这个好像在issue里看过下。
那我先在我这种想法下用一段时间试试。
我感觉你是想导出你输入过的词,并且这个词没有在已有词库中存在,如果这样的话,你应该自定义导出功能,这样影响更小
型码像五笔本身重码低,如果本身在第一个位置也统计词频,可能会有点偏。
统计count 是一回事,排序是另外一回事,排序可以基于 count,也可以基于其它规则
我觉得理想状况是:固定第一个词,其他词按统计的词频进行排序,也就是从第二个位置开始按词频排列词。
我觉得理想状况是:固定第一个词,其他词按统计的词频进行排序,也就是从第二个位置开始按词频排列词。
拼音输入法就是这么搞得,其实我觉得第一个词如何固定更重要,目前使用的方法还是比较粗糙的
五笔简单,第一个词按词库来就行,所以前面我才说不希望第一个词更新词频
五笔简单,第一个词按词库来就行,所以前面我才说不希望第一个词更新词频
意思是,第一个词按词库来,剩下的按 count 排序?
嗯。但重码时字的排序在词的前面要好点。
我更新了,你可以试试,另外型码是支持联输的, 可以试试:
(setq pyim-autoselector nil)
不知是作了什么改变?我有针对性试试。看着好像前面那里的逻辑删除,只留下 (pyim-process-create-word (pyim-process-get-outcome)
了
主要更改在这块:
(defun pyim-candidates-create:xingma (imobjs scheme-name &optional async)
"`pyim-candidates-create' 处理五笔仓颉等形码输入法的函数."
(unless async
(let (result)
(dolist (imobj imobjs)
(let* ((codes (pyim-codes-create imobj scheme-name))
(last-code (car (last codes)))
(other-codes (remove last-code codes))
output prefix)
;; 如果 wubi/aaaa -> 工 㠭;wubi/bbbb -> 子 子子孙孙;wubi/cccc 又 叕;
;; 用户输入为: aaaabbbbcccc
;; 那么:
;; 1. codes => ("wubi/aaaa" "wubi/bbbb" "wubi/cccc")
;; 2. last-code => "wubi/cccc"
;; 3. other-codes => ("wubi/aaaa" "wubi/bbbb")
;; 4. prefix => 工子
(when other-codes
(setq prefix (mapconcat
(lambda (code)
(car (pyim-dcache-get code '(code2word))))
other-codes "")))
;; 5. output => 工子又 工子叕
(setq output
;; NOTE: 下面这种策略是否合理?
;; 1. 第一个词选择公共词库中的第一个词。
;; 2. 剩下的分成字和词,字优先排,字和词各按 count 大小排序。
(let* ((first-word (car (pyim-dcache-get last-code '(code2word))))
(all-words (pyim-dcache-get last-code '(icode2word code2word shortcode2word)))
(chars (cl-remove-if (lambda (word)
(> (length word) 1))
all-words)))
(mapcar (lambda (word)
(concat prefix word))
;; NOTE: 形码输入法的第一个词选择公共词库中的第一个词,
;; 剩下的词按照词条 count 大小排序。这种策略是否合理?
`(,first-word
,@(pyim-dcache-call-api 'sort-words chars)
,@(pyim-dcache-call-api 'sort-words all-words)))))
(setq output (remove "" (or output (list prefix))))
(setq result (append result output))))
(when (car result)
(delete-dups result)))))
型码是支持联输的
我看了下现在 pyim-autoselector
的设置,目前是:(pyim-autoselector-xingma)
。
用五笔一般是4码自动上屏,5码自动取消,现在这个设置正好,所以不存在“aaaabbbbcccc”这么长的码。
现在这种字优先于词的方案貌似也有些问题:把很多生僻字排朝常用词的前了。
那干脆字和词不分开排了?
所以不存在“aaaabbbbcccc”这么长的码
(setq pyim-autoselector nil) 的时候就需要处理。
嗯,固定第一个,其他按词频来,估计会好点。
现在这种字优先于词的方案貌似也有些问题:把很多生僻字排朝常用词的前了。
或许我们可以选择用户曾经输入过的字?
但感觉词频也有些些偏差,四码唯一导致很多字词的频率会很高。
或许我们可以选择用户曾经输入过的字?
这是个好思路。
这是个好思路。
试试看,我先排常用字了,常用字在这里的定义是用户输入次数超过30次的汉字
好的,像你说的排字词这块有点复杂,不知道有没有相关理论研究。我试用段时间再来反馈。
好的,像你说的排字词这块有点复杂,不知道有没有相关理论研究。我试用段时间再来反馈。
没有研究过 :-)
发现一个bug,四码唯一上屏时,不会更新词频了。比如:时间(jfuj)这个词。
我是输入时,查看 pyim-dhashcache-iword2count
这个变量的变化。
应该可以了
嗯,可以正常更新词频了。
搜了下 issue,多台机器之间同步个人词库没有找到好的方法。有个想法,不知道可不可行,请帮忙看下: