PinIn icon indicating copy to clipboard operation
PinIn copied to clipboard

关于混合输入时匹配不上的问题

Open vfyjxf opened this issue 2 years ago • 3 comments

当使用类似于toding、 gudong 、ashanyan这些情况时,会无法匹配对应的文字,即铜锭、滚动、安山岩 下面使用PinIn1.5.0版本情况下匹配的情况。

image image image


image image image

vfyjxf avatar Aug 09 '22 17:08 vfyjxf

这个现象开始设计的时候就是这样的,实际上为此我还专门多写了很多代码。 这么做有两个原因:

  • 对于一些比较传统的输入法,原本就是允许整体缩写韵母而不允许缩写部分韵母,目前有些输入法允许这么拼写主要还是出于智能纠错的原因,整体上我希望和输入法行为保持一致
  • 允许这样的缩写会产生大量重码,如果我要查找的是“古”,允许部分韵母就会导致搜索结果中混杂了大量的“光”,“棍”,“硅”等结果,这就会导致搜索“古”变得异常困难

不过这也有一个特例,如果是搜索串的最后一个拼音段,那么是允许韵母缩写进行匹配的,实际上我为此也加了不少特殊处理。 这也有两个原因:

  • 最后一个拼音段的拼写有可能用户还没有打全,是一个中间状态
  • 允许这样的行为可以带来一个非常重要的特性:当用户的搜索串越打越长时,搜索到的结果永远是之前更短的搜索串获得的搜索结果的子集。这也就意味着,当用户在打入搜索串时,更新的结果可以通过只搜索上一次结果里存在的所有条目来获得,而不需要搜索全集,这在一些场景可以带来数量级上的性能提升。尽管现在PinIn的性能已经比较高了,大部分场景下已经不需要这个特性了,但是在早期版本的Jech里面这是非常重要的特性,否则可以说是卡到不能用。

当然,这部分的行为仍然是值得讨论的,如果有更好的解决方案也可以修改。

Towdium avatar Aug 13 '22 14:08 Towdium

事后我在你的个人网站上看到了这样做是刻意为之的,其实这个问题是我和一位朋友讨论的时候他提出来的,以玩家的角度讲是希望能和输入法一样的行为,但实际使用可能会有很多问题。或许可以增加一些特例,比如可配置在开头的地方和结尾处一样的行为,对于安山岩这些的话可以更好的匹配。

vfyjxf avatar Aug 13 '22 14:08 vfyjxf

对于单个字符匹配的场景,PinIn还设置了一种特例,也就是所谓的音序匹配。如果用户对于一个汉字只打了拼音的首字母,那么这时即使声母是两个字母的,也可以完成匹配,也是就是“stou”可以匹配“石头”。主要也是俩原因:

  • 这么用的人似乎很多,而且有些输入法确实允许这种缩写
  • 允许这种拼写方式也会造成重码,但是这种重码是可控的。如果我要搜索的真的是“四头”,那么只要把韵母打全,使得音序匹配的方式失效,就可以避免重码了
  • 还有一个次要的原因,之前还有一个拼音搜索的mod,那个mod非常依赖这种拼写方式,所以把用户习惯都带过来了,不支持老是被人吐槽

对于这种方式,按理说“a”也应该能匹配“an”,“ang”才对,不过由于流程不同,所以这部分没有改进去。虽然说允许这种拼写也会有重码的问题,但是由于没有声母的字符本来就很少,所以重码还是可控的,这个特例是可以允许的。后边有空我应该会加进去。

至于其他的拼写,特别是上面说的“gu”“ga”等拼法的重码问题,还可以观望一下。如果每次“古”的时候,都会混杂“光”,“棍”,“硅”的结果在里面,那就会很影响“古”的查找效率了。本来拼音的过滤效果也没有特别理想,在我看来修改之后收益有限,但是损失是比较大的。

Towdium avatar Aug 14 '22 08:08 Towdium