用R语言实现汉语转拼音及英语

2017 年 9 月 18 日 数萃大数据 周世荣

今天给大家分享一个有趣的问题,用R语言实现汉语转拼音及英语。文中给出的方法不仅适用于词汇,也适用于简单句子。在汉译英部分会教大家如何调用词霸翻译,但词霸只能翻译词语,为了进行单句翻译,我采用了调用百度翻译API的方法,不幸的是百度只给了200万字符限额,不过对个人的小项目应该足够。为了方便大家使用,拼音转汉语部分给出了大小写以及title三种输出方式。

加载R包

  
    
    
    
  1. library(rvest)

  2. library(stringr)

  3. library(rjson)

  4. library(digest)

  5. library(jiebaR)

  6. library(jiebaRD)

  7. library(rlist)

抓取全部汉字及保存

网上大多方法算法过于复杂。如果有一个字库,具有所有中文对应拼音(常用汉字才1万多,所以速度方面不会有多大影响),那么就可以通过汉字返回所需要的拼音字母。在网上搜索的时候找到了一个字库,直接抓来用了。我们‘李’字以这个字库中汉字及拼音的表示方法,‘李li3'表示汉字‘李’,拼音为‘li',音调是3(这里只需要拼音)

  
    
    
    
  1. url='https://github.com/haiwen/seahub/blob/master/seahub/convert-utf-8.txt'

  2. web <- read_html(url)

  3. text=web%>%html_nodes('td:nth-child(2)')%>%html_text()%>%str_trim()

  4. saveRDS(text,'D://汉字.rds')

提取汉字

  
    
    
    
  1. text=readRDS('D://汉字.rds')

  2. onlytext=str_split(text,'')%>%unlist%>%str_match_all('[\u4e00-\u9fa5]')%>%unlist()

构造汉字-拼音|英语函数

下面代码块给出四个封装函数,fun实现汉语到英语的转换,funx调用百度API进行汉译英转换(需要申请百度翻译API),ciba使用词霸进行汉译英转换,funa是终极整句翻译函数,它有两个参数,x接受句子,y接受词语粘贴方式(如:以“/”粘贴)。

  
    
    
    
  1. #使用jiebaR设置分词引擎

  2. engine1 = worker()

  3. #汉语——拼音

  4. fun = function(x){

  5.  if(x %in% onlytext){

  6.    re=text[which(str_detect(text,x))]

  7.    lower=re%>%str_match('[a-z]{1,}')

  8.    title=re%>%str_match('[a-z]{1,}')%>%str_to_title()

  9.    upper=re%>%str_match('[a-z]{1,}')%>%str_to_upper()

  10.  }else{

  11.    lower=x%>%str_to_lower()

  12.    title=x%>%str_to_title()

  13.    upper=x%>%str_to_upper()

  14.  }

  15.  return(list(lower=lower,title=title,upper=upper))

  16. }

  17. #汉译英函数(百度API版)

  18. funx=function(x,fromLang,toLang){

  19.  appid = '你的API'

  20.  secretKey = '你的API密码'

  21.  fromLang = 'zh'

  22.  toLang = 'en'

  23.  salt=sample(32768:65536,1)

  24.  myurl = 'http://api.fanyi.baidu.com/api/trans/vip/translate'

  25.  q = x

  26.  q=segment(q , engine1)%>%str_c(collapse = '')

  27.  sign = paste0(appid,q,salt,secretKey)

  28.  hash <- digest(sign, algo="md5", serialize=F)

  29.  url=paste0(myurl,'?appid=',appid,'&q=',q,'&from=',fromLang,'&to=',toLang,'&salt=',salt,

  30.             '&sign=', hash)

  31.  re=read_html(url)%>%html_text()%>%fromJSON()

  32.  lang_from=re$trans_result[[1]]$src

  33.  lang_to = re$trans_result[[1]]$dst

  34.  return(list(lang_from=lang_from,lang_to=lang_to))

  35. }

  36. #汉译英函数(词霸版)

  37. ciba<-function(x){

  38.  link=url(paste0('http://dict.youdao.com/m/search?keyfrom=dict.mindex&vendor=&q=',

  39.                 iconv(x,to='UTF-8')),encoding='UTF-8')

  40.  readLines(link)->a

  41.  gsub('(<[^<>]*>)|(^ )|(\t)','',a)->a;gsub(' {2,}','',a)->a

  42.  head(a,-11)->a;tail(a,-35)->a;a[a!='']->a

  43.  paste(a,collapse='\n')->a

  44.  gsub('(\n *){2,}','\n',a)->a;gsub(' *\n *','\n',a)->a

  45.  print(str_split(a,pattern='\n'))

  46. }

  47. #整句转换

  48. funa=function(x,y){

  49.  xt=lapply(x%>%str_extract_all('[\u4e00-\u9fa5]|\\w')%>%unlist,fun)

  50.  lower=list.map(xt,lower)%>%unlist%>%str_c(collapse = y)

  51.  upper=list.map(xt,upper)%>%unlist%>%str_c(collapse = y)

  52.  title=list.map(xt,title)%>%unlist%>%str_c(collapse = y)

  53.  re = funx(x)

  54.  return(list(lang_from=x,Eng=re$lang_to,lower=lower,title=title,upper=upper))

  55. }

测试

  
    
    
    
  1. test1='我正在学习R语言'

  2. test2='南京市长江大桥欢迎你'

  3. funa(test1,' ')

  4. funa(test2,' + ')

  
    
    
    
  1. ciba('中国')

推荐阅读

微课|lattice:条形图

微课|lattice:直方图

趣事分享 | python与微信

基于R语言对《平凡的世界》人物进行挖掘

《春风十里不如你》人物关系挖掘

Python微课:用Python验证你的策略吧!——Zipline回测

Python微课:教你如何正确使用Python表白

Python微课 | Seaborn——Python优雅绘图(上)

Python微课 | Seaborn——Python优雅绘图(下)

【统计思想之终】——莫愁前路无知己,天下谁人不识君。

跟我学R爬虫|HTML基础与R语言解析

跟我学R爬虫|XML&XPath表达式与R爬虫应用

易图秒懂の机器学习诞生 奠基篇

易图秒懂の深度学习诞生 问题篇

易图秒懂の深度学习诞生 发展篇

更多微课请关注【数萃大数据】公众号,点击学习园地—可视化

欢迎大家关注微信公众号:数萃大数据

课程公告

网络爬虫与文本挖掘培训班【宁波站】

时间:2017年9月23日-25日

地点:维也纳国际酒店(机场店)

更多详情,请扫描下面二维码

登录查看更多
11

相关内容

【2020新书】实战R语言4,323页pdf
专知会员服务
102+阅读 · 2020年7月1日
【ACL2020】利用模拟退火实现无监督复述
专知会员服务
14+阅读 · 2020年5月26日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
226+阅读 · 2020年3月22日
《动手学深度学习》(Dive into Deep Learning)PyTorch实现
专知会员服务
120+阅读 · 2019年12月31日
Stabilizing Transformers for Reinforcement Learning
专知会员服务
60+阅读 · 2019年10月17日
下载 | 最全中文文本分类模型库,上手即用
机器学习算法与Python学习
30+阅读 · 2019年10月17日
R语言自然语言处理:文本分类
R语言中文社区
7+阅读 · 2019年4月27日
已删除
架构文摘
3+阅读 · 2019年4月17日
R语言自然语言处理:情感分析
R语言中文社区
16+阅读 · 2019年4月16日
R语言自然语言处理:关键词提取与文本摘要(TextRank)
R语言中文社区
4+阅读 · 2019年3月18日
R语言自然语言处理:词性标注与命名实体识别
R语言中文社区
7+阅读 · 2019年3月5日
手把手教你用R语言制作网络爬虫机器人(一)
R语言中文社区
4+阅读 · 2019年1月26日
word2vec中文语料训练
全球人工智能
12+阅读 · 2018年4月23日
隐马尔科夫模型 python 实现简单拼音输入法
Python开发者
3+阅读 · 2017年12月6日
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
Teacher-Student Training for Robust Tacotron-based TTS
Arxiv
18+阅读 · 2019年1月16日
Arxiv
6+阅读 · 2018年7月29日
Arxiv
14+阅读 · 2018年5月15日
Arxiv
8+阅读 · 2018年1月25日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
102+阅读 · 2020年7月1日
【ACL2020】利用模拟退火实现无监督复述
专知会员服务
14+阅读 · 2020年5月26日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
226+阅读 · 2020年3月22日
《动手学深度学习》(Dive into Deep Learning)PyTorch实现
专知会员服务
120+阅读 · 2019年12月31日
Stabilizing Transformers for Reinforcement Learning
专知会员服务
60+阅读 · 2019年10月17日
相关资讯
下载 | 最全中文文本分类模型库,上手即用
机器学习算法与Python学习
30+阅读 · 2019年10月17日
R语言自然语言处理:文本分类
R语言中文社区
7+阅读 · 2019年4月27日
已删除
架构文摘
3+阅读 · 2019年4月17日
R语言自然语言处理:情感分析
R语言中文社区
16+阅读 · 2019年4月16日
R语言自然语言处理:关键词提取与文本摘要(TextRank)
R语言中文社区
4+阅读 · 2019年3月18日
R语言自然语言处理:词性标注与命名实体识别
R语言中文社区
7+阅读 · 2019年3月5日
手把手教你用R语言制作网络爬虫机器人(一)
R语言中文社区
4+阅读 · 2019年1月26日
word2vec中文语料训练
全球人工智能
12+阅读 · 2018年4月23日
隐马尔科夫模型 python 实现简单拼音输入法
Python开发者
3+阅读 · 2017年12月6日
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
Top
微信扫码咨询专知VIP会员