pinyin 包升级:终于可以转换汉字向量了

来自 赵鹏 | 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(),就这样被埋没了,不知这算不算一种不公平。

comments powered by Disqus