跳转到主要内容

bilingual_book_maker 是一个使用 ChatGPT 帮助用户创建 epub/txt 文件和书籍多语言版本的 AI 翻译工具。

项目描述

中文 | English litellm

bilingual_book_maker

bilingual_book_maker 是一个使用 ChatGPT 帮助用户创建 epub/txt/srt 文件和书籍多语言版本的 AI 翻译工具。此工具专门用于翻译已进入公共领域的 epub 书籍,不适用于受版权保护的作品。在开始使用此工具之前,请查阅项目的 免责声明

image

支持的模型

gpt-4, gpt-3.5-turbo, claude-2, palm, llama-2, azure-openai, command-nightly, gemini。对于使用非 OpenAI 模型,请使用类 liteLLM() - liteLLM 支持上述所有模型。有关使用 liteLLM 的更多信息,请参阅此处:https://github.com/BerriAI/litellm/blob/main/setup.py

准备工作

  1. ChatGPT 或 OpenAI 令牌 ^令牌
  2. epub/txt 书籍
  3. 具有互联网访问权限或代理的环境
  4. Python 3.8+

使用

  • pip install -r requirements.txtpip install -U bbook_maker(可选)
  • 使用 --openai_key 选项指定 OpenAI API 密钥。如果您有多个密钥,请用逗号(xxx,xxx,xxx)分隔以减少由 API 调用限制引起的错误。或者,也可以设置环境变量 BBM_OPENAI_API_KEY
  • 提供了一个用于测试的示例书籍,test_books/animal_farm.epub
  • 默认的底层模型是 GPT-3.5-turbo,目前ChatGPT正在使用它。使用 --model gpt4 将底层模型更改为 GPT4。您还可以使用 GPT4omini
    • 需要注意的是,gpt-4 比较贵,但为了避免遇到速率限制,我们自动平衡在 gpt-4-1106-previewgpt-4gpt-4-32kgpt-4-0613gpt-4-32k-0613 之间的查询。
      • 如果您想使用OpenAI的特定模型别名(例如 gpt-4-1106-previewgpt-3.5-turbo-0125),可以使用 --model openai --model_list gpt-4-1106-preview,gpt-3.5-turbo-0125--model_list 接受用逗号分隔的模型别名列表。
    • 如果使用ChatGPTapi,您可以为每个发送给模型的段落添加一个上下文段落,使用 --use_context(见下文)。
  • 支持DeepL模型 DeepL Translator 需要付费获取token,使用 --model deepl --deepl_key ${deepl_key}
  • 支持DeepL免费模型 --model deeplfree
  • 支持Google Gemini 模型 --model gemini --gemini_key ${gemini_key}
  • 支持 Claude 模型,使用 --model claude --claude_key ${claude_key}
  • 支持 Tencent TranSmart 模型(免费),使用 --model tencentransmart
  • 支持 Ollama 自托管模型,使用 --ollama_model ${ollama_model_name}
    • 如果Ollama服务器不在localhost上运行,使用 --api_base http://x.x.x.x:port/v1 指向Ollama服务器地址
  • 使用 --test 选项预览结果(如果您尚未支付服务费)。注意,有限制,可能需要一些时间。
  • 设置目标语言,例如 --language "Simplified Chinese"。默认目标语言是 "Simplified Chinese"。通过辅助信息读取可用语言:python make_book.py --help
  • 使用 --proxy 选项指定用于互联网访问的代理服务器。输入类似 http://127.0.0.1:7890 的字符串。
  • 使用 --resume 选项在中断后手动恢复过程。
  • epub由html文件组成。默认情况下,我们只翻译 <p> 中的内容。使用 --translate-tags 指定需要翻译的标签。用逗号分隔多个标签。例如:--translate-tags h1,h2,h3,p,div
  • 使用 --book_from 选项指定电子书阅读器类型(目前只有 kobo 可用),并使用 --device_path 指定挂载点。
  • 如果您想更改api_base,例如使用Cloudflare Workers,使用 --api_base <URL> 支持它。注意:API URL应为'https://xxxx/v1'。引号是必需的。
  • 翻译完成后,将生成一个双语书名为 ${book_name}_bilingual.epub
  • 如果出现错误或您想通过按 CTRL+C 中断翻译,将生成一个名为 ${book_name}_bilingual_temp.epub 的书。您可以简单地将其重命名为任何想要的名称。
  • 如果您想翻译未标记的标签的电子书中的字符串,可以使用 --allow_navigable_strings 参数。这将把字符串添加到翻译队列中。注意:如果可能,最好寻找更标准化的电子书。
  • 要调整提示,请使用--prompt参数。对于user角色模板,有效的占位符包括{text}{language}。它支持几种配置提示的方式:如果您不需要设置system角色内容,可以简单地设置如下:--prompt "将{text}翻译成{language}."--prompt prompt_template_sample.txt(示例文本文件可在./prompt_template_sample.txt找到)。如果您需要设置system角色内容,可以使用以下格式:--prompt '{"user":"将{text}翻译成{language}", "system": "你是一名专业翻译。"}'--prompt prompt_template_sample.json(示例JSON文件可在./prompt_template_sample.json找到)。您还可以通过设置环境变量来设置usersystem角色提示:BBM_CHATGPTAPI_USER_MSG_TEMPLATEBBM_CHATGPTAPI_SYS_MSG
  • 使用--batch_size参数指定批量翻译的行数(默认为10,目前仅对txt文件有效)。
  • --accumulated_num在开始翻译前等待积累多少个token。gpt3.5限制总token数为4090。例如,如果您使用--accumulated_num 1600,那么openai可能会输出2200个token,其他系统消息和用户消息可能为200个token,1600+2200+200=4000,所以您接近了限制。您必须自己选择数值,在发送之前无法知道是否达到了限制。
  • --use_context提示模型创建一个三段总结。如果是翻译的开始,它将总结整个发送的段落(大小取决于--accumulated_num)。对于后续段落,它将修正总结以包括最新段落的详细信息,创建一个包含整个翻译作品重要细节的运行段落。这可以提高翻译的流畅性和一致性。此选项适用于所有ChatGPT兼容模型。
  • 使用--context_paragraph_limit在使用--use_context选项时设置上下文段落数量的限制。
  • 使用--temperature设置ChatGPTapi/gpt4/claude模型的温度参数。例如:--temperature 0.7
  • 使用--block_size将多个段落合并为一个块。这可能提高准确性并加快处理速度,但可能会干扰原始格式。必须与--single_translate一起使用。例如:--block_size 5
  • 使用--single_translate仅输出翻译后的书籍,而不创建双语版本。
  • --translation_style示例:--translation_style "color: #808080; font-style: italic;"
  • --retranslate --retranslate "$translated_filepath" "file_name_in_epub" "start_str" "end_str"(可选)
    从start_str到end_str的标签重新翻译:python3 "make_book.py" --book_name "test_books/animal_farm.epub" --retranslate 'test_books/animal_farm_bilingual.epub' 'index_split_002.html' '尽管目前书籍短缺' '这种事情不是一个好兆头。显然'
    重新翻译start_str的标签:python3 "make_book.py" --book_name "test_books/animal_farm.epub" --retranslate 'test_books/animal_farm_bilingual.epub' 'index_split_002.html' '尽管目前书籍短缺'

示例

注意,如果使用pip install bbook_maker,所有命令都可以更改为bbook_maker args

# Test quickly
python3 make_book.py --book_name test_books/animal_farm.epub --openai_key ${openai_key}  --test --language zh-hans

# Test quickly for src
python3 make_book.py --book_name test_books/Lex_Fridman_episode_322.srt --openai_key ${openai_key}  --test

# Or translate the whole book
python3 make_book.py --book_name test_books/animal_farm.epub --openai_key ${openai_key} --language zh-hans

# Or translate the whole book using Gemini
python3 make_book.py --book_name test_books/animal_farm.epub --gemini_key ${gemini_key} --model gemini

# Set env OPENAI_API_KEY to ignore option --openai_key
export OPENAI_API_KEY=${your_api_key}

# Use the GPT-4 model with context to Japanese
python3 make_book.py --book_name test_books/animal_farm.epub --model gpt4 --use_context --language ja

# Use a specific OpenAI model alias
python3 make_book.py --book_name test_books/animal_farm.epub --model openai --model_list gpt-4-1106-preview --openai_key ${openai_key}

**Note** you can use other `openai like` model in this way
python3 make_book.py --book_name test_books/animal_farm.epub --model openai --model_list yi-34b-chat-0205 --openai_key ${openai_key} --api_base "https://api.lingyiwanwu.com/v1"

# Use a specific list of OpenAI model aliases
python3 make_book.py --book_name test_books/animal_farm.epub --model openai --model_list gpt-4-1106-preview,gpt-4-0125-preview,gpt-3.5-turbo-0125 --openai_key ${openai_key}

# Use the DeepL model with Japanese
python3 make_book.py --book_name test_books/animal_farm.epub --model deepl --deepl_key ${deepl_key} --language ja

# Use the Claude model with Japanese
python3 make_book.py --book_name test_books/animal_farm.epub --model claude --claude_key ${claude_key} --language ja

# Use the CustomAPI model with Japanese
python3 make_book.py --book_name test_books/animal_farm.epub --model customapi --custom_api ${custom_api} --language ja

# Translate contents in <div> and <p>
python3 make_book.py --book_name test_books/animal_farm.epub --translate-tags div,p

# Tweaking the prompt
python3 make_book.py --book_name test_books/animal_farm.epub --prompt prompt_template_sample.txt
# or
python3 make_book.py --book_name test_books/animal_farm.epub --prompt prompt_template_sample.json
# or
python3 make_book.py --book_name test_books/animal_farm.epub --prompt "Please translate \`{text}\` to {language}"

# Translate books download from Rakuten Kobo on kobo e-reader
python3 make_book.py --book_from kobo --device_path /tmp/kobo

# translate txt file
python3 make_book.py --book_name test_books/the_little_prince.txt --test --language zh-hans
# aggregated translation txt file
python3 make_book.py --book_name test_books/the_little_prince.txt --test --batch_size 20

# Using Caiyun model to translate
# (the api currently only support: simplified chinese <-> english, simplified chinese <-> japanese)
# the official Caiyun has provided a test token (3975l6lr5pcbvidl6jl2)
# you can apply your own token by following this tutorial(https://bobtranslate.com/service/translate/caiyun.html)
python3 make_book.py --model caiyun --caiyun_key 3975l6lr5pcbvidl6jl2 --book_name test_books/animal_farm.epub


# Set env BBM_CAIYUN_API_KEY to ignore option --openai_key
export BBM_CAIYUN_API_KEY=${your_api_key}

更易懂的示例

python3 make_book.py --book_name 'animal_farm.epub' --openai_key sk-XXXXX --api_base 'https://xxxxx/v1'

# Or python3 is not in your PATH
python make_book.py --book_name 'animal_farm.epub' --openai_key sk-XXXXX --api_base 'https://xxxxx/v1'

Microsoft Azure Endpoints

python3 make_book.py --book_name 'animal_farm.epub' --openai_key XXXXX --api_base 'https://example-endpoint.openai.azure.com' --deployment_id 'deployment-name'

# Or python3 is not in your PATH
python make_book.py --book_name 'animal_farm.epub' --openai_key XXXXX --api_base 'https://example-endpoint.openai.azure.com' --deployment_id 'deployment-name'

Docker

如果您不想处理环境设置,可以使用Docker

# Build image
docker build --tag bilingual_book_maker .

# Run container
# "$folder_path" represents the folder where your book file locates. Also, it is where the processed file will be stored.

# Windows PowerShell
$folder_path=your_folder_path # $folder_path="C:\Users\user\mybook\"
$book_name=your_book_name # $book_name="animal_farm.epub"
$openai_key=your_api_key # $openai_key="sk-xxx"
$language=your_language # see utils.py

docker run --rm --name bilingual_book_maker --mount type=bind,source=$folder_path,target='/app/test_books' bilingual_book_maker --book_name "/app/test_books/$book_name" --openai_key $openai_key --language $language

# Linux
export folder_path=${your_folder_path}
export book_name=${your_book_name}
export openai_key=${your_api_key}
export language=${your_language}

docker run --rm --name bilingual_book_maker --mount type=bind,source=${folder_path},target='/app/test_books' bilingual_book_maker --book_name "/app/test_books/${book_name}" --openai_key ${openai_key} --language "${language}"

例如

# Linux
docker run --rm --name bilingual_book_maker --mount type=bind,source=/home/user/my_books,target='/app/test_books' bilingual_book_maker --book_name /app/test_books/animal_farm.epub --openai_key sk-XXX --test --test_num 1 --language zh-hant

注意

  1. 免费试用版的API令牌有限。如果您想加快处理速度,考虑付费使用服务或使用多个OpenAI令牌。
  2. 欢迎提交PR

谢谢

贡献

  • 欢迎任何问题或PR。
  • 问题中的TODO也可以选择。
  • 在提交代码前,请运行black make_book.py ^black

其他人更好

感谢

谢谢,已经足够了。

image

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

bbook_maker-0.9.6.tar.gz (45.7 kB 查看散列值)

上传时间

构建分布

bbook_maker-0.9.6-py3-none-any.whl (51.0 kB 查看散列值)

上传时间 Python 3

支持