科学工具
科学工具让世界更美好
让世界更美好

Arxiv论文智能翻译PDF生成工具ChinarXiv

ChinarXiv 是一个将 GPT Academic 项目中的 Arxiv 论文翻译功能独立出来的工具,能为研究者提供从论文获取到翻译输出的完整服务。

1、覆盖完整翻译流程,输入 arxiv 链接后,无需额外操作,能直接生成翻译后的 PDF 文件,实现一站式服务。

2、基于 LaTeX 结构进行智能分段,在处理论文内容时,能保持文档原有的完整性和逻辑结构,避免分段导致的信息断裂。

3、支持多线程并发翻译,相比单线程翻译,能大幅缩短多篇论文或长篇论文的翻译耗时,提升整体效率。

4、内置翻译缓存机制,已翻译过的内容会被保存,再次遇到相同内容时,无需重复翻译,减少 API 调用次数和等待时间。

5、自带 LaTeX 编译服务器,在处理包含依赖文件的论文时,能妥善处理相关依赖,确保编译顺利进行。

6、允许自定义术语词典,在翻译过程中,能依据词典内容确保专业术语翻译的一致性,避免同一术语出现多种译法。

7、具备智能错误处理和恢复机制,遇到轻微错误时,能尝试自行恢复,减少因小问题导致的翻译中断。

ChinarXiv核心功能

Arxiv 论文下载:支持多种 arxiv 输入格式,包括论文 ID(如 1812.10695)和完整 URL,都能准确识别并下载对应的论文。

LaTeX 解析:能智能解析 LaTeX 文档的结构,对于多文件组成的 LaTeX 论文,可自动合并,确保后续翻译和编译不受文件拆分影响。

内容切分:结合大语言模型的 token 限制,对论文内容进行智能分段,既避免单段内容超过 token 上限导致翻译失败,又保证段落语义完整。

批量翻译:兼容 GPT-4 等多种大语言模型,支持批量处理多篇论文,适合需要集中翻译大量文献的场景。

结果合并:翻译完成后,能将分段的翻译结果智能合并,同时严格保留 LaTeX 格式,确保合并后的内容可正常编译。

PDF 编译:支持中文字体的 PDF 编译,生成的中文 PDF 文档在字体显示、格式排版上符合中文阅读习惯。

缓存系统:包含下载缓存和翻译缓存两部分,下载过的论文无需重复下载,翻译过的内容无需重复调用模型,节省资源和时间。

自定义配置:可根据需求配置 API 相关参数(如密钥、地址)、选择不同的大语言模型、调整并发线程数量等。

术语管理:支持导入或编辑自定义术语词典,对于专业领域的特定术语,可预先设定准确译法,保证翻译专业性。

翻译要求定制:能根据用户需求设置翻译风格(如学术性、简洁性)和具体要求(如术语标注、格式保留规则),让翻译结果更符合使用场景。

进度跟踪:在翻译过程中,会实时反馈当前进度,包括已完成的步骤、整体进度百分比和当前操作提示,方便用户掌握翻译动态。

错误处理:出现问题时,会输出详细的错误信息,同时提供可能的恢复建议,帮助用户快速定位并解决问题。

ChinarXiv部署

1、进入 latex2pdf 目录:打开终端,输入 cd latex2pdf 并执行。

2、启动 LaTeX 编译服务器:在终端中输入 docker compose -f docker-compose-latex-server.yml up --build -d 并执行,完成服务器部署。

3、配置 API 信息:找到 config_temp-需要修改成config-填入自己的API.py 文件,将其复制并重命名为 config.py,然后打开该文件,填入自己的 API 密钥等配置信息。

4、启动翻译工具:在终端中输入 python arxiv_translator.py 并执行,ChinarXiv就会开始运行。

ChinarXiv安装环境要求

• 编程语言:Python 3.8 及以上版本。

• 编译环境:需要安装 LaTeX 环境,推荐使用 TeX Live。

• API 密钥:需拥有 OpenAI API 密钥或其他兼容大语言模型的 API 密钥。

ChinarXiv依赖

在终端中输入 pip install -r requirements.txt 并执行,即可安装工具所需的主要依赖,包括:

requests:用于发送 HTTP 请求,实现论文下载等网络操作。

openai:OpenAI API 的客户端,用于调用大语言模型进行翻译。

tiktoken:用于计算文本的 token 数量,辅助进行内容切分。

fastapi:构建 LaTeX 编译服务器的框架。

uvicorn:作为 ASGI 服务器,支持 LaTeX 编译服务器的运行。

ChinarXiv配置文件创建

首先复制配置模板文件,在终端中输入 cp config_temp-需要修改成config-填入自己的API.py config.py 并执行,生成可编辑的 config.py 文件。

关键配置项说明

打开 config.py 文件后,可根据需求修改以下核心配置:

# OpenAI API 配置
API_KEY = "your-api-key-here"  # 填入自己的 API 密钥
BASE_URL = "https://api.openai.com/v1"  # 若使用其他兼容 API,可修改为对应地址
LLM_MODEL = "gpt-4o-mini"  # 可替换为其他支持的模型,如 gpt-4

# 翻译相关配置
MAX_WORKERS = 9  # 最大并发线程数,可根据电脑性能和 API 限制调整
MAX_TOKEN_LIMIT = 800  # 每段内容的最大 token 数,需结合所选模型的 token 限制设置
TEMPERATURE = 0.3  # 翻译温度参数,数值越小,翻译结果越稳定;数值越大,结果多样性越高

# 缓存配置
USE_CACHE = True  # 是否启用缓存功能,建议开启以节省资源
CACHE_DIR = "./arxiv_cache"  # 缓存文件的保存目录,可自定义路径

# LaTeX 编译配置
LATEX_SERVER_URL = "http://localhost:9851"  # LaTeX 编译服务器的地址,若服务器部署在其他位置,需修改为对应地址

使用ChinarXiv主接口(推荐)

适合快速完成单篇论文翻译,代码示例如下:

from arxiv_translator import translate_arxiv_paper

# 翻译 arxiv 论文
success, result = translate_arxiv_paper(
    arxiv_input="1812.10695",  # 填入 arxiv 论文的 ID 或完整 URL
    user_requirements="保持学术性和专业性,确保术语翻译的一致性",  # 设定翻译要求
    compile_pdf=True  # 是否需要编译生成 PDF,True 为需要,False 为不需要
)
if success:
    print(f"翻译成功!文件保存在: {result}")
else:
    print(f"翻译失败: {result}")

使用ChinarXiv完整 API

适合需要自定义更多参数的场景,支持配置输出目录、并发数、术语词典等,代码示例如下:

from arxiv_translator import ArxivTranslator

# 创建翻译器实例,可配置输出目录、并发数、token 限制等
translator = ArxivTranslator(
    output_dir="./output",  # 翻译结果的输出目录
    max_workers=9,  # 并发线程数
    max_token_limit=800  # 每段最大 token 数
)

# 自定义术语词典,确保特定术语翻译一致
user_terms = {
    "transformer": "变换器",
    "attention": "注意力机制",
    "neural network": "神经网络"
}

# 执行翻译
success, result, details = translator.translate_arxiv(
    arxiv_input="https://arxiv.org/abs/1812.10695",  # arxiv 论文的 URL
    user_requirements="翻译要保持学术性,专业术语首次出现时标注英文原词",  # 翻译要求
    user_terms=user_terms,  # 导入自定义术语词典
    compile_pdf=True  # 是否编译 PDF
)

ChinarXiv命令行使用

无需编写代码,通过终端交互操作即可完成翻译,步骤如下:

1、在终端中输入 python arxiv_translator.py 并执行。

2、根据终端提示,输入 arxiv 论文的 ID 或选择预设的测试用例,按照指引完成翻译操作。

ChinarXiv 的 Docker 部署方案

项目提供 Docker 部署方式,能快速搭建 LaTeX 编译服务器,步骤如下:

1、进入 latex2pdf 目录:在终端中输入 cd latex2pdf 并执行。

2、启动服务器:输入 docker-compose -f docker-compose-latex-server.yml up -d 并执行,Docker 会自动构建镜像并启动服务。

3、查看部署详情:若需了解更多服务器配置和使用细节,可参考 latex2pdf/README-latex-server.md 文档。

示例1:翻译经典论文

以翻译 GPT-1 相关论文(ID:1812.10695)为例,代码如下:

from arxiv_translator import translate_arxiv_paper

# 翻译 GPT-1 论文
success, result = translate_arxiv_paper(
    arxiv_input="1812.10695",
    user_requirements="保持学术严谨性,术语翻译要准确",
    compile_pdf=True
)
print(f"翻译结果: {result}")

示例2:批量翻译

当需要同时翻译多篇论文时,可使用批量处理功能,代码示例如下:

from arxiv_translator import ArxivTranslator

# 创建翻译器实例,设置并发线程数为 6
translator = ArxivTranslator(max_workers=6)

# 待翻译论文的 ID 列表
papers = ["1812.10695", "2402.14207", "1706.03762"]

# 循环翻译每篇论文
for paper_id in papers:
    print(f"正在翻译: {paper_id}")
    success, result, details = translator.translate_arxiv(paper_id)
    if success:
        print(f"✅ {paper_id} 翻译完成: {result}")
    else:
        print(f"❌ {paper_id} 翻译失败: {result}")

示例3:进度监控

通过自定义进度回调函数,可实时查看翻译各步骤的进度,代码如下:

from arxiv_translator import ArxivTranslator

# 定义进度回调函数,输出当前步骤、进度和提示信息
def progress_callback(step, progress, message):
    print(f"Step {step} - {progress:.1f}%: {message}")

# 创建翻译器实例
translator = ArxivTranslator()

# 执行翻译并启用进度监控
success, result, details = translator.translate_arxiv(
    arxiv_input="1812.10695",
    progress_callback=progress_callback
)

ChinarXiv常见问题和解决办法

API 配置错误

• 检查 config.py 文件中的 API_KEYBASE_URL 是否填写正确,确保无拼写错误或多余空格。

• 确认 API 密钥是否有效,是否有足够的余额或调用额度,可登录对应 API 平台查看状态。

LaTeX 编译失败

• 确认已安装完整的 LaTeX 环境(推荐 TeX Live),若使用 Docker 部署的编译服务器,检查服务器是否正常运行(可通过 docker ps 命令查看容器状态)。

• 查看编译日志,日志中会记录具体的错误信息(如缺失的宏包、语法错误),根据日志提示补充相关依赖或修正 LaTeX 内容。

下载失败

• 检查网络连接是否正常,若网络不稳定,可尝试重新执行下载操作。

• 若需通过代理访问网络,需在环境中配置代理设置,确保工具能正常连接 arxiv 服务器。

• 确认输入的 arxiv ID 或 URL 格式正确,避免因格式错误导致无法识别论文。

翻译质量问题

• 调整 MAX_TOKEN_LIMIT 参数,适当减小分段大小,避免因单段内容过长导致模型理解偏差。

• 更换更强的大语言模型(如将 gpt-4o-mini 替换为 gpt-4),提升翻译的准确性和专业性。

• 完善自定义术语词典,补充领域特定术语的准确译法,同时细化翻译要求(如明确术语标注规则),减少翻译歧义。

调试模式启用

若需获取更详细的运行日志,辅助排查问题,可启用调试模式,代码示例如下:

import logging
from arxiv_translator import ArxivTranslator

# 启用 DEBUG 级别日志,输出详细运行信息
logging.basicConfig(level=logging.DEBUG)

# 运行翻译操作,日志会实时输出到终端
translator = ArxivTranslator()
success, result, details = translator.translate_arxiv(arxiv_input="1812.10695")