同一个词,在两个软件里排第几

先看一个具体的现象。输入拼音 shishi,在聊天窗口里候选栏前三可能是「试试」「事实」「实施」;切到代码编辑器里,同样输入 shishi,前三可能变成「实事」「时时」「试试」。「试试」从第一掉到第三。

再看一个更明显的。输入 key,在浏览器地址栏里,候选栏第一往往是英文 key;在中文文档编辑器里,同一串输入第一可能是「可以」。

这些差异不是随机的。每次输入,输入法都会现场算一遍排序分。分三个来源:字母组合能对应哪些词,当前上下文支持哪个词,当前场景下哪个词库权重更高。三处任一变化,顺序就会变。

用户感知到的「这个软件里输入法更好用」,通常指的是输入法在这个软件里拿到了更多信息,排序更贴近用户预期。反过来,「这个软件里输入法很笨」,多数是输入法在这个软件里能拿到的信息太少。

输入法怎么知道自己在哪个软件里

输入法要做的第一件事是识别前台窗口。这个能力由操作系统提供,Windows 上走的是文本服务框架(TSF)或更老的输入法管理器(IMM)接口。

通过这些接口,输入法能拿到几类信息:前台窗口的进程名、窗口类名、窗口标题,以及编辑框的属性和光标位置。进程名决定场景分类——chrome.exe 归浏览器,Code.exe 归代码编辑器,WeChat.exe 归即时通讯。

光标位置是另一条重要信息。输入法需要知道光标在哪,才能把候选栏放在正确位置。如果应用不给光标坐标,候选栏只能回到屏幕默认位置。这也是为什么某些全屏游戏里的候选栏会固定在角落。

编辑框属性会告诉输入法这个框是普通文本框,还是密码框、还是只接受数字。密码框会触发特殊处理,候选栏不显示候选内容,防止截屏泄露。

问题出在,这套接口不是强制实现的。搜狗输入法能拿多少信息,取决于应用给了多少。应用可以选择只提供最基本的接口,不返回光标坐标,甚至完全绕过系统输入法接口自己处理键盘输入。

场景词库:不同应用类型权重不同

拿到应用类型后,输入法会调整词库权重。同一份词库,在不同场景下给不同的词加权。

在聊天软件里,语气词、表情相关词、网络用语的权重会抬高。在代码编辑器里,英文标识符、常见编程词汇的权重抬高,中文语气词的权重下降。在表格软件里,数字、日期、单位符号的权重更高。

这套加权不是硬切换,是叠加在基础词频之上的调整。基础词频来自通用词库和用户个人词库,场景权重作为修正项参与打分。一个词在通用词库里的基础分不变,但加了场景修正之后,在不同应用里的最终得分不同。

场景分类的颗粒度有限。输入法能区分的是「浏览器」「编辑器」「聊天工具」这类粗分类,无法精确知道用户此刻在写什么。写代码的时候也可能需要输入中文注释,写文档的时候也可能需要输入英文术语。粗分类的代价就是有些场景下的加权不符合用户当下的真实需求。

一个容易观察到的现象:同一个词,你第一次在聊天软件里选中它,排序会记住;切到编辑器里用同一个词,需要重新选一次。因为两边的场景权重不同,学习结果被记在各自的场景下。

上屏路径差异:TSF 和 IMM 两条路

Windows 上有两套输入法接口,TSF 是新的,IMM 是旧的。新应用大多走 TSF,老应用、部分游戏和自绘文本框可能仍走 IMM,或者两者都不走。

两条路径下,输入法能拿到的信息不一样。TSF 支持更细的上下文查询,能拿到光标前后的文本;IMM 能拿到的信息少得多,通常只有基础的光标位置。走 IMM 的应用里,输入法的上下文判断能力会明显下降。

还有一部分应用完全绕过系统接口,自己实现文本输入。比如很多游戏用 DirectInput 或自绘 UI,键盘事件在应用内部处理,输入法只负责把候选结果送过去。这种情况下,输入法既拿不到上下文,也拿不到光标位置,排序只能靠字母组合和通用词频。

三类应用对输入法接口的支持程度对比
应用类型 接口路径 可获取上下文 光标位置 场景加权
现代桌面应用 TSF 完整 准确 生效
老式应用 IMM 部分 基本准确 生效但依据少
自绘文本框 绕开系统接口 无 无或粗略 仅按进程名

实测:同一输入在五个应用中的排名差异

下面的数据为人工构造,测试环境为 Windows 11 24H2、16.8 正式版、默认词库、关闭云输入,同一台设备上依次在五个应用中输入同一串拼音,记录目标词在候选栏中的位次。样本量小,数据仅供说明差异的存在,不代表精确排名。

同一拼音在不同应用中的候选位次
人工构造测试 · 五类应用
候选词在不同应用中的位次差异
应用类型 目标词位次 相比基准的偏移 主要影响因素
聊天软件 第 1 位 基准 场景加权偏高
浏览器输入框 第 1 位 0 上下文完整
文档编辑器 第 2 位 +1 场景加权不同
代码编辑器 第 3 位 +2 英文词权重抬高
全屏游戏 第 4 位 +3 无上下文信息
测试仅使用一组拼音样本,位次偏移受目标词选择影响较大。这组数据的意义在于展示趋势:应用给的信息越少,候选位次越容易偏离。具体偏移量不具普适性,不同词、不同词库状态下结果会不同。如需复现,可到 搜狗输入法下载页获取同一版本自行测试。
数据来源:本页数据为人工构造测试,不是官方数据。测试环境、样本量和判定标准已在上文说明。样本只有一组拼音,样本量严重不足,无法支撑统计结论。数据仅用于说明「跨软件差异确实存在」这一现象,不作为任何版本性能的评价依据。

为什么有些软件里候选顺序完全不按套路

当输入法拿不到上下文信息时,排序退回到只依赖字母组合和通用词频。这时的顺序看起来「不按套路」,其实是信息不足导致的退让。

退让后的排序有几个特征。短词优先级下降。日常高频的短词在通用词频里排得靠后,因为缺少上下文支持。用户会觉得「这个词我天天打,怎么不排前面」。同音词无法区分。同一个拼音对应多个词时,只能按通用词频排,不考虑当前语境。场景加权只按进程名生效。如果连进程名都拿不到,场景加权也不生效,所有应用退回同一套排序。

还有一类特殊现象是候选栏位置异常。输入法拿不到光标坐标时,候选栏会跑到屏幕角落或窗口边缘。这时用户看到的不只是顺序变了,连候选栏本身都不在预期位置。

用户能控制的三个变量

跨软件差异没法完全消除,但用户有三个可调的变量。

用户词库。某个词你在某个软件里反复用,输入法会记住。这个记忆跟场景绑定,同一软件里下次排序会更靠前。代价是需要在每个软件里各选一次。

场景词库开关。如果关闭场景词库加权,所有应用退回同一套词频排序。顺序会趋向统一,但代价是失去场景适配——写代码时不再优先给英文词,聊天时不再优先给语气词。多数用户不值得做这个交换。

词库更新。通用词库的更新会改变基础词频。新版本调整了某些词的权重,排序也会变。这跟软件无关,是全站生效的变化。

三个变量里,实际可操作的主要是第一个。用户在具体软件里纠正几次排序,输入法会逐渐适应该软件的使用习惯。这是本地学习行为,不需要联网。

跨软件差异做不到什么

不能让所有软件顺序一致。顺序依赖应用给的上下文信息,这些信息由应用决定。输入法无法强制应用提供更多信息,也无法在信息缺失时凭空推断。想让顺序完全统一,只能放弃场景适配能力。

不能推断软件里在写什么内容。输入法知道的是「这是浏览器」,不知道「用户在写邮件还是在搜索」。粗分类能覆盖的场景有限,细分场景需要应用主动提供更多信息,这在接口层面没有标准。

不能解决自绘文本框的问题。完全绕开系统接口的应用,输入法只能送候选结果,排序和候选栏位置都无法与系统行为一致。这是接口层面的限制,输入法侧没有解决办法。

不能保证同一个词在同一软件里永远同一位次。排序还受上下文、用户历史、词库更新影响。今天的位次和一个月后的位次可能不同。差异是常态,不是异常。

关于候选词排序差异的常见问题

下面 5 个问题是读者反馈中最常被问到的

为什么同一个词在不同软件里排序不同?

主要来自三处差异。一是输入法从软件拿到多少上下文信息,不同软件对输入法接口的支持程度不一样;二是场景词库权重,输入法会根据应用类型给不同词库加权;三是软件自身的文本处理方式,部分软件会干扰光标位置或屏蔽接口。三者叠加,同一串输入在不同软件里能得到不同的候选顺序。

候选词排序是固定规则吗?

不是。排序是打分结果,分数由词频、上下文、场景权重、用户习惯共同决定,任何一项变化都会改变顺序。同一个词库、同一台设备,只要切换应用,场景权重就变了,顺序也会跟着变。

为什么在游戏里候选栏不跟着光标走?

多数游戏用全屏渲染和自绘文本框,不走系统的输入法接口,输入法拿不到光标坐标。候选栏只能回到默认位置,通常屏幕左下角或右下角。这是接口层面的限制,输入法侧无法解决。

能不能让所有软件的候选顺序统一?

不能完全统一。输入法的排序依赖应用提供的上下文信息,这些信息由应用决定给不给、给多少。只有关闭场景词库加权、只用固定词频排序,顺序才会接近统一,但这样会牺牲场景适配能力。代价大于收益。

关闭场景词库后跨软件差异会消失吗?

会缩小,但不会消失。场景权重只是差异来源之一。接口支持程度、光标信息、软件自绘文本框这些因素仍在,部分软件里候选顺序依然跟其他地方不一样。关闭场景词库主要影响的是常规应用之间的顺序差异。