用OpenAi 批量翻译PDF

1. 环境准备

1.1 安装必要的Python库

在使用该脚本前,需要安装以下Python库:

pip install python-docx openai

2. 使用说明

2.1 输入API Key和Base URL

在执行脚本时,首先需要输入OpenAI的API Key和可选的Base URL。

api_key = input("请输入API key: ")
base_url_input = input("请输入base URL (如果没有,请直接回车): ")

 

  • api_key:用于访问OpenAI API的密钥。
  • base_url_input:可选项,若未提供则使用默认URL。

2.2 设置并行线程数

根据需求设置并行处理的线程数,注意若出现故障或API限流问题,建议使用单线程。

xian_cheng_int = int(input("请输入线程数(线程数越多,单位时间内翻译的段落越多)(若出现故障/api限流问题,优先使用1个线程): "))

2.3 输入需要翻译的DOCX文件名

输入需要翻译的Word文档文件名(无后缀)。

file = input("当前文件夹的docx文件名(无后缀):")

2.4 脚本的主要功能

脚本会自动遍历文档中的所有段落,并使用OpenAI的GPT-3.5模型将其翻译为中文。翻译结果会保存在新的DOCX文件中。

3. 代码结构

3.1 translate_paragraph 函数

该函数用于翻译文档中的某一段落,并将翻译结果写回文档。

def translate_paragraph(j, number_paragraph):
    # 获取段落内容并调用API进行翻译
    # 将翻译后的内容写回文档并保存

 

3.2 main 函数

主函数,负责读取文档、管理翻译任务的多线程调度。

def main():
    # 读取用户输入的文件名并打开文档
    # 初始化段落索引列表
    # 管理多线程翻译任务

3.3 全局变量和锁

  • lock:全局锁,用于多线程环境下的数据同步。
  • doc:全局的文档对象。
  • my_json_data:全局的数据结构,存储段落的状态。

 

4.注意事项

  1. API Key的保护:确保API Key的安全,避免泄露。
  2. 文档格式:脚本假设文档中的每个段落都是独立的,如果有复杂的段落格式,可能需要调整代码。
  3. 线程数设置:根据实际需求和系统性能设置合适的线程数,避免过多线程导致系统负载过高或API限流。
  4. 错误处理:若遇到API调用超时或其他错误,脚本会跳过当前段落并继续处理下一个段落。

全部代码:

from docx import Document
from docx.shared import Pt
import openai
import threading
import time

# 获取用户输入的API key
api_key = input("请输入API key: ")

# 尝试获取用户输入的base URL,如果没有则使用默认值
base_url_input = input("请输入base URL (如果没有,请直接回车): ")

# 根据用户输入创建client实例
if base_url_input:  
    client = openai.OpenAI(api_key=api_key, base_url=base_url_input)
else:  
    client = openai.OpenAI(api_key=api_key)

# 获取用户输入的线程数
xian_cheng_int = int(input("请输入线程数(线程数越多,单位时间内翻译的段落越多)(若出现故障/api限流问题,优先使用1个线程): "))
print("客户端配置完成。")

# 创建全局锁
lock = threading.Lock()

def translate_paragraph(j, number_paragraph):
    global doc
    global lock

    # 获取段落的内容
    paragraph_text = doc.paragraphs[number_paragraph].text
    print(paragraph_text)

    # 创建对话列表
    message = [
        {"role": "system", "content": f"""Translate the following English (or other languages) into Chinese. If there is no text to translate, please copy the user's input as a reply. text:"{paragraph_text}" """}
    ]

    try:
        # 使用GPT-3.5对话模型进行翻译
        response = client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=message
        )
        translated_text = response.choices[0].message.content
        print(translated_text)

        with lock:
            # 获取段落的第一个字符的字体大小
            paragraph = doc.paragraphs[number_paragraph]
            font_size = paragraph.runs[0].font.size if paragraph.runs else Pt(11)

            # 清除段落内容并添加翻译后的内容
            paragraph.clear()
            new_content = paragraph.add_run(translated_text)
            new_content.font.size = font_size if font_size else Pt(11)

            # 保存修改后的文件
            doc.save('Translation_file.docx')
            my_json_data['ingT'].remove(j)
            print("已保存文件")
    except Exception as e:
        print(f"API调用超时或其他错误: {e}")

def main():
    global doc
    global my_json_data

    file = input("当前文件夹的docx文件名(无后缀):")
    print(file)

    # 打开已有的docx文件
    doc = Document(f'{file}.docx')

    docx_NT = [i + 1 for i in range(len(doc.paragraphs))]
    print(docx_NT)

    my_json_data = {
        'docx': f'{file}.docx',
        'ingT': [],
        'NT': docx_NT
    }

    while my_json_data['NT']:
        while len(my_json_data['ingT']) >= xian_cheng_int:
            print(f"达到{xian_cheng_int}线程")
            print("当前线程数:", len(my_json_data['ingT']))
            time.sleep(1)

        with lock:
            if not my_json_data['NT']:
                break
            j = min(my_json_data['NT'])
            my_json_data['ingT'].append(j)
            my_json_data['NT'].remove(j)

        print("正在处理段落:", j)
        number_paragraph = j - 1
        paragraph = doc.paragraphs[number_paragraph]

        if paragraph.text.strip():
            print("段落包含文字")
            threading.Thread(target=translate_paragraph, args=(j, number_paragraph)).start()
        else:
            print("段落不包含文字")
            with lock:
                my_json_data['ingT'].remove(j)

    print("翻译全部完成, 正在等待线程完成")

if __name__ == "__main__":
    main()

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用API OpenAI进行批量查询账户余额的HTML源码,我们需要先导入所需的库和模块。以下是一个简单的Python代码示例,该代码将使用OpenAI GPT生成HTML源码来批量查询账户余额。 ```python import openai def get_account_balance_html(accounts): html_code = "<html>\n<head>\n<title>Account Balances</title>\n</head>\n<body>\n" for account in accounts: # 使用OpenAI GPT生成查询账户余额的HTML源码 prompt = f"What is the balance of account {account}?" # 构建查询账户余额的提示 response = openai.Completion.create( engine="davinci", prompt=prompt, max_tokens=100, n=1, stop=None, temperature=0.7 ) balance = response.choices[0].text.strip() # 获取生成的账户余额 # 将账户余额添加到HTML源码中 html_code += f"<p>{account}: {balance}</p>\n" html_code += "</body>\n</html>" return html_code # 账户列表 accounts = ['A', 'B', 'C'] # 调用函数生成HTML源码 result_html = get_account_balance_html(accounts) # 打印结果 print(result_html) ``` 上述代码中,我们首先导入了OpenAI库。然后,我们定义了一个名为`get_account_balance_html`的函数,该函数接收一个账户列表作为参数,然后使用OpenAI GPT生成HTML源码。 在函数中,我们遍历每个账户,并使用OpenAI GPT生成查询账户余额的提示,并设置生成的最大令牌数、温度等参数。我们从生成的响应中提取账户余额,并将其添加到HTML源码字符串中。 最后,我们将生成的HTML源码返回并打印结果。 请注意,代码片段中的OpenAI API密钥和模型引擎设置需要根据您自己的具体情况进行修改和填充。还要记得在OpenAI GPT API上拥有足够的访问权限,以便能够成功使用api OpenAI批量查询账户余额的HTML源码。 ### 回答2: 要使用OpenAI API进行批量查询账户余额的HTML源码,你可以按照以下步骤进行操作。 首先,你需要创建一个HTML页面,并设置基本的结构和样式。在HTML的`<body>`标签内,可以添加一个表格来展示账户余额的结果。 接下来,使用JavaScript与OpenAI API进行通信。你可以使用`fetch()`函数发送GET请求到OpenAI的API端点,并提供账户余额查询的相关参数。 在请求中,你需要提供你的API密钥,以便进行身份验证。API密钥是你在OpenAI官方网站上创建账户时生成的。 当收到API的响应后,可以使用JavaScript处理返回的数据。你可以解析JSON格式的响应,并提取出账户余额信息。 最后,将提取出的账户余额信息动态添加到表格中,以便在HTML页面中展示出来。你可以使用JavaScript来生成HTML元素,并将其添加到表格的行中。 在整个过程中,你可以根据需要进行一些错误处理和数据验证。例如,确保API请求成功且返回了正确的数据,以及处理可能出现的错误信息。 总结: 以上是使用OpenAI API来批量查询账户余额的简要过程。你需要创建一个基本的HTML页面,使用JavaScript与OpenAI进行通信,并将查询结果动态展示在页面上。这样,你就可以通过查看HTML的源码来获取这个功能的实现细节。 ### 回答3: 要通过API OpenAI批量查询账户余额的HTML源代码,你可以使用以下方法: 首先,你需要使用特定的编程语言(如Python)来编写代码。在代码中,你需要导入OpenAI的相关库和模块,以便能够使用其提供的功能。 接下来,你需要创建一个函数或方法,用于进行账户余额的批量查询。该函数应包含以下步骤: 1. 引用OpenAI的API密钥:你需要使用OpenAI提供的API密钥来进行身份验证和授权。在代码中,你可以将API密钥保存在一个变量中,以便在后续步骤中使用。 2. 创建HTTP请求:使用HTTP库,例如Python中的`requests`库,创建一个GET请求,向OpenAI的服务器发送查询账户余额的请求。请求的URL应该是OpenAI的API服务地址加上相应的查询参数。 3. 发送请求并接收响应:发送创建的HTTP请求并等待服务器的响应。你可以使用`requests`库中的`get()`方法来发送请求,并使用`response`对象来接收响应。 4. 处理响应的HTML源码:一旦你收到服务器的响应,在`response`对象中,你可以通过调用`response.text`方法来获得响应的HTML源码。将该源码存储在一个变量中,以便进行进一步的处理和分析。 5. 处理账户余额数据:使用适当的解析库(如BeautifulSoup)来从HTML源码中提取所需的账户余额数据。通过分析HTML标记和类名,你可以使用解析库中的相应方法来获取所需的数据。 6. 输出或存储余额数据:最后,你可以将账户余额数据输出到控制台上,以供查看。如果需要,你还可以将数据存储到文件或数据库中,以备将来使用。 以上是使用API OpenAI批量查询账户余额的HTML源代码的基本步骤。具体的实现方式可能会依赖于所使用的编程语言和相关库的具体文档和示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值