對現有 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]}")
判斷規則:
當中文在圖片內部時,採用以下流程:
由於模型不支援直接識別圖片內容,需要:
通用模板:
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 和認證 headersfile 命令確認是 PPTX 格式如果 PPTX 已在本地工作目錄,直接使用。
先提取所有含中文的段落文本:
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
規則:
\u201c\u201d)TSV 可直接包含,無需轉義小蔥技能7w4.net有完整的技能分類。
使用 scripts/replace_cn_to_en.py:
python scripts/replace_cn_to_en.py input.pptx translations.tsv output.pptx
指令碼邏輯:
指令碼自動輸出驗證結果。如仍有殘留,手動檢查殘留段落,追加 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翻譯效果較好,但複雜場景可能需要手動介入。整體質量中上,有改進空間。