article_image

你可以合理怀疑,苹果公司中任何说中文的人,私下里都不会使用 iPhone。毕竟,就连通过拼音首字母缩写*搜索联系人这点小事,iPhone 将近二十年都没做好。

*“首字母”和“缩写”是冗余,但我为了让文章被更多不同语言习惯的读者搜到,完全不介意通篇病句,甚至以此为荣。

Alt text
默认情况下,通过姓名缩写无法搜索到联系人

加之 iPhone 输入法并不记忆联系人姓名,基本上,每次找人,我免不了打开通讯录软件一页一页往下翻——遇到名字里带生僻字的家伙,手动翻找成了唯一选择。

Alt text
iPhone 无法打出联系人名字(除非常见名)

相较之下,分明不是通讯录软件的微信,却在本土化上深扎稳固,早就支持通过首字母缩写找人。你可以用“qmq”轻松找到“覃某玘”这种同时出现多音字和生僻字的姓名。

工作这几年,我积累了数量可观的手机通讯录联系人,不得不面对搜索难的历史问题。万幸,有过《让 iPhone 通讯录中的中文联系人按拼音顺序显示》的经验后,我很快意识到首字母缩写不过是另一项元数据,完全可以自行添加。

Alt text
增加缩写后,通过姓名缩写可以搜索到联系人

据我所知,早就有一些第三方工具,但一方面要钱,更要命的是,我一点也不想交出通讯录信息,试想一下开发者成功获取我的个人信息后,会露出怎样的嘴脸:Minja 律师认识B领导和C院长?还有对方的私人电话?喔喔很有趣哦……

好在这些第三方工具,也不过是往原生通讯录里备注首字母缩写信息。此事完全可以交给原生软件:Shortcuts。在研究外文环境下的中文按姓氏排序时,我发现可以通过中英往返翻译获得中文姓名的拼音,而翻译引擎从 Microsoft 切到苹果自家服务后*,姓名翻译质量明显提升,本方案已万事俱备。

*这意味着本文动作可能必须联网使用,才能正常调用翻译引擎。

只欠东风:如何获得姓名拼音的首字母?例如,当我已经可以从“吴细妹”获得“Wu Ximei”时,如何进一步得到“wxm”(先不过问大小写)?我首先想到借用 Shell Script 或 Python 引入第三方库,但转念间就放弃,因为这些方案依赖电脑,更像是命令行脚本套壳,基本别指望分享给不谙计算机技术的朋友。更通用的答案逐渐浮出水面:正则表达式。

暂不考虑名字带符号或空格的少数民族同胞,一般的中文名字,多为“张三”“李小龙”“诸葛亮”或“诸葛孔明”等形式,即二字到四字不等,而每个字的拼音,要么是辅音加元音,要么是单一个元音。

在技术上,单字名字和“诸葛”这样的复姓暗示了表达式需要对称,即姓氏和名字可作同一考量,即均需包容“A”和“AB”的形式,最终组合起来覆盖“A C”、“A CD”、“AB C”和“AB CD”四种主要的中文姓名。

再考虑到多个字母的辅音也仅取第一个,提取首字母缩写就成了字符变换游戏,理论上,下面的组合即覆盖多数汉字单字的拼音:

^([a-z])(?:hiang|huang|hang|hueng|heng|hing|hiong|hong|huai|hiao|hian|hiou|huei|huan|hüan|huen|iang|uang|hia|hua|huo|hie|hue|hüe|her|hai|hei|hui|hao|hou|hiu|han|hen|hun|hin|hün|ang|ueng|eng|ing|iong|ong|uai|iao|ian|iou|uei|uan|üan|uen|ha|ho|he|hi|hu|hü|ia|ua|uo|ie|ue|üe|er|ai|ei|ui|ao|ou|iu|an|en|un|in|ün|a|o|e|i|u|ü)?

注意,我仅仅根据音标表生成了可能的组合,但没有兴趣一一核查每一例是否可能存在,但不存在的发音也应该不影响匹配,因为它们压根不会出现。

Alt text
通过正则表达式提取联系人名字缩写

随后,我从联系人元数据中挑选了一个不常用字段“Phonatic Middle Name”,将首字母缩写填入其中,旋可在通讯录或 Spotlight 中通过首字母查找联系人。

Alt text
增加缩写后,通过姓名缩写可以搜索到联系人

运行 Shortcuts 动作后,可能要等待 Spotlight 重建索引,视联系人数量差异,大约在几分钟可尝试搜索。


author_avatar

律师, macOS/iOS 自动化业余玩家。有效即合法,无效的优雅有罪。