R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。
R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。
要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让我们一起动起来吧,开始R的极客理想。
关于作者:
- 张丹,分析师/程序员/Quant: R,Java,Nodejs
- blog: http://blog.fens.me
- email: bsspirit@gmail.com
转载请注明出处:
http://blog.fens.me/r-pinyin/
前言
在做中文文字处理的时候,我们经常需要把中文转换成拼音,正巧看到R语言中有一个汉字转换成拼音包叫pinyin,试了一下,用起来非常轻巧。
目录
- pinyin包介绍
- 一分钟快速使用
- pinyin代码结构
- 查看汉字与拼音的字典文件
- 自定义字典文件
1. pinyin包介绍
这个 R 语言包粗暴地用拼音取名为 pinyin,作用是把汉字转换成拼音。从 v1.1.3 开始,增加了将汉字转换成四角号码或五笔字型的功能。从 v1.1.4 开始,用户可以指定自己的字典,随意转换。pinyin项目,核心就是把中文汉字与对应的拼音字典做了映射。
该包的作者为赵鹏博士,环境科学、大气科学专业,西交利物浦大学(苏州)健康与环境科学系助理教授,英国利物浦大学荣誉学术成员,英国高等教育学会会员,博客地址。
本文使用的R的版本为R version 4.2.3,pinyin包的版本1.1.6。
pinyin包,安装过程很简单。
# 安装
> install.packages("pinyin")
# 加载
> library(pinyin)
pinyin包的项目地址:https://github.com/pzhaonet/pinyin
2. 一分钟快速使用
pinyin包使用起来非常简单,一行代码就能完成文字向拼音的转换。py()是该项目的主函数。
通过一行代码,一个函数就能使用中文汉字转拼音,默认参数的拼音带声调,默认字典为pinyin。
> py("中文")
中文
"zhōnɡ_wén"
写一个句子,再试试。
> py("现在我们正处于大数据时代")
现在我们正处于大数据时代
"xiàn_zài_wǒ_men_zhēnɡ_chǔ_wéi_dà_shǔ_jū_shí_dài"
换一个字典试试,使用pinyin2字典。
> py("中文", dic = pydic(dic = c("pinyin2")))
中文
"zhong1_wen2"
声调处理,使用pydic()函数的method方法,可以改变声调的显示结果。
- method = ‘quanpin’,标准的全拼 (默认)
- method = ‘tone’,以数字表示声调
- method = ‘toneless’,不含声调
# 标准的全拼
> py("中文", dic = pydic(dic = c("pinyin"),method="quanpin"))
中文
"zhōnɡ_wén"
# 数字表示声调
> py("中文", dic = pydic(dic = c("pinyin"),method="tone"))
中文
"zhong1_wen2"
# 不含声调
> py("中文", dic = pydic(dic = c("pinyin"),method="toneless"))
中文
"zhong_wen"
仅保留首字母,使用only_first_letter参数TRUE。
> py('中文', dic = pydic(dic = c("pinyin"),only_first_letter = TRUE))
中文
"z_w"
字符串转换,把字符串里边包含非汉字字符,使用other_replace参数,转换成指定字符@。
> py('中文abc', other_replace="@",dic = pydic(dic = c("pinyin")))
中文abc
"zhōnɡ_wén_@_@_@"
去掉下划线分隔符,或者改变分隔符号,使用sep参数。
> py("中文", sep="" ,dic = pydic(dic = c("pinyin")))
中文
"zhōnɡwén"
> py("中文", sep="", dic = pydic(dic = c("pinyin"),method="toneless"))
中文
"zhongwen"
# 用空格为分隔符
> py("中文", sep=" ", dic = pydic(dic = c("pinyin"),method="toneless"))
中文
"zhong wen"
多词的转换
> library(magrittr)
> py(c("中文","英文","法文"))
中文 英文 法文
"zhōnɡ_wén" "yānɡ_wén" "fǎ_wén"
# 多词拼接成一个字符串
> py(c("中文","英文","法文")) %>% paste(collapse = ",")
[1] "zhōnɡ_wén,yānɡ_wén,fǎ_wén"
3. pinyin包的代码结构
打开 pinyin 包的帮助文件,可以看到一共有11函数。
- py():主函数入口,支持输入一段文字
- py_single():单个文字转拼音,被py()循环进行调用/li>
- pydic():字典函数参数配置
- load_dic():加载字典文件
- file.rename2py(): 将目录中,文件名的汉字转换成拼音
- file2py:将目录中,文件的汉字转换成拼音
- bookdown2py: 是专门为 bookdown 包服务的,作用是为章节的中文标题自动添加个对应的拼音ID {#biaotipinyin}
- pinyin():已经不用
pinyin包中的,py()函数是这个包中入门函数,用于加载字符串。然后,把字符串拆解以单个文字传入py_single()函数,进行拼音转换。通过load_dic() 加载字典文件,pydic() 设置参数,用于声调输出样式。
4. 查看汉字与拼音的字典文件
在pinyin包中,预置了2个字典文件,用于把中文汉字和拼音的对应关系进行映射。
查看当前汉字与拼音的字典,找到pinyin项目在本地的安装位置,找到字典文件。
找到字典文件。
> path<- "C:/Users/bsspi/AppData/Local/R/win-library/4.2/pinyin/lib"
> dir(path)
[1] "pinyin.txt" "pinyin2.txt"
查看字典文件pinyin.txt。
> zidian1<-readLines(paste(path,"pinyin.txt",sep="/"))
> head(zidian1,20)
[1] "# source: http://bbs.unispim.com/forum.php?mod=viewthread&tid=31644CJK "
[2] "# format = 1"
[3] "㐀 qiū(qiu1)"
[4] "㐁 tiàn(tian4)"
[5] "㐄 kuà(kua4)"
[6] "㐅 wǔ(wu3)"
[7] "㐆 yǐn(yin3)"
[8] "㐌 yí(yi2)"
[9] "㐖 xié(xie2)"
[10] "㐜 chóu(chou2)"
[11] "㐡 nuò(nuo4)"
[12] "㐤 dān qiú(dan1 qiu2)"
[13] "㐨 xù(xu4)"
[14] "㐩 xíng(xing2)"
[15] "㐫 xiōng(xiong1)"
[16] "㐬 liú(liu2)"
[17] "㐭 lǐn(lin3)"
[18] "㐮 xiānɡ(xiang1)"
[19] "㐯 yōng(yong1)"
[20] "㐰 xìn(xin4)"
查看字典文件pinyin2.txt。
> zidian2<-readLines(paste(path,"pinyin2.txt",sep="/"))
> head(zidian2,20)
[1] "# source:" "# format = 1" "丂 yu2 kao3"
[4] "丄 shang4" "丅 xia4" "丆 shi2"
[7] "丏 mian3" "丗 shi4" "丟 diu1"
[10] "丠 qiu1" "両 liang3" "丣 you3"
[13] "並 bing4" "丩 jiu1" "丮 ji3"
[16] "丯 jie4" "丱 kuang4 guan4" "丳 chan3"
[19] "丵 zhuo2" "丷 ba1"
5. 自定义字典文件
使用load_dic()载入自定义字典时,目前有三个可用字典:
- 四角号码字典:https://github.com/pzhaonet/pinyin/raw/master/inst2/sijiao.txt
- 五笔 98:https://github.com/pzhaonet/pinyin/raw/master/inst2/wubi98.txt
- 五笔 86:https://github.com/pzhaonet/pinyin/raw/master/inst2/wubi86.txt
我们可以从网上下载这3个文件,放到本地的目录中。
加载四角号码字典,并进行转换。
> dic_sj<-load_dic(paste(path,"sijiao.txt",sep="/"))
Warning messages:
1: In type.convert.default(X[[i]], ...) :
'as.is' should be specified by the caller; using TRUE
2: In type.convert.default(X[[i]], ...) :
'as.is' should be specified by the caller; using TRUE
> py("中文", dic = dic_sj)
中文
"50006_400"
加五笔字典,并进行转换。
> dic_wubi86<-load_dic(paste(path,"wubi86.txt",sep="/"))
> py("中文", dic = dic_wubi86)
中文
"khk_yygy"
> dic_wubi98<-load_dic(paste(path,"wubi98.txt",sep="/"))
> py("中文", dic = dic_wubi98)
中文
"khk_yygy"
这样就完成了对pinyin工具的使用,很小很方便。不仅可以完成中文转拼音,还能通过自定义的字典功能实现,各种基于中文文字的转换。
pinyin项目,核心就是把中文汉字与对应的拼音字典做了映射,技术难度虽然不大,但有了这样的工具确实方便了很多。当然,除了这个工具像tmcn包,也用转换拼音的函数。给作者点个赞!
转载请注明出处:
http://blog.fens.me/r-pinyin/