Python实现英文课件翻译中文

  由于英语实在太渣渣,考试却要用英文课件,磕磕巴巴的写了一个Python的小程序,将PPT翻译成中英对照。
  采用了request模拟有道翻译移动版访问请求(百度存在反爬虫,第一次使用没有搞定,有道的中译英的反爬虫比较容易解决),调用python-pptx对PPT进行操作。
  Python实现翻译的功能CSDN很多资源,不过现在百度的反爬虫的问题没有看到解决的方法。
  python-pptx参考官网https://python-pptx.readthedocs.io/en/latest/index.html

@requires_authorization
from pptx import Presentation
from pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZE
from urllib import request, parse
import json
import time

def translate(search):

        # 源地址http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
        # 如果不把_o去掉会被产生errorcode:50,去掉后只能进行英译汉
        url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
        headers = {"user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Mobile Safari/537.36"}

        posData = {
        "i": search,
        "from": "en",
        "to": "zh-CHS",
        "smartresult": "dict",
        "client": "fanyideskweb",
        "salt": "15613392208262",
        "sign": "fb6fa92251d9bf98c31e7f9b5285869e",
        "ts": "1561339220826",
        "bv": "62188471f020213764ab67d1893204f7",
        "doctype": "json",
        "version": "2.1",
        "keyfrom": "fanyi.web",
        "action": "FY_BY_CLICKBUTTION"
        }

        data = parse.urlencode(posData).encode('utf-8')
        response = request.urlopen(url, data)
        html = response.read().decode('utf-8')
        translateResults = json.loads(html)
        translateResults = translateResults['translateResult'][0][0]
        time.sleep(5)
        return translateResults


prs = Presentation("C:\\Users\\82356\\Desktop\\新建 Microsoft PowerPoint 演示文稿.pptx")

# text_runs will be populated with a list of strings, one for each text run in presentation
text_runs = []


for slide in prs.slides:
    for shape in slide.shapes:
        if not shape.has_text_frame:
            continue
        for paragraph in shape.text_frame.paragraphs:
            s = ''
            st = []
            paragraph.bold = False
            tf = shape.text_frame
            # tf.auto_size = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPE
            for run in paragraph.runs:
                s += run.text
                if not s.isupper():
                    p = tf.add_paragraph()
                    p.text = translate(s)['tgt']

prs.save('nex.pptx')
for text_run in text_runs:
    print(text_run)

Python实现英文课件翻译中文_第1张图片

Python实现英文课件翻译中文_第2张图片

你可能感兴趣的:(工具)