写点什么

自然语言处理 _AI 文本翻译

作者:DS小龙哥
  • 2023-05-02
    重庆
  • 本文字数:6368 字

    阅读完需:约 21 分钟

1. 前言

在人工智能技术发展的推动下,机器翻译的水平在不断提高,翻译领域也取得了前所未有的成就。在翻译工作中,可以借助各种翻译系统或软件完成翻译任务,这样可以提高翻译的速度和准确度,提高了翻译工作的效率。有了机器翻译系统,从侧面推动了经济的发展,社会的进步,消除了世界人与人之间的语言障碍,沟通了整个世界,促进了交流,加快了全球化进程。


华为云推出的自然语言处理(Natural Language Processing,简称 NLP)是一款基于人工智能技术,针对各类企业及开发者提供的用于文本分析及挖掘的云服务,可以帮助用户高效的处理文本,常用于智能问答系统、文本分析、内容推荐、翻译等场景。


目前自然语言处理包含了以下相关的服务:


(1)自然语言处理基础(Natural Language Processing Fundamentals),为用户提供包括分词、命名实体识别、关键词提取、短文本相似度等自然语言相关的API,可用于智能问答、对话机器人、内容推荐、电商评价分析等场景中。
(2)语言生成(Language Generation,简称LG),为用户提供包括文本摘要等语言生成相关的API,可用于新闻摘要生成、文献摘要生成、搜索结果片段生成、商品评论摘要等场景中。
(3)语言理解(Language Understanding,简称LU),为用户提供包括文本分类、情感分析等语言理解相关的API,可用于情感分析、内容检测、广告识别等场景中。
(4)机器翻译(Machine Translation,简称MT),为用户提供快速准确的翻译服务,帮助用户跨语言沟通,可用于文档翻译等场景中。
复制代码


所具备的优势如下:


功能全面提供多种常用自然语言类的算法模型及解决方案,可覆盖不同行业的各类需求。
高效精准可快速分析大数据量的文本,深度理解文本语义,更加精准的挖掘出文本中的关键信息。
简单易用简单易用的API接口。无需下载SDK、购买服务器,支持跨平台调用。丰富的产品种类,可一站式开通、部署。
稳定可靠故障自动迁移,服务可用性达99.95%,保障业务连续。数据多副本,数据持久性99.99995%,保障数据不丢失。
复制代码


当前文章主要是介绍华为云自然语言处理里面的机器翻译接口,利用机器翻译开发一款语言翻译小工具,接下来就详细介绍机器翻译的接口详细使用办法。

2. 翻译工具运行效果

下面是利用华为云的文本翻译接口做的翻译工具效果:







实现的功能与其他常见的翻译工具差不多:




3. 文本翻译

官网对于帮助文本翻译接口的介绍链接:


https://support.huaweicloud.com/api-nlp/nlp_03_0024.html


3.1 翻译接口介绍

文本翻译是为了实现语种间的转换,对于用户输入原始语种的文本,转换为目标语种的文本。


当前华为云的文本翻译接口支持的语言列表如下:


zh 中文en 英文ja 日文ru 俄文ko 韩语fr 法语es 西班牙语de 德语ar 阿拉伯语pt 葡萄牙语auto 自动检测输入语种并翻译成目标语种,需要指定目标语种。
复制代码


文本翻译的请求接口与请求参数:


POST https://{endpoint}/v1/{project_id}/machine-translation/text-translation   Request Header:      Content-Type:application/json    X-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDTALBglghkgBZQMEAgEwgguVBgkqhkiG...   
Request Body: { "text": "欢迎使用机器翻译服务", "from": "zh", "to": "en", "scene":"common" }
复制代码


请求参数的说明:


3.2 在线调试

在线调试接口地址: https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=NLP&api=RunTextTranslation


编写代码前,可以通过在线调试接口体验接口的功能效果,了解参数的传递与返回参数的格式。



请求参数与响应参数格式如下:


请求体:{ "text": "你好,世界", "from": "zh", "to": "en", "scene": "common"}
响应体:{ "src_text": "你好,世界", "translated_text": "Hello, world", "from": "zh", "to": "en"}
复制代码

3.3 文本翻译计费说明

文档地址: https://www.huaweicloud.com/pricing.html?tab=detail#/nlp


3.4 文本翻译请求示例代码

(1)Python3 语言请求代码示例

# -*- coding: utf-8 -*-# 此demo仅供测试使用,建议使用sdk。需提前安装requests,执行pip install requestsimport requestsimport json
def nlp_demo(): url = 'https://{endpoint}/v1/{project_id}/machine-translation/text-translation' # endpoint和project_id需替换 token = '用户对应region的token' header = { 'Content-Type': 'application/json', 'X-Auth-Token': token } body = { 'text': '欢迎使用机器翻译服务', 'from': 'zh', 'to': 'en', 'scene': 'common' } resp = requests.post(url, data=json.dumps(body), headers=header) print(resp.text)
if __name__ == '__main__': nlp_demo()
复制代码

(2)Java 语言请求代码示例

import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.HttpURLConnection;import java.net.URL;

public class NLPDemo { public void nlpDemo() { try { //endpoint和projectId需要替换成实际信息。 URL url = new URL("https://{endpoint}/v1/{project_id}/machine-translation/text-translation"); String token = "对应region的token"; HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoInput(true); connection.setDoOutput(true); connection.addRequestProperty("Content-Type", "application/json"); connection.addRequestProperty("X-Auth-Token", token);
//输入参数 String text = "It is a good day"; String from = "en"; String to = "zh"; String body = "{\"text\":\"" + text + "\" ,\"from\":\"" + from + "\" ,\"to\":\"" + to + "\" ,\"scene\":\"common\"}";
OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); osw.append(body); osw.flush(); InputStream is = connection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); while (br.ready()) { System.out.println(br.readLine()); } } catch (Exception e) { e.printStackTrace(); } }
public static void main(String[] args) { NLPDemo nlpDemo = new NLPDemo(); nlpDemo.nlpDemo(); }}
复制代码

(3)C++语言(Qt)请求代码示例

//文本翻译void Widget::on_pushButton_translate_clicked(){    function_select=0;
QString requestUrl; QNetworkRequest request;
//设置请求地址 QUrl url; //一句话识别的请求地址 requestUrl = QString("https://nlp-ext.%1.myhuaweicloud.com/v1/%2/machine-translation/text-translation") .arg(SERVER_ID) .arg(PROJECT_ID); qDebug()<<"requestUrl:"<<requestUrl;
//设置数据提交格式 request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
//设置token request.setRawHeader("X-Auth-Token",Token);
//构造请求 url.setUrl(requestUrl); request.setUrl(url);
//待翻译的文本 QString src_text=ui->plainTextEdit_old->toPlainText(); //文本为空就不翻译 if(src_text.isEmpty())return;
//翻译的语种 QString src_text_type=ui->comboBox_old->currentText().section(' ',0,0); QString old_text_type=ui->comboBox_new->currentText().section(' ',0,0);
//设置请求参数 QString post_param=QString ("{" "\"text\": \"%1\"," "\"from\": \"%2\"," "\"to\": \"%3\"," "\"scene\": \"common\"" "}").arg(src_text).arg(src_text_type).arg(old_text_type);
qDebug()<<"请求URL:"<<post_param;
//发送请求 manager->post(request, post_param.toUtf8());}
复制代码

(4)成功响应示例

{    "src_text": "欢迎使用机器翻译服务",    "translated_text": "Welcome to use machine translation services",    "from": "zh",    "to": "en"}
复制代码

(5)失败响应示例

{    "error_code": "NLP.0101",    "error_msg": "Authentication failed. Verify the token."}
复制代码

4. Qt 代码实现


/*功能: 获取token*/void Widget::GetToken(){    //表示获取token    function_select=3;
QString requestUrl; QNetworkRequest request;
//设置请求地址 QUrl url;
//获取token请求地址 requestUrl = QString("https://iam.%1.myhuaweicloud.com/v3/auth/tokens") .arg(SERVER_ID);
//自己创建的TCP服务器,测试用 //requestUrl="http://10.0.0.6:8080";
//设置数据提交格式 request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json;charset=UTF-8"));
//构造请求 url.setUrl(requestUrl);
request.setUrl(url);
QString text =QString("{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":" "{\"user\":{\"domain\": {" "\"name\":\"%1\"},\"name\": \"%2\",\"password\": \"%3\"}}}," "\"scope\":{\"project\":{\"name\":\"%4\"}}}}") .arg(MAIN_USER) .arg(IAM_USER) .arg(IAM_PASSWORD) .arg(SERVER_ID);
//发送请求 manager->post(request, text.toUtf8());}


//解析反馈结果void Widget::replyFinished(QNetworkReply *reply){ QString displayInfo; int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
//读取所有数据 QByteArray replyData = reply->readAll();
qDebug()<<"状态码:"<<statusCode; qDebug()<<"反馈的数据:"<<QString(replyData);
//更新token if(function_select==3) { displayInfo="token 更新失败."; //读取HTTP响应头的数据 QList<QNetworkReply::RawHeaderPair> RawHeader=reply->rawHeaderPairs(); qDebug()<<"HTTP响应头数量:"<<RawHeader.size(); for(int i=0;i<RawHeader.size();i++) { QString first=RawHeader.at(i).first; QString second=RawHeader.at(i).second; if(first=="X-Subject-Token") { Token=second.toUtf8(); displayInfo="token 更新成功.";
//保存到文件 SaveDataToFile(Token); break; } } qDebug()<<displayInfo; return; }
//判断状态码 if(200 != statusCode) { //解析数据 QJsonParseError json_error; QJsonDocument document = QJsonDocument::fromJson(replyData, &json_error); if(json_error.error == QJsonParseError::NoError) { //判断是否是对象,然后开始解析数据 if(document.isObject()) { QString error_str=""; QJsonObject obj = document.object(); QString error_code; //解析错误代码 if(obj.contains("error_code")) { error_code=obj.take("error_code").toString(); error_str+="错误代码:"; error_str+=error_code; error_str+="\n"; } if(obj.contains("error_msg")) { error_str+="错误消息:"; error_str+=obj.take("error_msg").toString(); error_str+="\n"; } //显示错误代码 qDebug()<<error_str; } } return; }
//文本翻译 if(function_select==0) { //解析数据 QJsonParseError json_error; QJsonDocument document = QJsonDocument::fromJson(replyData, &json_error); if(json_error.error == QJsonParseError::NoError) { //判断是否是对象,然后开始解析数据 if(document.isObject()) { QString error_str=""; QJsonObject obj = document.object(); QString error_code;
if(obj.contains("translated_text")) { QString text=obj.take("translated_text").toString(); ui->plainTextEdit_new->setPlainText(text); } } } }}

//文本翻译void Widget::on_pushButton_translate_clicked(){ function_select=0;
QString requestUrl; QNetworkRequest request;
//设置请求地址 QUrl url; //一句话识别的请求地址 requestUrl = QString("https://nlp-ext.%1.myhuaweicloud.com/v1/%2/machine-translation/text-translation") .arg(SERVER_ID) .arg(PROJECT_ID); qDebug()<<"requestUrl:"<<requestUrl;
//设置数据提交格式 request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
//设置token request.setRawHeader("X-Auth-Token",Token);
//构造请求 url.setUrl(requestUrl); request.setUrl(url);
//待翻译的文本 QString src_text=ui->plainTextEdit_old->toPlainText(); //文本为空就不翻译 if(src_text.isEmpty())return;
//翻译的语种 QString src_text_type=ui->comboBox_old->currentText().section(' ',0,0); QString old_text_type=ui->comboBox_new->currentText().section(' ',0,0);
//设置请求参数 QString post_param=QString ("{" "\"text\": \"%1\"," "\"from\": \"%2\"," "\"to\": \"%3\"," "\"scene\": \"common\"" "}").arg(src_text).arg(src_text_type).arg(old_text_type);
qDebug()<<"请求URL:"<<post_param;
//发送请求 manager->post(request, post_param.toUtf8());}
复制代码

5. 总结

机器翻译的最大的优点就是速度快,输入一段文字,瞬间就能看到结果,特别是查询外文文献资料时,有个快速的翻译工具是非常方便的。目前,华为云除了提供了整段文字翻译接口外,还实现了对整篇文章的翻译,这样的速度是人工所不能比拟的。

发布于: 刚刚阅读数: 2
用户头像

DS小龙哥

关注

之所以觉得累,是因为说的比做的多。 2022-01-06 加入

熟悉C/C++、51单片机、STM32、Linux应用开发、Linux驱动开发、音视频开发、QT开发. 目前已经完成的项目涉及音视频、物联网、智能家居、工业控制领域

评论

发布
暂无评论
自然语言处理_AI文本翻译_三周年连更_DS小龙哥_InfoQ写作社区