写了一个自动用google翻译文档的工具

写了一个自动用google翻译文档的工具

features:

from googletrans import Translator
import sys
import docx

fname = sys.argv[1] if len(
    sys.argv) > 1 else r'F:\GoogleDriveSync3\jobrelated\The Fast Forward MBA in Project Management ( PDFDrive.com ).full.docx'


translator = Translator()
foname = fname + '-cn.docx'
doc = docx.Document(fname)
docdes = docx.Document(fname)

N = len(doc.paragraphs)
for i in range(N):
    print(1.0*i/N,)
    subCont = doc.paragraphs[i].text
    try:
        s = translator.translate(subCont, src='en', dest='zh-cn')
        docdes.paragraphs[i].add_run('\n' + str(s.text) + '\n')
    except Exception as e:
        print('except:', e)
        
docdes.save(foname)

from googletrans import Translator
import sys, os
import docx

fname = sys.argv[1] if len(
    sys.argv) > 1 else r'D:\Users\cutep\Downloads\Throw-Away-the-First-90-Days.docx'

def trans(fname):
    translator = Translator()
    foname = fname + '-cn.docx'
    doc = docx.Document(fname)
    docdes = docx.Document(fname)

    N = len(doc.paragraphs)
    NextTarget = 0.1
    i = 0
    while i<N:
        percentage = 1.0*i/N
        if i%10==0: print(percentage)
        if percentage>NextTarget:
            outputfile = '%s-%.2f-cn.docx'%(fname, NextTarget)
            print(outputfile)
            docdes.save(outputfile)
            NextTarget = NextTarget + 0.1

        spacer = '\n========================\n'
        spacer_short = '========================'
        subCont = doc.paragraphs[i].text
        j = i+1
        while len(subCont)<4500 and j<N:
            subCont = subCont + spacer + doc.paragraphs[j].text
            j = j+1
        print(i,j)
        if subCont.strip():
            #try:
            s = translator.translate(subCont, src='en', dest='zh-cn')
            ss = s.text.split(spacer_short)
            assert len(ss)==j-i, '%d, %d'%(len(ss), j-i)
            for k in range(j-i):
                docdes.paragraphs[k+i].add_run('\n' + ss[k] + '\n')
            #except Exception as e:
            #    print('except:', e)
        i = j

    docdes.save(foname)

if __name__ == '__main__':
    if os.path.isfile(fname):
        trans(fname)
    else:
        from multiprocessing import Process

        ps=[]
        for filename in os.listdir(fname):
            if filename.lower().endswith('.docx'):
                p = Process(target=trans, args=(fname + '\\' + filename,))
                p.start()
                ps.append(p)

        for p in ps:
            p.join()

posted on   cutepig  阅读(301)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
历史上的今天:
2019-10-05 # 61条面向对象设计的经验原则-《OOD启思录》Arthur J.Riel
2019-10-05 软件人员推荐书目(都是国外经典书籍!!!)
2019-10-05 名句,感悟,鸡汤
2019-10-05 t420 win7 硬盘安装ubuntu 10.04 LTS 备忘
2019-10-05 智能家居
2019-10-05 整理的学习资料
2014-10-05 baby用品

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示