首页 > 其他分享 >#yyds干货盘点#【愚公系列】2023年04月 .NET CORE工具案例-多语言离线翻译系统

#yyds干货盘点#【愚公系列】2023年04月 .NET CORE工具案例-多语言离线翻译系统

时间:2023-04-10 14:03:38浏览次数:55  
标签:yyds 翻译 04 text app 离线 result translation

前言

1.在线翻译

在线翻译,一般是指在线翻译工具,如百度翻译、阿里翻译1688或Google翻译等。这类翻译工具的作用是利用计算机程序将一种自然语言(源语言)转换为另一种自然语言(目标语言)。其原理是依托海量的互联网数据资源和自然语言处理技术,在数百万篇文档中查找各种模式,以求解最佳翻译。

这种在大量文本中查找各种范例的过程称为“统计机器翻译”。由于译文是由机器生成的,因此并不是所有的译文都是完美的。这就是为什么翻译的准确性有时会因语言的不同而有所差异。

2.离线翻译

离线翻译是指在没有联网的情况下仍然可以运行翻译功能,这就需要你的本地电脑中有离线翻译包!只有有了离线翻译包,离线翻译功能才能正常使用。

一、多语言离线翻译系统

1.开发环境

  • 系统环境:WIN11
  • 开发环境:VS2022
  • 开发语言环境:Python3.9 + .NET 7

2.准备离线翻译包

离线翻译包网站:https://huggingface.co/Helsinki-NLP

在这里插入图片描述 Models里面有上千个语言模型,根据自己需要进行下载 在这里插入图片描述

此处,我选了二个模型,分别是英汉/汉英的翻译模型。 在这里插入图片描述

3.准备python代码

# 离线翻译服务代码
import os
from flask import Flask, request
from gevent import pywsgi
from transformers import pipeline, AutoModelWithLMHead, AutoTokenizer
import warnings, requests
warnings.filterwarnings('ignore')

try:
    print('\n\n 翻译服务 Designed by:yg \n\n\n')
    print('正在加载【汉语-英语】翻译模型... ...')
    
    # 英文翻译成中文
    # AutoModelForSeq2SeqLM.from_pretrained
    model = AutoModelWithLMHead.from_pretrained("Helsinki-NLP/opus-mt-en-zh")
    tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-en-zh")
    translation = pipeline("translation_en_to_zh", model=model, tokenizer=tokenizer)
    
    #text = "Student accommodation centres, resorts"
    #translated_text = translation(text, max_length=40)[0]['translation_text']

    print('正在加载【英语-汉语】翻译模型... ...')
    # 中文翻译成英文
    model_zh2de = AutoModelWithLMHead.from_pretrained("Helsinki-NLP/opus-mt-zh-en")
    tokenizer_zh2de = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-zh-en")
    translation_en2zh = pipeline("translation_zh_to_en", model=model_zh2de, tokenizer=tokenizer_zh2de)
    
    app = Flask(__name__)

    @app.route('/yg-translater', methods=['POST'])
    def translate():
        mod = request.form['mod']
        text = request.form['text']

        if mod == 'en2zh':
            result = translation(text, max_length=10240)[0]['translation_text']
            return result
        if mod == 'zh2en':
            result = translation_en2zh(text, max_length=10240)[0]['translation_text']
            return result

    print('翻译服务已启动,请通过api形式访问该服务地址:http://127.0.0.1:16888/yg-translater')
    server = pywsgi.WSGIServer(('0.0.0.0', 16888), app)
    server.serve_forever()

except:
    print('翻译服务存在异常... ...')


注意必须需要多安装下面包,不然会报错

pip install sentencepiece

在这里插入图片描述 启动程序会自动加载模型 在这里插入图片描述 下载的模型,会自动下载到当前用户文件夹下,具体效果如下图所示。所以如果某个服务器没有外网,也可以直接拷贝该.cache文件夹到指定服务器下面的某用户下,也可以被识别 在这里插入图片描述

4.调试翻译结果

打开Apifox做个接口测试,对应工具还有postman等等大家可以根据自己的喜欢选择。

1、英文译中文 在这里插入图片描述 Sharp tools make good work(工欲善其事,必先利其器)似乎有点不尽人意

2、中文译英文

在这里插入图片描述 工欲善其事,必先利其器(If you want to work well, you'll be able to use it first.)

5.Python翻译服务对接到.NET Core

Program.cs

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
//注入HttpClient
builder.Services.AddHttpClient();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseAuthorization();


app.MapControllers();

app.Run();

在这里插入图片描述

.NET Core 注入IHttpClientFactory。然后写个简单的测试功能,直接看以下代码:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Diagnostics;

namespace Translate.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class TranslationController : ControllerBase
    {
        IHttpClientFactory _httpClientFactory;

        public TranslationController(IHttpClientFactory httpClientFactory)
        {
            _httpClientFactory = httpClientFactory;
        }

        /// <summary>
        /// 测试翻译
        /// </summary>
        /// <param name="mod">模式  zh2en   en2zh  de2zh  zh2de</param>
        /// <param name="text"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult Test(string url,string mod,string text)
        {
            string result = string.Empty;
            using (HttpClient client = _httpClientFactory.CreateClient())
            {
                try
                {
                    client.Timeout = new TimeSpan(0, 0, 100);
                    client.DefaultRequestHeaders.Add("User-Agent", @"Mozilla/5.0 (compatible; Baiduspider/2.0)");
                    client.DefaultRequestHeaders.Add("Accept", @"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
                    FormUrlEncodedContent data = new FormUrlEncodedContent(new Dictionary<string, string>() {
                        { "mod",mod},
                        { "text",text}
                    });
                    HttpResponseMessage res = client.PostAsync(url, data).Result;
                    if (res.IsSuccessStatusCode && res.StatusCode == System.Net.HttpStatusCode.OK)
                    {
                        result = res.Content.ReadAsStringAsync().Result;
                    }
                    else
                    {
                        result = $"访问翻译服务错误:Error";
                    }
                }
                catch (Exception ex)
                {
                    result = "访问翻译服务错误:"+ ex.Message;
                }
            }
            return Ok(result);
        }
    }
}

在这里插入图片描述 通过自带的swagger测试效果 在这里插入图片描述 得到结果 在这里插入图片描述

标签:yyds,翻译,04,text,app,离线,result,translation
From: https://blog.51cto.com/u_15437432/6180651

相关文章

  • #yyds干货盘点#【愚公系列】2023年04月 .NET CORE工具案例-分布式服务的健康检查系统
    前言1.健康检查系统来源背景互联网产品对用户体验提出了很高的要求,但常常由于技术侧原因,发生服务响应慢或者服务不可用等一系列影响用户体验的问题,导致业务中断,影响收入。影响服务不可用和响应慢的因素很多,可能是服务硬件损坏、光纤被挖断,可能是请求量过大导致数据库CPU负载、磁......
  • JavaSE04流程控制语句
    第一章流程控制语句在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。1.1流程控制语句分类​ 顺序结构​ 判断和选择结构(if,switch)​ 循环结构(f......
  • ubuntu22.04 安装中文字体
    安装中文字体sudoapt-getinstallttf-wqy-microhei#文泉驿-微米黑sudoapt-getinstallttf-wqy-zenhei#文泉驿-正黑sudoapt-getinstallxfonts-wqy#文泉驿-点阵宋体vimrc#cat/etc/vim/vimrc....setfileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936set......
  • ubuntu22.04 添加开机启动脚本
    在目录/etc/init.d/目录新建脚本sudovim/etc/init.d/startup.sh#!/bin/bash#Onlyfortesttouch/root/1.txt添加执行权限sudochmod+x/etc/init.d/startup.sh添加启动脚本sudoupdate-rc.dstartup.shdefaults90查看服务列表sudoservice--status-all测试是......
  • 【2023-04-08】连岳摘抄
    23:59我们没有权利假借后天的给予对别人颐指气使,也没有理由为后天的际遇而自怨自艾。在人之上,要视别人为人;在人之下,要视自己为人。                                             ......
  • 【2023-04-09】连岳摘抄
    23:59要想了解一个人,需要逐渐地、仔细地观察他,以免造成偏见和误解,那是过后很难纠正和挽回的。                                                 ——陀思妥耶夫斯基......
  • 20230409-Python-字符串-day6
    字符串4月9字符串是python中最常见的数据类型,我们可以使用单引号''、双引号""、三引号""""""来创建字符串,只要为变量分配一个值即可#单引号var1='helloword'#双引号var2="helloPython"#三引号,可以换行,如果没有变量名,这就是一个多行注释var......
  • ubuntu20.04下VSCode无法输入中文解决方法
    解决方法:重新安装VSCode。我一开始是在ubuntu商店下载的,结果上网查了了下,商店里的VSCode是阉割版的,想要输入中文就要重新安装。安装流程:先删除再安装。1.可以在商店里已安装界面下选择移除,或者sudosnapremovecode。删除后仍会保留已打开文件的记录,所以不用担心。2.删除完......
  • 2023-04-09 有向图及相关算法
    有向图及相关算法1有向图的实现有向图的的应用场景社交网络中的关注互联网连接程序模块的引用任务调度学习计划食物链论文引用无向图是特殊的有向图,即每条边都是双向的改进Graph和WeightedGraph类使之支持有向图Graph类的改动WeightedGraph类的改动2有向图算......
  • #yyds干货盘点#聊一聊forEach函数
    前端循环中会用到forEach,其实forEach有很多问题:forEach无法终止或者跳出循环forEach()方法不支持使用break或continue语句来跳出循环或跳过某一项。如果需要跳出循环或跳过某一项,应该使用for循环或其他支持break或continue语句的方法。forEach删除自身元素,index不可被重置在forEac......