编辑导语:在微信关注的公众号列表中,是按首字母排序的,所以可以直接根据首字母定位到公众号所在的位置。然而,如果公众号名字的第一个字是多音字,又会怎么排序呢?感兴趣的小伙伴们一起来看一下吧。
为了记录作为产品经理学习成长的过程,我和柏林决定做一档公众号,希望能把我们感兴趣的和深度思考的内容都表达出来。
由于资历尚浅,工作之余可能也没办法针对一个东西无限花费精力,只希望凭借有限的资源和能力产出更有深度的内容,于是我们高调地把频道名称确定为了『浅入深出』,吹牛之余,也是希望我们自己可以由浅入深,未来能够独挡一面。
开会,画饼,确定后续的内容方向,讨论品牌slogan,测试关注自动回复,发出第一篇内容,一切顺顺利利。
就在我们满心欢喜,为踏出第一步而兴奋不已之时,我们两都发现了一个问题——咦?怎么……明明已经关注了,但是公众号列表里看不见『浅入深出』的大名?
难道是个人号不显示?
观察我自己划水摸鱼的号之后,发现明显不是,也是重新启用不久,发布内容寥寥无几,但公众号明明白白显示在关注列表之中。
那么『浅入深出』是怎么就不见了呢?
我们刷新刷新又刷新,又反复取消关注、重新关注了几次,基本可以确定在关注列表中Q打头的一列,实实在在就是不存在『浅入深出』。
但这不是说我们完全看不了我们的公众号了,其实在搜索栏里,是可以通过关键字检索出来『浅入深出』的,我们也可以顺利看到之前发布的内容,就是关注列表里啥也没有,奇了怪了!
结合现在的状况和我们的经验,我们梳理给到了以下一些猜想:
个人号不显示公众号所有者不显示新建号需要审核,不会立马向公众批露存有违规记录,公众号被隐藏重启账号解冻后有缓冲期微信显示bug对个人摸鱼的号进行观察,并邀请其他人关注测试后,发现1、2两种情况基本排除,对于后三种情况就要分情况讨论了。
3:如果新建账号需要审核,平台应该有相关通知或提醒,等待期是普遍情况网络中应该有相关信息。
然而实际检索后并未得到任何公众号建立审核相关信息,实际在复现操作的时候,我们也未发现任何相关遗漏提醒。
但至此并不能真伪,结合我们对审核机制的了解,决定针对3情况,给出24小时和72小时的节点,观察是否有相关反馈。
4:『浅入深出』所属账号由柏林近期重启,他以前弄过多个账号进行过各类骚操作,因而我十分怀疑其账号有过违规行为导致账号被降权或者隐藏。
然而一样的,在网络上并没有找到任何相关处罚信息,对账号历史进行溯源后也未发现任何违规记录。
实际在对腾讯智能客户反馈后,相关问题里只能获得“公众号无法被搜索”和“公众号被冻结”的结果,却没有“公众号被隐藏”或者“公众号看不到”的任何相关信息。
基本4、5和3一样,都可以算是排除的,但一样都无法立刻证伪,也无相关信息去推测规则。
所以我们决定等待一段时间后根据情况是否要确定是情况6,并反馈给腾讯方面。
然而就在我们焦急并存在一点小得意:你瞧,咱上任第一天就发现了腾讯的bug,诸如此类的心情时……居然发生了一件离天下之大谱的事情,全盘推翻了我们上述所有猜想和推论。
『浅入深出』居然找着了!
在我对着一大串关注列表滑过来滑过去的时候,突然一个熟悉的头像出现在了我的眼前,仔细观瞧,没错,确实是我们的『浅入深出』!
看来审核通过了……这个想法还没在我的脑海里完全浮现,我就发现了不对劲的地方——为什么“浅”开头的公众号要放在“ J ”下面?!感情前两天我们是压根没翻到?
我把这个事儿说给柏林后,我们一时忍不住嘴角抽搐,实在无法解释。这是啥奇怪的机制么?还是什么更莫名其妙的bug?
丈二和尚摸不着头脑。
在沉默了几分钟后,一个奇怪的想法浮上了我的心头——“Q”、“J”……难不成,“浅”居然是个多音字?!
最终,百度百科给出了答案,毫无疑问,是我才疏学浅了。
“浅”确实是个多音字,发“qiǎn”这个音时,指代水不深和一些表示距离、时间、内容等不深、不多的抽象含义;发“jiān”这个音时,是古时候形容水流声的象声词,现在基本不用了。
所以『浅入深出』在“ J ”之下并不是什么bug,有很完整的底层逻辑,就是按照首字母排列。
倒是我们在观察的时候不仔细,进行归因的时候局限在常识、经验里面,并且未给到更广泛、合理的猜测和验证方案。如果这是个正式项目,我们可能就因为错误的验证浪费了一些工作周期。
这是个警示,通常说的不要陷入惯性思维和先入为主,在这里我们犯了个遍,在给出猜想的时候也没给到预留的空间,值得反……反思个p呀!
谁知道“浅”是个多音字啊!就算知道,为什么多音字也用那个不常用的发音啊!很奇怪啊好不好!
为此我们决定一探究竟,微信的中文多音字首字母排列到底是什么样的?常见中文首字母排列是否是同样做法?
结合对公众号的一些观察,我们确定了实验的要求:
挑选多音字开头的公众号关注,且要求开头的多音字必须是非同字母异音。什么意思呢?就是得类似“qiǎn”和“jiān”这样,而类似蚌埠的“bàng”和“bèng”就完全没用。发音具有差异的同时,词义也要有明显差异。主要是我们想测一测发音、词义和首字母排列的相关关系。筛选实际词义和发音不同的多个公众号关注测试。对此我们粗略确定了几个字——“浅”、“秘”、“重”、“乐”。
对“浅”、“秘”、“重”的测试很快就完成了,并成功让我们一整嘴角抽抽,结果如下:
实际可以看出,微信的中文首字母排序不分词义,很好理解,费力也没那么讨好。但这个排序实在有点让我脑子疼:
“浅”这个字都取了“ J ”开头,不是常用的qian的“Q”“重”这个字都取了重复和重庆的“C”,而不是重要的“Z”,不过这个说不上哪一个更重要可以见到,这个排列并不是完全按照常用的发音来选择。
仔细观察一下似乎所有选取发音的首字母,都较后一个未选择的发音首字母更靠前,那应该是多音字在选择排列之前, 汉字转换拼音时选择对应发音的逻辑,也是按首字母排列选择更靠前的。
然后,在测试完最后一个“乐”字后我的心情又郁闷了……
如上图所示,“乐”字居然选择的是乐谱的“Y”,而不是更靠前的“L”!我……这……为什么啊!tell me why!
是什么奇怪的策略吗?比如说城市、姓氏发音优先?好吧,这样“秘”和“重”都可以说得通,但“浅”怎么解释?就算查到了浅确实是个稀有姓氏,但是人家也发音“qiǎn”啊喂。
至此可能就需要转化一下想法了,按照奥卡姆剃刀原理——“如无必要,勿增实体”,把推测简化一下,或许首字母排列并不是什么重要内容,产品和程序在做的时候并不会特别处理。
那么实际在应用的开发中,对相关规则的处理可能就是产品提出列表按首字母排序,程序使用已经封装好的库快速上线。
如此一来只要找到相关的轮子这个谜题就可以得到解决——即使我们可能并没有办法明白为什么第一个处理相关需求的产品和开发人员要这样处理,但他们的工作确实导致了现在的现象。
通过了解相关开发情况,这个需求往更深的底层逻辑是需要把汉字转换成拼音,再截取首字母,再进一步排序。
一些将汉字转换成拼音的程序本质是比对字符,然后再选取字符对应的拼音字符,这里的对应关系是靠一张提前写好的字库确定的。
如无特殊情况,一般来说在选择字符对应发音的时候,程序就直接选择默认靠前的发音。
实际工作中,不管是为了减少工作量,还是列表的浏览观感,大部分首字母排序都不考虑实意和发音,按字符默认选择。
然而我在github上查阅了java和js常用库的字库后,发现其结果又和微信的顺序不一样了。如下图,不管是java还是js相关字库大部分默认的拼音还是最常用的……
到最后我也没找到类似的字库可以完整解释微信公众号排序的现象。只能推测微信用的字库可能有点问题,或者按照网络中提及的更先进的做法,微信在汉字转换拼音的过程中侧重向地名、人名等,具体程序的规则就不得而知了。
不过不管怎么样,这个“浅”放在这很难受啊喂!也没啥常用的人名、地名吧!
最后再补充一个有限范围内容的中文字母排序规则的规范案例。
在支付宝火车票购买中的目的地筛选,也是按名称首字母排序,但并没有多音字错位的问题。实际观察可以发现所有中文城市名旁都有英文代号简写,其首字母就是城市首字母的缩写,在底层实现的过程中大概率是没有再使用汉字转拼音的操作,而直接利用代号进行排序,自定义了规范的对应关系。
最后~欢迎关注我们的公众号,见证两个产品小白的成长。
本文由@叨叨石 原创发布于人人都是产品经理。未经许可,禁止转载。
题图来自Unsplash,基于 CC0 协议。