You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
然后调用formula_p来更新 weight,其中 s=0,kM是一个较大的数字(约为 200.5)。这里由于u变为负数,m 变得更小了。不过由于 pow((1 - exp(-t / 10000)), 10) (图像在 t>0 的情况下类似于 sigmoid,但是 u 很可能随着 t 变小,故 m 随着时间可能维持在某个小范围内) 始终小于1,而 u 随着时间推移大概率接近0 (因为commits远小于present_tick),故 m 也会趋近0。随着时间推移,(d / kM) 成为主导项。同时 d 越大,pow(4, (d / kM))以 4 为底数,也将远大于 m (故 weight 可近似看作关于 d 成正比)。
以下的序号是想问的几个相关联的问题的序号。
当前环境为
weasel-0.15.0
,自造词我参考的这个comment。基于上述配置,可以产生以下两个自造词并通过 yaml 里的
Control+k
发送Shift+Delete
删除 (不过代码里面用的{XK_Delete, kControlMask}
,不太清楚具体机制) 并产生 负的commits
:不过上述过程中,只有 "foo" 会从候选框移除并且不再出现,但是 "bar" 并不会移除总是作为第一候选项。这印证了代码里的注释
// CAVEAT: this doesn't mean anything is deleted for sure
。这个是可以理解为 userdb 只用于重碼候選詞么?所以,上面的“bar”由于已经输入“foo bar foo bar” (故非
"completion"
)但是由于没有别的候选词(无重碼),故效果上看似并没有删掉这个词语。可以问下
{XK_Delete, kControlMask}
和Shift+Delete
如何联系的吗?以下是我基于网上一些文档、代码、评论的理解,希望懂相关 删除自造词 机制的人可以帮忙看下。
DeleteCandidate
如何更改 userdbDeleteCandidate
会调用delete_notifier_
, 其会调用Memory::OnDeleteEntry
来删词.Translator 导入 userdb
看了一下与
weight
相关的代码,首先取负数commits
,然后根据当前timestamp,调用formula_d
更新dee
(由于此处原本要放置commits
的参数d=0
设置为0,相当于只更新timestamp/ticks 和 减小dee
了)。此处
dee
初始为0,然后根据commits
逐渐增加 和commits
时间差 逐渐变小(避免了 LRU 问题)。然后调用
formula_p
来更新weight
,其中s=0
,kM
是一个较大的数字(约为200.5
)。这里由于u
变为负数,m
变得更小了。不过由于pow((1 - exp(-t / 10000)), 10)
(图像在t>0
的情况下类似于 sigmoid,但是u
很可能随着t
变小,故m
随着时间可能维持在某个小范围内) 始终小于1,而u
随着时间推移大概率接近0 (因为commits
远小于present_tick
),故m
也会趋近0。随着时间推移,(d / kM)
成为主导项。同时d
越大,pow(4, (d / kM))
以 4 为底数,也将远大于m
(故weight
可近似看作关于d
成正比)。d/dee
是关于commits
(正比)和时间(反比)的函数,故weight
亦是。依旧满足 “两者解决了下述问题”。最后,上面计算的
weight
将被指数放大,配合initial_quality
。综上,是不是可以认为删除自造词,其实并没有真的删除它,只是对它的commits取负,而这个负数具体大小 在
algo::formula_d(0.0, (double)tick_, v.dee, (double)v.tick)
里 并不对dee
产生影响 (有些类似于恢复了默认值)。所以,如果commits
始终为负数,时间推移下dee
将仅受 timestamp 影响变小。由于dee
大概率主导weight
的大小,从而导致weight
变小。所以,可能由于dee
的影响会产生当前词好像没有删掉的效果。不知道我们可不可以这样理解?候选词排序还受
speller/algebra
,syllabifier
影响。后者简单看了下代码syllabifier.cc
和syllabifier_test.cc
,其把SyllableId
看成 vertex(实际结构是个map ),然后把音节切分段看成 edge。不过,由于我双拼日常使用官方默认配置足够了(speller/algebra
没有abbrev/fuzz
,同时结合双拼,不太可能会有kAmbiguousSpelling
的情形),同时 userdb 相关的table_translator
(主翻译器)使用enable_completion: false
,所以,我的双拼里与主翻译器有关的候选项应该基本上都是kNormalSpelling
。故其并不会对commits
等产生的weight
产生候选项排序上的影响。有什么好的方法可以真正删除掉自造词么(请问 目前有没有可用的接口,可以直接用或稍作修改)?
以上问题希望有人可以指教一下,谢谢。
The text was updated successfully, but these errors were encountered: