来自 赵鹏 | December 20, 2018
在<外行 R 包开发手记:pinyin>里我写道:R pinyin 这么个小包,连五笔字型和四角号码都能转换了,“这回应该算是一劳永逸了吧。”然而仍然错估了形势。这不,在用户提问和提需求的压力下,pinyin 包又双叒叕升级了一次。
还好变化不大,主要增加了两处。
第一处是支持向量转换。也就是说,原先运行 py(c("我", "一定", "是", "天才"))
,只会将第一个元素“我”转换成"wǒ"。这个我在 readme 里说明了:想转换向量的话,用 sapply(c("我", "一定", "是", "天才"), py)
就行了。
然而,可能是 apply()
全家桶函数(包括 sapply, tapply, lapply, mapply ....)太晦涩的缘故,——我记得当初刚刚学 R ,就觉得这家子函数有点反人类,——很多用户对这个用法不买账。例如知乎上有用户推荐 pinyin 包的时候说道:
pinyin()只能翻译一个字符串,不能翻译向量,如果是向量输入的话,只翻译第一个元素。这个时候或许你想使用一下 for 循环之类的,遍历向量元素。
github 上也有用户同样反映这个问题,并贡献了同样的解决方案。
不知道 sapply()
函数对此作何感想。我猜它一定哭死在了厕所里。
不管怎么样,既然有用户反复提同一个问题,那么一定是需要解决了。于是我咬咬牙,把 py()
升了级,让它直接处理向量:
py(c("我", "一定", "是", "天才"))
我 一定 是 天才
"wǒ" "yī_dìnɡ" "shì" "tiān_cái"
第二处,是对旧函数的兼容。
以前,pinyin 包的主函数是 pinyin()
。后来因为能转换五笔和四角了,我觉得这个函数名称名不符实,就改成了 py()
——缩写嘛,我想解释成啥就解释成啥,比如就说 py 的意思是'朋友'或'飘逸',谁能奈我何。旧函数pinyin()
就被我删掉了。反正这个包的用户并不多,谁能注意到呢?
我忘了一件事:pinyin()
函数是被我写进<学 R:零基础学习 R 语言>一书里的。
有读者来信:照你书里说的,怎么运行出错啊?
类似的问题在 bookdownplus 包里也存在:我把里面的模板名字给改了,结果读者按书上的代码运行出错。
这多不好。
于是,我又把pinyin()
函数还回去了。这个函数的返回结果只是一条警告信息:
The function "pinyin()" is deprecated. Please use "py()" instead.
顺手把 bookdonwplus 也升级了,兼顾书上那些不能改变的示例。
在折腾 pinyin 包的过程里,我无意发现一件事:早在 2013 年的中国第六届 R 语言会议,介绍了一个文本挖掘包: tmcn。其中有个 toPinyin()
的函数,就能把汉字转成拼音。
如果去年我搜到了这个函数,我才不会花力气去开发和维护 pinyin 包。
在我的大肆宣传下,如今搜索 'R语言 汉字 拼音',排在前面的就是我的pinyin 包,而开发更早,速度更快的 tmcn::toPinyin()
,就这样被埋没了,不知这算不算一种不公平。