Closed lld2001 closed 2 years ago
最近输入的词尽快排前面,你可以看看chief那个函数,里面拼音输入法就有一些类似的策略,虽然是我主观猜测的,但也可以借鉴,其实合理定义“最近”和”尽快“,才是重要的事情,至于你说的遗忘曲线,我没太理解是啥意思
比如:中文,中方 这两个词,编码都是:khyy。可能有一段时间经常输入“中文”,导致其词频很高,现在要经常输入“中方”,要排在前面就得等词频超过。我的意思是,输入一个词后,将其它重码词的频降低,也即减掉掉 30%。
我看最新的提交是记录最近100个字词,来实现”最近“。
如果没有重码,似乎没有必要记录。
我看最新的提交是记录最近100个字词,来实现”最近“。
是的,当然这100个词也是我估计的,哈哈
我觉得是不是基于重码来考虑最近好点
基于重码考虑最近是什么意思?
也就是我说的,调减其他重码词的词频。
count肯定不能减,不能说你输入这词,其它词的输入次数就降低了,这个逻辑上是不合理的,我们只能优化排序算法,加入权重机制,降低count在排序中所占的分量
但这个权重怎么定,确实是一个值得考虑的事情
如果count不变化,可以考虑 同一重码
的词都放入队列中,这样在前面的词权重高点,依次递减权重。
可以考虑 同一重码 的词都放入队列中
这个队列就是personal-words, 要实现你说的这个功能,难度不大,只需要调整sort函数就可以了,不过,怎么定权重呢?比如第一位系数是多少,第二位是多少?
可以考虑 同一重码 的词都放入队列中
这个队列就是personal-words, 要实现你说的这个功能,难度不大,只需要调整sort函数就可以了,不过,怎么定权重呢?比如第一位系数是多少,第二位是多少?
也许可以按斐波那契数列来定。没研究过这方面。
你说的这个功能,框架我已经搭好了,现在就差寻找合适的权重列表了,看master代码就明白了
看了下,觉得既然是权重,我想权重和加起来要为1。
最近输入的权重大,最早输入的权重低。这种排序方法应该是个指数函数。
我说的按 斐波那契数列
来定,因为它恰好就是一个指数函数,在自然中、计算中都比较常见,算法也较简单。
同一重码下:比如有5个重码,按斐波那契数列[1,2,3,5,8](首项特殊舍弃?),倒置下:[8,5,3,2,1],Sum=19,则权重分别为:[8/19, 5/19, 3/19, 2/19, 1/19]。 根据这个权重再和 count 之积计算排序值。
网上查了下,有些算法比较复杂,还有衰减算法之类的。我想排序算法能够考虑:输入顺序、词频两个因素,并且权重函数对输入顺序是指数函数,效果应该比单纯比较词频好。
我觉得没必要加起来是一,我们只想让以前输入过得词更容易排在前面,如果要加起来为1,那么必须要根据候选词列表的长度计算每个位置上的权重,计算啰嗦。
在 2022-01-03 09:49:23,lld2001 @.***> 写道:
看了下,觉得既然是权重,我想权重和加起来要为1。
最近输入的权重大,最早输入的权重低。这种排序方法应该是个指数函数。
我说的按 斐波那契数列 来定,因为它恰好就是一个指数函数,在自然中、计算中都比较常见,算法也较简单。
同一重码下:比如有5个重码,按斐波那契数列[1,2,3,5,8](首项特殊舍弃?),倒置下:[8,5,3,2,1],Sum=19,则权重分别为:[8/19, 5/19, 3/19, 2/19, 1/19]。 根据这个权重再和 count 之积计算排序值。
— Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android. You are receiving this because you commented.Message ID: @.***>
或许我应该用得分而不是权重,得分不存在加起来必须为1的问题
或者用factor, 系数
@lld2001 我做了一下新的尝试,现在pyim会保存最近7天每天的词频,然后按照你说的方法算权重,现在代码在count-log分支,你可以试试,不知道效果怎么样
好棒,我用用看。现在已经很好用了,打字几乎都在emacs内。
@lld2001 已经合并到 master
词频更新,我的理解是为了重码时,最近输入的词排在前面。现在的是输入一个词,词频加1。
我想能不能在更新词频时,“遗忘”重码的其他词的部分词频,比如根据遗忘曲线。或者简单点,根据黄金分割率,如某个词的词频为10,就 10*0.618=6,为最新词频,其余重码的词也作类似处理。
这样的目的是让最近输入的词尽快排前面。