该程式利用 Python 开发,结合多个强大的文本处理与翻译工具,为用户提供了一个从 PDF 论文到翻译后 Word 文档的全自动流程。主要适用于需要快速掌握大量英文资料、文献或技术报告的场景,特别是学术研究者、专业技术人员或需要跨语言工作的从业者。
C:/Program Files/Python312/python.exe" -m pip install googletrans==4.0.0-rc1
C:/Program Files/Python312/python.exe" -m pip install opencc-python-reimplemented
C:/Program Files/Python312/python.exe" -m pip install python-docx
C:/Program Files/Python312/python.exe" -m pip install pdfplumber
- 运行流程
- 含式解释
PDF 文字撷取
import pdfplumber
翻译
from googletrans import Translator
from opencc import OpenCC
Word 文件处理
from docx import Document
将长字串分割成多个小段的函式。适用于将大段文字分割成较小的部分,避免一次翻译过多字元而导致翻译工具失败。
def chunk_text(text, chunk_size=3000):
翻译单段文字的函式。支援多次重试与简繁体转换,保证翻译结果的準确性和稳定性。
def translate_chunk(chunk, translator, opencc, max_retry=3, wait_secs=2):
提取 PDF 文件文字内容的函式。通过 pdfplumber 从 PDF 文件的每一页提取文字,并将其合併为一个完整的文本。
def read_pdf_text(pdf_path):
将翻译后的文字内容保存为 Word 文件的函式。每一行文字将作为 Word 文件中的一段。
def save_translated_to_word(translated_text, output_word_path):
完整的 PDF 翻译至 Word 文件的流程。包含提取文本、分段翻译、简繁转换,以及生成翻译后的 Word 文件。
def translate_pdf_to_word(pdf_path, output_word_path, translator, opencc):
主程式入口。设定资料夹路径,初始化翻译工具,并遍历资料夹内的所有 PDF 文件,执行翻译与保存流程。
def main():
- 完整程式
import os
import time
import pdfplumber
from googletrans import Translator
from opencc import OpenCC
from docx import Document
def chunk_text(text, chunk_size=3000):
chunks = []
start = 0
while start < len(text):
end = start + chunk_size
chunks.append(text[start:end])
start = end
return chunks
def translate_chunk(chunk, translator, opencc, max_retry=3, wait_secs=2):
for attempt in range(max_retry):
try:
result = translator.translate(chunk, src=\'en\', dest=\'zh-TW\')
translated_text = result.text
translated_text = opencc.convert(translated_text)
return translated_text
except Exception as e:
print(f"翻译失败: {e}")
if attempt < max_retry - 1:
print(f"稍等 {wait_secs} 秒后重试...")
time.sleep(wait_secs)
else:
print("多次尝试仍失败,保留原文。")
return chunk
def read_pdf_text(pdf_path):
all_text_list = []
with pdfplumber.open(pdf_path) as pdf:
for page in pdf.pages:
page_text = page.extract_text()
if page_text:
all_text_list.append(page_text)
entire_text = "\\n".join(all_text_list)
return entire_text
def save_translated_to_word(translated_text, output_word_path):
doc = Document()
for line in translated_text.split("\\n"):
doc.add_paragraph(line)
doc.save(output_word_path)
def translate_pdf_to_word(pdf_path, output_word_path, translator, opencc):
entire_text = read_pdf_text(pdf_path)
print(f"[DEBUG] 原文长度: {len(entire_text)}")
text_chunks = chunk_text(entire_text, 3000)
translated_results = []
for chunk in text_chunks:
t_chunk = translate_chunk(chunk, translator, opencc)
translated_results.append(t_chunk)
final_text = "\\n".join(translated_results)
print(f"[DEBUG] 翻译后长度: {len(final_text)}")
save_translated_to_word(final_text, output_word_path)
def main():
en_pdf_folder = r"C:\\Users\\chenchen\\Desktop\\chenchen_code\\pdf_file_translation\\englishpdf"
cn_word_folder = r"C:\\Users\\chenchen\\Desktop\\chenchen_code\\pdf_file_translation\\cn"
if not os.path.exists(cn_word_folder):
os.makedirs(cn_word_folder)
translator = Translator()
opencc = OpenCC(\'s2t\')
for filename in os.listdir(en_pdf_folder):
if filename.endswith(".pdf"):
pdf_path = os.path.join(en_pdf_folder, filename)
word_filename = os.path.splitext(filename)[0] + ".docx"
output_word_path = os.path.join(cn_word_folder, word_filename)
print(f"正在处理: {filename}")
try:
translate_pdf_to_word(pdf_path, output_word_path, translator, opencc)
print(f"翻译完成,保存至: {output_word_path}")
except Exception as e:
print(f"处理失败: {filename}, 错误: {e}")
if __name__ == "__main__":
main()