name: ppt-cn-to-en description: 將PPT中的中文內容替換為英文,保留原始格式、圖片、佈局、表格和圖表。適用於需要把已有的中文簡報原地轉化為英文版本的場景,不重新生成PPT。Trigger 使用者要求將PPT翻譯為英文、PPT中英文替換、PPT中文轉英文等。 agent_created: true
對現有 PPTX 檔案進行中文→英文轉換。有兩種模式:
在開始替換前,先判斷 PPT 中中文的存在形式:
用以下程式碼檢查是否所有中文都在文本框中:
from pptx import Presentation
prs = Presentation('input.pptx')
has_image_text = False
for slide in prs.slides:
for shape in slide.shapes:
if shape.shape_type == 13: # PICTURE
print(f"Slide has image: {shape.name}")
if shape.has_text_frame:
text = shape.text_frame.text.strip()
if any(ord(ch) in range(0x4e00, 0xa000) for ch in text):
print(f"Text CN: {text[:50]}")
判斷規則: - 中文全部在文本框中 → 使用原位替換模式(Step 1-5) - 中文在圖片/圖表內部(圖表是圖片,不是 PPT 原生圖表物件)→ 必須重新生成圖表,不能原位替換 - 不確定 → 先嚐試原位替換,檢查輸出 PPT 是否有殘留中文圖片
當中文在圖片內部時,採用以下流程:
由於模型不支援直接識別圖片內容,需要: 1. 請使用者描述圖片中的文字內容,或提供圖片文字清單 2. 或根據 PPT 上下文(周圍文本框、標題)推斷圖片內容
通用模板:
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['Arial', 'DejaVu Sans']
matplotlib.rcParams['axes.unicode_minus'] = False
# 柱狀圖示例
fig, ax = plt.subplots(figsize=(3.2, 2.4))
categories = ['Phase I/II', 'Phase II', 'Phase III', 'Approved']
values = [12, 3, 4, 3]
ax.bar(range(len(categories)), values, color='#4472C4')
ax.set_xticks(range(len(categories)))
ax.set_xticklabels(categories, fontsize=7, rotation=15)
ax.set_title('Clinical Progress', fontsize=10, fontweight='bold', color='white',
bbox=dict(boxstyle='round,pad=0.3', facecolor='#2F5597'))
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
plt.tight_layout()
fig.savefig('chart_en.png', dpi=200, bbox_inches='tight')
from pptx import Presentation
from pptx.util import Inches
prs = Presentation('input.pptx')
slide = prs.slides[0]
# 找到目標圖片位置,替換
slide.shapes.add_picture('chart_en.png', left, top, width, height)
| 圖表型別 | 方法 | 注意事項 |
|---|---|---|
| 柱狀圖 | ax.bar() |
中文分類標籤需翻譯為英文 |
| Venn 圖 | Circle() + ax.text() |
癌症名稱必須用標準英文縮寫 |
| 折線圖 | ax.plot() |
座標軸標籤翻譯 |
| 表格 | slide.shapes.add_table() |
用 python-pptx 重建,不要用圖片 |
易錯點:器官名 ≠ 癌症名
| 中文 | 正確英文 | 錯誤英文 |
|---|---|---|
| 肝癌 | HCC (Hepatocellular carcinoma) | Liver |
| 腎癌 | RCC (Renal cell carcinoma) | Renal |
| 頭頸癌 | Head & neck cancer (HNC) | Head & neck |
| 胃癌 | Gastric cancer | Gastric |
| 胰臟癌 | Pancreatic cancer (PDAC) | Pancreatic |
| 三陰性乳腺癌 | TNBC | Triple-negative breast cancer |
原則:圖表中的癌症名稱應使用標準學術縮寫(HCC, RCC, PDAC, TNBC, NSCLC, CRC 等),而非器官名稱。
如果 PPTX 在 IMA 知識庫中:
- 呼叫 ima_api.cjs 的 get_media_info 獲取下載 URL 和認證 headers
- 用 curl 下載到本地工作目錄(約需 2-5 分鐘,取決於網路)
- 驗證:檢查檔案 magic bytes 或使用 file 命令確認是 PPTX 格式
如果 PPTX 已在本地工作目錄,直接使用。
先提取所有含中文的段落文本:
本技能來自小蔥技能站7w4.net。
python -c "
from pptx import Presentation
prs = Presentation('input.pptx')
for i, slide in enumerate(prs.slides):
for shape in slide.shapes:
if shape.has_text_frame:
text = shape.text_frame.text.strip()
if text and any(ord(ch) in range(0x4e00, 0xa000) for ch in text):
print(text)
"
將提取的中文文本翻譯為學術英文。組織為 TSV 格式(製表符分隔):
原始中文文本\t英文學術翻譯
建立 translations.tsv,每行一條翻譯對:
胰臟癌惡性度高、進展快、轉移早、預後差 Pancreatic Ductal Adenocarcinoma: High Malignancy, Rapid Progression...
化療 Chemotherapy
規則:
- 長句優先放在前面(指令碼按長度降序匹配)
- 短詞如"治療"→"Therapy"要謹慎,可能誤匹配長句中的部分
- 含特殊引號的文本(如 \u201c\u201d)TSV 可直接包含,無需轉義
使用 scripts/replace_cn_to_en.py:
python scripts/replace_cn_to_en.py input.pptx translations.tsv output.pptx
指令碼邏輯: 1. 載入 TSV,按 CN 文本長度降序排列 2. 逐 Slide → Shape → Paragraph 遍歷 3. 先精確匹配,再最長子串匹配 4. 替換 Paragraph 第一個 run 的文本,清空其餘 run 5. 最後進行短詞碎片清理("優於"→"superior to" 等常見殘留) 6. 自動驗證輸出零中文字元殘留
指令碼自動輸出驗證結果。如仍有殘留,手動檢查殘留段落,追加 TSV 條目後重新執行。
pip install python-pptx\u201c(左引號)和\u201d(右引號)與 ASCII " 不同,TSV 中應保持一致Q: 部分短文本被誤匹配怎麼辦? A: 短詞(如"治療""聯合")在 Step 4 自動清理階段統一處理。如果仍有誤匹配,將長文本翻譯放在 TSV 前面。
Q: 中文引號導致的語法錯誤?
A: TSV 格式天然支援 Unicode,用 Write 工具直接寫入 TSV 檔案即可包含中文引號。Python 指令碼以 encoding='utf-8' 讀取。
Q: IMA 下載超時?
A: IMA COS 伺服器可能頻寬較低(~200KB/s),85MB 檔案約需 7 分鐘。使用 bash 的 curl 並設定足夠大的 --max-time。
Q: 替換後圖片裡還有中文? A: 這是預期行為。原位替換隻處理文本框,不處理圖片內容。需要切換到"重繪圖表面板模式",用 Python/matplotlib 重新生成英文圖表。
Q: Venn 圖/柱狀圖裡的癌症名稱翻譯不準確? A: 常見錯誤是把器官名當癌症名(Liver→HCC, Renal→RCC)。務必使用標準癌症縮寫,參考"癌症名稱翻譯規範"表格。
這是一個功能明確的PPT漢譯工具,文件和指令碼都比較完善,翻譯流程清晰且內建驗證機制。主要優點是覆蓋面廣、考慮了圖片內中文等邊界情況;不足之處是依賴庫單一、錯誤處理不夠充分,敏感詞清理可能產生誤替換。對於標準格式PPT翻譯效果較好,但複雜場景可能需要手動介入。整體質量中上,有改進空間。