教你如何优雅的用R语言调用有道翻译

浏览: 1783

最近刚发现了个有趣的包,一个R语言发烧友开发了R语言与有道在线翻译的接口,可能这位大神也是一个受够了每天打开网页狂敲键盘查词的罪,索性自己动手,从此丰衣足食。


感觉这种性格,跟我超级像哈哈,可是我目前还没有那种说干就干底气,达不到开发包的水平,以后要是学会了,一定要多贡献一些偷懒神器!

以下是代码思路,这里我提供两种方法,一种是集合包内翻译函数和for循环,算是笨方法。另一种是对该包封装的函数源码进行了稍许调整,使得输出更加和谐一些。

library("RYoudaoTranslate")

鉴于在线调用有道翻译服务需要自己现在有道词典的开放平台免费注册开发者服务并获取有限量调用服务的API账号密码,每日限调用6000次。注册地址如下:

http://fanyi.youdao.com/openapi?path=data-mode


以下是该包官方文档提供的免费账号密码,试了一下还能用,感觉大神还是很够意思的,提供了好用的产品不说,还自己分享了免费账号。

apikey = "498375134"

keyfrom = "JustForTestYouDao"

随机生成了五个单词:

word<-c("weather","father","apple","like","hate")

方法一:

url<-paste("http://fanyi.youdao.com/openapi.do?keyfrom=JustForTestYouDao&key=498375134&type=data&doctype=json&version=1.1&q=",word,sep="")

url<-youdaoUrl(word=word,api="498375134",keyfrom="JustForTestYouDao")

以上两句等价。

Res<-c()

for( i in word){

     Res[i] = youdaoLookUp(i,api="282671603",keyfrom="fy1991--421fy")

    }

以上使用for循环,结合包内的查询函数,可获取查询结果向量。

Clipboard Image.png

其实我是觉得这样的不加筛选的输出不够友好,看了下源码里面的封装函数,稍微做了些改动,以下是方法二。

方法二:


youdaoUrl = function(word){

paste("http://fanyi.youdao.com/openapi.do?keyfrom=fy1991--421fy&key=282671603&type=data&doctype=json&version=1.1&q=",word,sep="")

}

youdaoTranslate<-function(word){

  url = getURL(youdaoUrl(word))

  obj = fromJSON(url) 

  result=paste0(obj$web[[1]]$value,collapse=";")

  return(result)

}


以上构造了两个函数,一个提供单词的URL地址匹配,一个提供查询结果。

sapply(word,youdaoTranslate,simplify=TRUE)

这里结果摒弃for循环,使用内置的apply组函数sapply,懂行的都知道为什么!

Clipboard Image.png

以上经过我的进一步筛选,结果更加简洁,实用。

如果是遇到大批量的翻译需求,这种方式还是很能提高效率的,不过我还没有测试中文单词的翻译效果,有兴趣的大家可以自己玩。

你以为到这里就结束了吗? NO!

后面还有好戏呢!

其实微软的excel更新至13版以后,也提供了调用有道在线翻译的服务。而且使用比较简单。以下是函数语句,不要被冗长的各种参数吓到了,你需要改的只是其中的单元格引用。(本例中位于中间位置的A2,记得用的时候是相对引用,否则填充后只能翻译首个单元格内容)。

本小编已经测试过了翻译结果,中英文互译效果相当棒,但是限制是:

单词翻译效果好,句子不行,水平还不如小编我,即便是那种带空格的短句、地名、人名也够呛。

=FILTERXML(WEBSERVICE("http://fanyi.youdao.com/translate?&i="&A2&"&doctype=xml&version"),"//translation") 

Clipboard Image.png

带函数的测试文件待我推送后,会传到QQ群共享中,下载后直接复制该单元格引用就OK了。

推荐 2
本文由 EasyCharts 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册