使用Python制作一个翻译器

 更新时间:2025年02月17日 09:33:45   作者:aiweker  
这篇文章主要为大家详细介绍了如何使用Python实现一个中英翻译器,输入中文或者英文,输出对应的英文或者中文,有需要的小伙伴可以参考一下

一、用Python做一个翻译器

之前有分享过gradio制作web App,我们今天就基于此做一个翻译器。文末有试用访问哦,欢迎点击。

1.产品说明

实现一个中英翻译器,输入中文或者英文,输出对应的英文或者中文,目的是给学习英文的用户,提供单词解释服务。使用方式为手机端为主,PC也可以支持。

初步界面设计如下:

2.gradio前端布局

import numpy as np
import gradio as gr
import os
from fastapi import FastAPI
import requests
import json
import jieba

with gr.Blocks(title="aiweker") as wekerapp:
    gr.Markdown("## 微客翻译")
    with gr.Row():
        translate_output = gr.Textbox(
                        label="结果在这里",
                        lines=10
                    )
    with gr.Row():
        translate_txt = gr.Textbox(show_label=False, placeholder="输入你要的单词,中文或者英文").style(container=False)

    with gr.Row():
        with gr.Column(scale=1):
            translate_button = gr.Button("提交")

gradio提供的产品说明设计中的组件,包括文本框(Textbox)和 按钮(Button)。由于优先支持手机端显式,布局上一行布局为主,一行一个组件。

3.翻译器实现

如何实现翻译功能,可以访问百度翻译功能,间接实现翻译功能。通过分析可以通过https://fanyi.baidu.com/sug可以实现翻译功能。接口返回多个key-value键值对

def translate(input_text):
    url = "https://fanyi.baidu.com/sug"
    headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
    data = {"kw": input_text}
    rsp = requests.post(url=url, headers=headers, data=data)
    data = json.loads(rsp.content.decode())
    return data

​​​​​​​# {'errno': 0, 'data': [{'k': '清华大学', 'v': '名. Tsinghua University'}]}

4.gradio功能调用

为了说明每一个单词的解释,我们接入中文分词jieba进行分词。

def translate_process(input_text):
    result = []
    if len(input_text)< 3:
        seg_list = [input_text]
    else:
        seg_list = jieba.cut(input_text, cut_all=False)
    for text in seg_list:
        data = translate(text)
        for ds in data.get('data', []):
            result.append("{}: {}".format(ds.get('k'),ds.get('v')))
            break
    return "\n".join(result)

​​​​​​​translate_button.click(translate_process, inputs=translate_txt, outputs=translate_output)

click将实现按钮的点击事件,输入前端中的text,输出结果也是text组件,处理过程为translate_process,每个分词的解释。

执行python文件就可以部署了。

python -u app.py

5.总结和下一步

这里分享一个简单的app应用开发,从产品设计、代码开发到部署。当然这只是一个简单的demo,再做产品时出来实现功能外,还要考虑市场因素,你可以实现一个功能,但是市场已经有类似的产品,你的产品有什么独特性,有没有解决别人没有解决的问题。

下一步计划:

  • 部署上的优化,多进程部署
  • 增加输入图片翻译功能,可以通过手机拍摄,返回翻译结果

二、用Python做一个翻译器进阶篇

1. 多进程部署

我们知道,python的多线程实现其实不能很好的发挥多CPU的计算能力,如果有多核CPU的话建议采用多进程部署。对于python程序可以有很多种方式来多进程部署,如multiprocessing,Ray,Mars等。而对于web app部署用的gunicore+uvicore,负载均衡还会加上nginx。

Gunicorn (Green Unicorn)是一个基于Python的WSGI(Web Server Gateway Interface) HTTP服务器,它是一个开源的工具,在大量的Python Web应用中被广泛使用,例如 Django、Flask等。在Gunicorn中,使用worker来处理客户端的请求,可以根据配置启动多个worker用来处理请求,同时也支持在同一端口上使用多个worker。

Gunicorn可以使用多个进程在多个CPU上同时运行,提高Web应用的并发能力。它具有以下特点:

1.高可靠性:Gunicorn使用多进程方式运行,任何一个进程出现问题都不会影响整个应用的运行,进程间异常自动重启。

2.高性能:Gunicorn使用高效的异步I/O机制,能够处理高并发请求。

3.易于部署:Gunicorn可以通过命令行简单地启动应用程序,也可以与Nginx等Web服务器配合使用。

4.高安全性:Gunicorn支持SSL/TLS加密传输,可对数据进行加密保护,保障数据的安全性。

与之相比,Uvicorn 是一个基于 ASGI(Asynchronous Server Gateway Interface) 的 Web 服务器,它也是用 Python 编写的,主要的特点是支持异步请求和响应。Uvicorn 在处理高负载的 Web 应用程序时表现出色,因为它能够利用 Python 异步编程模型来处理大量并发请求,在响应速度和处理效率上都比 Gunicorn 要快。

通常的组合是Gunicorn+uvicore, 或者Gunicorn+greenlet(异步)

针对翻译这个小app部署,gradio提供了将app嵌入到FastAPI中,而FastAPI可用gunicore+uvicore部署,具体如下:

# 文件名为translate.py
from fastapi import FastAPI
import gradio as gr
app = FastAPI()

with gr.Blocks() as demo:
    pass
app = gr.mount_gradio_app(app, demo, path="/translate")

# gunicorn translate:app -w 4 -k uvicorn.workers.UvicornWorker

上面的例子为启动4个进程,接受外部请求。

2. 添加图片识别功能

为了增加翻译功能的使用场景,增加了一个上传或者拍照识别的功能,以区别其他的产品。

实现这个功能需要:

  • 增加一个上传图片的前端界面
  • 图片ocr识别功能

同样的,上传图片的前端界面采用gradio来编写,如下:

with gr.Blocks(title="aiweker") as wekerapp:
    gr.Markdown("## 微客翻译")
    with gr.Row():
        translate_output = gr.Textbox(
                        label="结果在这里",
                        lines=10
                    )
    with gr.Row():
        translate_txt = gr.Textbox(show_label=False, placeholder="输入你要的单词,文或者英文").style(container=False)

    with gr.Row():
        with gr.Column(scale=1):
            translate_button = gr.Button("提交")

    with gr.Row():    
        with gr.Accordion("点这里提交图片翻译", open=False):
            translate_image_input = gr.Image()
            translate_image = gr.Button("提交图片") 

    translate_button.click(translate_process, inputs=translate_txt, outputs=translate_output)
    translate_image.click(ocr_process, inputs=translate_image_input, outputs=translate_output)

其中:

translate_image是图片提交按钮,click事件的输入为图片,输出为翻译后的文本(即对应ocr_process输入参数和输出参数)

而OCR图片识别,采用开源OCR paddleocr。安装和使用参见:

https://github.com/PaddlePaddle/PaddleOCR

需要注意的为了提供识别性能,上传的图片需要resize到一个比较小的尺寸如320。

到此这篇关于使用Python制作一个翻译器的文章就介绍到这了,更多相关Python翻译器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 举例讲解Python程序与系统shell交互的方式

    举例讲解Python程序与系统shell交互的方式

    这篇文章主要介绍了Python程序与系统shell交互的方式,举了一个非常简单的hello world的例子,需要的朋友可以参考下
    2015-04-04
  • Django+python服务器部署与环境部署教程详解

    Django+python服务器部署与环境部署教程详解

    这篇文章主要介绍了Django+python服务器部署与环境部署教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • 基于tf.shape(tensor)和tensor.shape()的区别说明

    基于tf.shape(tensor)和tensor.shape()的区别说明

    这篇文章主要介绍了基于tf.shape(tensor)和tensor.shape()的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python实现从概率分布中随机采样

    Python实现从概率分布中随机采样

    这篇文章主要介绍了通过几个机器学习中最常用的概率分布为例,来看看如何从一个概率分布中采样,文章中的代码对我们的工作或学习具有一定价值,感兴趣的朋友可以了解一下
    2021-12-12
  • python 实现提取log文件中的关键句子,并进行统计分析

    python 实现提取log文件中的关键句子,并进行统计分析

    今天小编就为大家分享一篇python 实现提取log文件中的关键句子,并进行统计分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python曲线拟合多项式深入详解

    Python曲线拟合多项式深入详解

    这篇文章主要给大家介绍了关于Python使用scipy进行曲线拟合的相关资料,Scipy优化和拟合采用的是optimize模块,该模块提供了函数最小值(标量或多维)、曲线拟合和寻找等式的根的有用算法,需要的朋友可以参考下
    2022-11-11
  • python pip安装包出现:Failed building wheel for xxx错误的解决

    python pip安装包出现:Failed building wheel for xxx错误的解决

    今天小编就为大家分享一篇python pip安装包出现:Failed building wheel for xxx错误的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python实现各进制转换的总结大全

    python实现各进制转换的总结大全

    这篇文章主要给大家总结了python实现各进制转换的相关资料,其中包括字符串与十六进制转换、内置函数hex()与进制互转等相关内容,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-06-06
  • 浅谈keras中的后端backend及其相关函数(K.prod,K.cast)

    浅谈keras中的后端backend及其相关函数(K.prod,K.cast)

    这篇文章主要介绍了浅谈keras中的后端backend及其相关函数(K.prod,K.cast),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python生成词云的实现方法(推荐)

    python生成词云的实现方法(推荐)

    下面小编就为大家带来一篇python生成词云的实现方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论