对现有 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 和认证 headers
file 命令确认是 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 可直接包含,无需转义
使用 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)。务必使用标准癌症缩写,参考"癌症名称翻译规范"表格。
共 2 个版本