【愚公系列】2022年12月 .NET CORE工具案例-多语言离线翻译系统

news2025/2/6 7:08:26

文章目录

  • 前言
    • 1.在线翻译
    • 2.离线翻译
  • 一、多语言离线翻译系统
    • 1.开发环境
    • 2.准备离线翻译包
    • 3.准备python代码
    • 4.调试翻译结果
    • 5.Python翻译服务对接到.NET Core


前言

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测试效果
在这里插入图片描述
得到结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计django基于python的在线教育平台

项目介绍 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,在线教育平台当然也不能排除在外。在线教育平台是以实际运用为开发背景,运用软件工程原理和开发方法,采用django框架构建的一个管理系统。整个开发过程首…

fpga实操训练(小功能到模块开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 有过c、java编程语言经验的朋友&#xff0c;是否还记得曾经自己是如何学习编程语言的&#xff1f;一开始的时候&#xff0c;为了学习语法&#xff…

光电传感器调研报告

目录 前言&#xff1a; 一、理论基础——光电效应 二、光电传感器原理 三、光电元件 3.1光电管 3.2光敏电阻 四、光电传感器特性 4.1伏安特性 4.2光电特性 4.3光谱特性 五、光电传感器的应用 LED&#xff08;发光二极管&#xff09; 超声波传感器 光纤 六、总结 …

用Python赚钱的方法有哪些?

很多人想知道用Python赚钱的方法有哪些&#xff1f;Python很容易使用&#xff0c;应用性较强。可以通过使用Python开发小程序、抓取数据、游戏开发、兼职编程老师&#xff0c;发展副业的方式来赚钱。 用Python赚钱的方法&#xff1a; 1、某宝搜python程序   可以到某宝上搜&a…

中年人怎么转行做程序员,教你不怕年龄限制奔向高薪之路

网上很多人都说&#xff0c;人到了中年再去学编程已经来不及了&#xff0c;体力和精力都跟不上年轻人&#xff0c;做开发还要经常学习&#xff0c;然而中年人基本上有老下有小&#xff0c;根本没那么多时间去学习新技术&#xff0c;最重要的是&#xff0c;很多公司都有年龄限制…

学会这八个小技巧,让你软文推广更有效果!

软文营销已经出现在了我们的日常生活中&#xff0c;软文对于硬性的广告来说&#xff0c;具有独特的优势以及特殊性&#xff0c;受到了很多企业的青睐&#xff0c;其中还有一个重要的原因软文的花费是非常低的&#xff0c;适合一些中小型企业进行宣传推广,今天这篇文章就给大家讲…

vue学习笔记(五)-vuex

什么是vuex 1.概念&#xff1a;专门在Vue中实现集中式状态&#xff08;数据&#xff09;管理的一个Vue插件&#xff0c;对Vue应用中多个组件的共享状态进行集中式的管理&#xff08;读/写&#xff09;&#xff0c;也是一种组件间通信的方式&#xff0c;且适用于任意组件间通信…

此时此刻此景,“零”就代表着赢

编辑 | 阿冒 设计 | 沐由2022卡塔尔世界杯&#xff0c;终于步入到最强、最美和最终的华章&#xff0c;阿根廷与法兰西共同上演了世界杯决赛史上的一幕奇迹&#xff0c;意想不到的转折和蹉跎而至的结局&#xff0c;让人不得不感慨全球第一运动的巨大魅力。在这种世界顶级水准…

统计学习方法 | 决策树

一.一棵有理想的树 分类决策树模型是一种描述对实例进行分类的树形结构 决策树是通过一系列规则对数据进行分类的过程 步骤 ①构建根节点 ②选择最优特征&#xff0c;以此分割训练数据集 ③若子集被基本正确分类&#xff0c;构建叶结点&#xff0c;否则&#xff0c;继续选…

java实验报告之模拟银行存取款业务

一个不知名大学生&#xff0c;江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2022.12.20 Last edited: 2022.12.20 目录 一、实验目的 二、实验内容 三、总体设计&#xff08;设计原理、设计方案及流程等&#xff09; 四…

医院导诊图怎么做,专业便捷、低成本的室内电子地图绘制平台!

目前的医院综合性强&#xff0c;面积大&#xff0c;科室多&#xff0c;布局复杂&#xff0c;病患在就医过程中&#xff0c;往往因为对医院各科室与区域分布不清晰而找不到方向&#xff0c;多走冤枉路&#xff0c;耗费时间&#xff0c;影响就医体验。上海懒图信息科技有限公司上…

轻量级网络模型MobileNet发展脉络(V1-V2-V3)

卷积神经网络发展 卷积神经网络被广泛应用在图像分类、目标检测等视觉任务中&#xff0c;并取得了巨大的成功。然而&#xff0c;卷积神经网络通常需要较大的运算量和内存占用&#xff0c;在移动端以及嵌入式设备等资源受限的环境中受到限制&#xff0c;因此需要进行网络压缩。从…

虹科案例 | 如何快速精准监测打桩机打桩深度?

想要精准测量打桩设备每个桩的测量深度&#xff0c;以正确设置多排电池板的太阳能农场&#xff1f;但是由于测量环境恶劣&#xff0c;导致普通传感器无法正常工作&#xff1f;那快了解一下我们的虹科Dimetix激光测距传感器吧&#xff0c;它可以完美解决上述问题&#xff01; 一…

NFC技术的特点与应用

NFC技术能给我们的生活带来极大的便利&#xff0c;能够用于乘车、购物、交换信息、刷门禁卡&#xff0c;可以说它能够应用到我们生活的方方面面。 但是&#xff0c;NFC到底是谁发明的&#xff1f;什么时候发明的&#xff1f;我们就来了解一下。 NFC的中文全称为近场通信技术&…

85%的攻击现在使用加密通道

©网络研究院 加密攻击仍然是全球各国面临的一个重大问题&#xff0c;美国、印度和日本的攻击数量在过去12个月中增长最快。 此外&#xff0c;与2021年相比&#xff0c;南非的TLS/SSL攻击显著增加。 Zscaler的安全研究和运营副总裁表示:“随着组织网络防御的成熟&#x…

22-12-19 西安 vue-cli(01) vue-cli脚手架、组件化编程、vue-router路由

"对A&#xff0c;我还剩一张牌啦&#xff01;" "呃。。。要不起" 周六&#xff08;12-03&#xff09;&#xff0c;早上刷到印度的三相神。梵天&#xff0c;毗湿奴&#xff0c;湿婆&#xff0c;看来很多个相关的视频介绍&#xff0c;结果睡觉&#xff08;不…

蓝桥杯题目类型总结

搜索类 BFS 大胖子走迷宫&#xff08;简单&#xff09;&#xff08;2019国赛&#xff09; 迷宫与陷阱&#xff1a;&#xff08;中等2018国赛&#xff09; 迷宫与陷阱&#xff1a;&#xff08;中等2018国赛&#xff09; 迷宫与陷阱&#xff1a;&#xff08;中等2018国赛&…

安卓PorterDuffXfermode之正片叠底 PorterDuff.Mode.MULTIPLY

setXfermode Paint#setXfermode()接口是在绘制时设置画笔的图形混合模式的,下面是官网的介绍&#xff1a; public Xfermode setXfermode (Xfermode xfermode) Set or clear the transfer mode object. A transfer mode defines how source pixels (generate by a drawing com…

three.js之旋转成型(车削缓冲几何体)

文章目录简介例子解释专栏目录请点击 简介 一条曲线围绕空间中的某个轴进行旋转&#xff0c;会形成一个几何体这个在three.js中也是可以实现的&#xff0c;主要就是使用到了three.js中的LatheGeometry&#xff0c;官网 例子 <!DOCTYPE html> <html lang"en&qu…

SpringBoot2.X+Vue+UniAPP 全栈开发医疗小程序 中间件搭建

文章目录一、安装Docker环境1. 关闭SELINUX服务2. 更新yum程序3. 安装Docker4. 管理Docker二、搭建HBasePhoenix大数据平台2.1. 加载镜像2.2. 创建容器2.3. 创建逻辑库2.4. 创建数据表与导入数据2.5. 配置JDBC连接信息三、Redis服务3.1. 加载镜像3.2. 配置文件3.3. 创建Redis容…