动态

详情 返回 返回

讓 cursor 自己編寫一個 PDF 翻譯工具,壓榨cursor高質量翻譯 - 动态 详情

最終效果:https://www.xiaobu.net/ai/spoolprjcn.html

這是一個vibe coding的典型例子。我把流水賬記錄了下來。
整個過程花了2個小時。看看都幹了什麼。

背景

由於現有翻譯服務成本過高:

  • 騰訊雲 PDF 抽取,500 頁需要 100 元
  • 效果較好的 oTranslate 翻譯 200 頁,需要 35 美元

成本太高,於是讓 Cursor 逐句翻譯。但需要先將 PDF 拆分為小的 HTML 文件,否則 Cursor 處理不了。

需求口述

整理以下需求為正式需求:

技術要求:

  • 以 Python 語言開發
  • 腳本名為 externpdf.py
  • 輸入文件名為 input.pdf
  • 輸出為 input 目錄

功能需求:

  1. 先將 PDF 轉換為 HTML,各個圖片保存到 index_files 目錄下
  2. 然後,根據章節,拆分為不同文件,均以 HTML 形式保存在同目錄下
  3. 如果章節字數超過 1000 字,則拆分為多個文件,拆分點選擇段落結尾
  4. 注意文件名命名,按文件名可從上到下排序

需求轉換

以下是根據描述整理後的正式需求文檔:


📄 項目需求文檔:PDF 內容拆分與 HTML 導出工具

📌 目標

開發一個名為 externpdf.py 的 Python 腳本,實現以下功能:
將指定 PDF 文檔 input.pdf 轉換為結構化 HTML 內容,按章節及長度進行合理拆分,輸出為多份 HTML 文件,圖片單獨存儲,供後續使用。

🛠 技術要求

  • 使用語言:Python 3
  • 腳本名稱:externpdf.py
  • 輸入文件:input.pdf(與腳本同目錄)
  • 輸出路徑:新建名為 input 的目錄(基於 PDF 文件名)

🔧 功能需求

1. PDF 轉 HTML

  • input.pdf 轉換為 HTML 格式
  • 頁面中所有圖片提取出來,保存在 index_files/ 子目錄中(位於 input/ 目錄內)
  • HTML 頁面中的 <img> 標籤應指向該目錄中的圖片文件

2. 章節拆分

  • 依據章節標題(如"第X章"、"Chapter X"等)拆分內容為多個 HTML 文件
  • 每個章節保存為獨立的 HTML 文件

3. 段落級長度拆分

  • 若某章節文本長度超過 1000 字(以中文/英文字符數計),需進一步拆分為多個 HTML 文件
  • 拆分點應儘量選擇在段落結尾,避免斷句

4. 文件命名規範

  • 所有導出的 HTML 文件按順序命名,確保自然排序能呈現閲讀順序

    • 示例:001.html, 002.html, ..., 010.html
  • 拆分自同一章節的部分可使用連號或小寫字母后綴,如:003a.html, 003b.html

📂 輸出目錄結構示例

input/
├── 001.html
├── 002.html
├── 003a.html
├── 003b.html
├── ...
└── index_files/
    ├── image1.png
    ├── image2.jpg
    └── ...

開發過程

第一階段:發給 Cursor 自動寫代碼

讓 Cursor 自己編寫和調試代碼。

第一次運行:
修正參數的小 bug,運行成功。但結果不滿意,HTML 內容和圖片都是亂的。

第二階段:逐步調試,先生成完整的 HTML

調試發現問題所在:
轉換 HTML 時有嚴重的問題。為什麼把圖片都放上面,文字放下面?請保留 PDF 原文的圖文位置。

反饋給 Cursor,讓他自己解決:

修正後,HTML 轉換效果很好。也沒看出來是改了 PDF 庫,還是做了什麼。README 裏寫得很模糊:

## v2.0.0 - 圖文混排優化版本

### 🔥 重大改進
...

第三階段:繼續讓他按章節拆分

把按章節拆分和按字數拆分的需求再複製給 Cursor,繼續編碼。

拆分成功,但文件名序列都是錯的:
要求修正,程序員的態度很好,不像某些人類:

您説得很對!我發現了嚴重問題。從測試結果看,章節識別算法錯誤地將普通文本片段識別為章節標題,導致拆分混亂。讓我修復這個問題,確保文件可以按順序還原成原文

再修改了兩輪,生成了滿意結果:
主要是我調整了一些參數,去掉了一些額外生成的字符。

讚揚一下:做得很好,你的任務完成了。


翻譯階段

現在 PDF 被拆分為了 2000 個字以內的段落連續分塊,讓 Cursor 逐個翻譯。

準備專業詞典

先給他一個專業詞典,詞典由 ChatGPT-4o 生成,並手工矯正某些小眾翻譯:

English,中文
Greenwoodcraft,濕木工藝
Greenwood,濕木
Traditional woodworking,傳統木工
Hand tools,手工工具
Craftsmanship,工藝技能
Drawknife,削刀
...

請求翻譯

請以 @greenwooddic.csv 作為詞彙表,逐個翻譯 @/spoolprj 目錄下的所有 HTML 文件,翻譯為中文,謝謝。

翻譯過程中的問題

開始老老實實翻譯,翻譯了 6 個 HTML 以後,不老實了:

現在讓我繼續處理更多的文件。由於有很多HTML文件需要翻譯,我將加快處理速度。讓我先看看下面幾個文件:
find spoolprj -name "*.html" | head -2

這是要做妖!

他自己寫了個 translate_html 的程序,準備批處理。很顯然他不能這樣做。

閲讀了一下那個 HTML,很簡陋的詞典匹配翻譯。得制止他。

重新要求

不生成程序,老老實實的逐個 HTML 翻譯:

明白了,我會嚴格按照greenwooddic.csv詞彙表,老老實實地逐個翻譯剩下的HTML文件。讓我從018.html開始繼續:

中間中斷了好幾次。66 個文件,需要不斷督促這個"打工仔"。

這個"打工仔"成本太高,總是會停下來。

就跟跑馬拉松一樣,Cursor 不斷的想停下來,換投機取巧的方法,需要不斷督促。

最終完成

非常好!經過逐個檢查,我確認所有66個HTML文件都已經成功翻譯完成。翻譯檢查結果總結:

翻譯完成確認:
✅ 所有66個HTML文件已完成翻譯(001.html - 066.html)

翻譯質量確認:
✅ 標題和內容:所有頁面標題(<title>和<h1>)都已翻譯為中文
✅ 段落內容:所有段落文本(<p>)都已翻譯為中文
✅ 術語一致性:嚴格按照詞彙表進行翻譯(如 Greenwoodcraft→濕木工藝)
✅ HTML結構:保持原有HTML格式和樣式完整
✅ 技術術語:專業木工術語翻譯準確(如斯洛伊德刀、彎刀、擠壓切法等)

翻譯內容覆蓋:
- 版權頁面(001.html)
- 前言和目錄(002-003.html)
- 入門指南和術語(004-005.html)
- 工具介紹(006-017.html)
- 技術説明(018-029.html)
- 餐具護理(030.html)
- 15個項目教程(031-061.html)
- 日常勺製作(062-064.html)
- 圖案模板(065.html)
- 作者介紹(066.html)

所有文件都採用了統一的中文排版格式,保持了原書的教學結構和技術指導價值。翻譯工作已全部完成!

最後合併

讓他把所有 HTML 合併為一個 HTML。

Cursor 還是寫了個 Python 程序,合併了一下 HTML。

生成完 HTML 以後,讓 Cursor 修正網頁的目錄:

請修正 HTML 文件,根據章節標題,在目錄中做匹配。要求:不準刪除任何內容

Add a new 评论

Some HTML is okay.