更新:2017-06-19,‘pinyin 1.0.2’ 在 CRAN 正式发布。
beginr::plotpkg(c("bookdownplus", "mindr", "pinyin", "beginr")[3],
from = c("2017-06-21", "2017-06-19", "2017-06-19", "2017-06-23")[3])
今天新写了个R包,粗暴地取名为 pinyin,作用是把汉字转换成拼音。
安装方法:
稳定版:
install.packages("pinyin")
devtools::install_github("pzhaonet/pinyin")
安装时可能会出现一些关于 locale 的警告,净吓唬人,无视。
使用方法:
pinyin 0.0.0版包含3个函数.pinyin()
是主函数,可以把一个带汉字的字符串转换成拼音。可以选择:
- 转换成标准的全拼 (默认
method = 'quanpin'
),或 - 以数字表示声调 (
method = 'tone'
) , 或 - 不含声调(
method = 'toneless'
), - 也可以选择仅保留每个字的首字母(
only_first_letter = TRUE
), - 可以自定义相邻两字拼音的分隔符号(
sep = '_'
), - 如果汉字字符串里边包含非汉字字符,可以选择将这些字符保留原样(
nonezh_replace = NULL
)还是转换成指定字符(如nonezh_replace = '-'
)。
举例如下:
library('pinyin')
pinyin('羌笛何须怨杨柳春风不度玉门关')
pinyin('羌笛何须怨杨柳春风不度玉门关', sep = ' ')
pinyin('羌笛何须怨杨柳春风不度玉门关', sep = ' ', method = 'tone')
pinyin('羌笛何须怨杨柳春风不度玉门关', sep = ' ', method = 'toneless')
pinyin('羌笛何须怨杨柳春风不度玉门关', sep = '', only_first_letter = TRUE)
pinyin('羌笛何须怨?杨柳春风,不度玉门关.', sep = '', nonezh_replace = '-')
如果自变量是多个字符串的向量,那么只会转换第一个字符串:
pinyin(c('羌笛何须怨杨柳', '春风不度玉门关'))
这怎么行?哎,用 sapply()
嘛:
sapply(c('羌笛何须怨杨柳', '春风不度玉门关'), pinyin)
其他两个函数,其实是 pinyin()
的延伸和示例:
file.rename2py()
用来将文件名里的汉字转换成拼音。bookdown2py()
是专门为 bookdown 包服务的,作用是为章节的中文标题自动添加个对应的拼音ID{#biaotipinyin}
,避免在生成网页文件时文件名里出现一大堆乱码,并且解决标题里中英文混合的问题。这事儿已经让我惦记三个月了。— 当然这事儿手动完全可以处理,只是手动处理的过程毫无乐趣可言罢了。
拼音库我试了好几个,最后选定了wangyanhan整理制作的42856字拼音表,直接处理文本文件,简单粗暴,转换起来可能有点慢,会顿一下,但已经够我自用了。
我写这个包的环境是 windows 7 下区域设置为中国,别的环境没测试,估计会有不少坑。我这里就有一些,比如不知道哪里设置有问题,包的函数里居然不能出现中文字符,弄得我自变量的默认值和example部分只好空着。再比如多音字的问题,目前完全没处理。所以,转换春眠不觉晓
的结果会让人愣一下,再转换处处闻啼鸟
……
结果好尴尬。