• Posts tagged "pinyin"

Blog Archives

用R语言把汉字转拼音pinyin

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,试了一下,用起来非常轻巧。

目录

  1. pinyin包介绍
  2. 一分钟快速使用
  3. pinyin代码结构
  4. 查看汉字与拼音的字典文件
  5. 自定义字典文件

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/

打赏作者