pinyin: 把汉字转换成拼音的R包

更新:2017-06-19,‘pinyin 1.0.2’ 在 CRAN 正式发布。

今天新写了个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('羌笛何须怨杨柳春风不度玉门关')
## [1] "qiānɡ_dí_hé_xū_yuàn_yánɡ_liǔ_chūn_fēnɡ_bú_dù_yù_mén_ɡuān"
pinyin('羌笛何须怨杨柳春风不度玉门关', sep = ' ')
## [1] "qiānɡ dí hé xū yuàn yánɡ liǔ chūn fēnɡ bú dù yù mén ɡuān"
pinyin('羌笛何须怨杨柳春风不度玉门关', sep = ' ', method = 'tone')
## [1] "qiang1 di2 he2 xu1 yuan4 yang2 liu3 chun1 feng1 bu2 du4 yu4 men2 guan1"
pinyin('羌笛何须怨杨柳春风不度玉门关', sep = ' ', method = 'toneless')
## [1] "qiang di he xu yuan yang liu chun feng bu du yu men guan"
pinyin('羌笛何须怨杨柳春风不度玉门关', sep = '', only_first_letter = TRUE)
## [1] "qdhxyylcfbdymɡ"
pinyin('羌笛何须怨?杨柳春风,不度玉门关.', sep = '', nonezh_replace = '-')
## [1] "qiānɡdíhéxūyuàn-yánɡliǔchūnfēnɡ-búdùyùménɡuān-"

如果自变量是多个字符串的向量,那么只会转换第一个字符串:

pinyin(c('羌笛何须怨杨柳', '春风不度玉门关'))
## [1] "qiānɡ_dí_hé_xū_yuàn_yánɡ_liǔ"

这怎么行?哎,用 sapply() 嘛:

sapply(c('羌笛何须怨杨柳', '春风不度玉门关'), pinyin)
##                 羌笛何须怨杨柳                 春风不度玉门关 
## "qiānɡ_dí_hé_xū_yuàn_yánɡ_liǔ"  "chūn_fēnɡ_bú_dù_yù_mén_ɡuān"

其他两个函数,其实是 pinyin() 的延伸和示例:

  • file.rename2py()用来将文件名里的汉字转换成拼音。
  • bookdown2py()是专门为 bookdown 包服务的,作用是为章节的中文标题自动添加个对应的拼音ID {#biaotipinyin},避免在生成网页文件时文件名里出现一大堆乱码,并且解决标题里中英文混合的问题。这事儿已经让我惦记三个月了。— 当然这事儿手动完全可以处理,只是手动处理的过程毫无乐趣可言罢了。

拼音库我试了好几个,最后选定了wangyanhan整理制作的42856字拼音表,直接处理文本文件,简单粗暴,转换起来可能有点慢,会顿一下,但已经够我自用了。

我写这个包的环境是 windows 7 下区域设置为中国,别的环境没测试,估计会有不少坑。我这里就有一些,比如不知道哪里设置有问题,包的函数里居然不能出现中文字符,弄得我自变量的默认值和example部分只好空着。再比如多音字的问题,目前完全没处理。所以,转换春眠不觉晓的结果会让人愣一下,再转换处处闻啼鸟……

结果好尴尬。

comments powered by Disqus