使用Docker架设私有翻译服务

作为英语不怎么样的学术民工,高效的机翻软件是必备的.网页翻译,划词翻译等日常使用的工具对于学术阅读而言肯定是不够的,我需要快速地将整篇文献甚至整本专著翻译过来,再浏览判断有无阅读价值.但常用的翻译API服务,如百度,讯飞,Azure,Yandex,Google等,纷纷因为业务下线,不再允许白嫖,被墙等原因阵亡,因此我急需一个能完成大段文本翻译的,支持API以便于使用代码访问的,同时全部流程可以部署在本地的翻译服务.

终于功夫不负有心人,最近接触到了LiberTranslate,基本满足了我的所有需求.

官网地址:https://libretranslate.com/

进行本文的操作前,需要架设一台连接了主机网络的Ubuntu虚拟机并安装Docker,请参考教程:https://www.cnblogs.com/isakovsky/p/16732779.html

建议为虚拟机分配足够的硬盘空间,如果之前已经完成了前一步,但空间不够了,请参考如下教程以扩容空间:https://www.cnblogs.com/isakovsky/p/17437553.html

Docker镜像:https://hub.docker.com/r/libretranslate/libretranslate

拉取Docker镜像:docker pull libretranslate/libretranslate

然后运行容器: docker run -ti --rm -p 14514:5000 libretranslate/libretranslate --load-only zh,en

注意,LiberTranslate的默认端口是5000,为了防止冲突,建议映射到其他端口,比如我就将Docker的5000端口映射到了14514端口

创建镜像时会拉取语言模型,每个模型的体积都很大,下载还很慢,最后一个参数 --load-only zh,en 是只拉取中英文的翻译模型,如果需要,也可以添加de,es,fr,ru等语言包

然后会下载语言包,等待一段时间

做好至少下载一个小时的准备吧.

然后在主机上访问虚拟机的Host连接地址:翻译服务映射的端口

出现此界面,则说明Docker服务安装完成.

首页下方非常贴心地提示了API请求的语法,

但我更习惯用Python

import requests
import time
import json

outputFileName='out.tex'
translatedFileName='transed.tex'
text=open(outputFileName,'r',encoding='utf-8').readlines()
transurl = 'http://192.168.56.102:14514/translate'

def trans(q):
    data={
        'q':q,
        'source': "en",
        'target': "zh",
        'format': "text",
        'api_key': ""
    }

    response=requests.post(transurl,data)
    if response.status_code == 200:
        content=json.loads(response.text)
        translatedText=content['translatedText']
        return translatedText

with open(translatedFileName,'w',encoding='utf-8',buffering=1) as fout:
    for w in text:
        s=trans(w)
        print(s)
        fout.write(s)

 

posted @ 2023-05-28 15:38  Isakovsky  阅读(1487)  评论(4编辑  收藏  举报