如何在Azure AI Translator翻译Markdown时保留元数据键?
解决Azure AI Translator异步API翻译Markdown时保留元数据键的问题
Azure AI Translator的异步API目前没有直接排除Markdown元数据翻译的内置功能,针对批量Markdown文档的翻译需求,可以通过预处理+后处理的方式来保留元数据的键,具体方案如下:
方案1:拆分文档后单独翻译正文,重组时保留原键
这种方式适合需要翻译元数据值但必须保留键的场景:
- 编写脚本拆分每个Markdown文档,分离出顶部的元数据块(以
---开头和结尾的部分)和正文内容 - 将提取出的正文传入翻译API进行翻译
- 解析原元数据的键值对,把值替换为翻译后的内容(如果不需要翻译值则直接保留原值),最后将处理后的元数据和翻译后的正文重新拼接成完整的Markdown文档
示例伪代码(Python):
# 拆分元数据与正文 def split_md(file_path): with open(file_path, 'r', encoding='utf-8') as f: lines = f.readlines() if not lines or lines[0].strip() != '---': return [], lines # 找到结束的--- metadata_end = None for i in range(1, len(lines)): if lines[i].strip() == '---': metadata_end = i break if not metadata_end: return [], lines metadata_lines = lines[1:metadata_end] content_lines = lines[metadata_end+1:] return metadata_lines, content_lines # 解析元数据为键值对 def parse_metadata(metadata_lines): meta_dict = {} for line in metadata_lines: line = line.strip() if not line or ':' not in line: continue key, value = line.split(':', 1) meta_dict[key.strip()] = value.strip() return meta_dict # 重组翻译后的文档 def rebuild_md(meta_dict, translated_content, output_path): with open(output_path, 'w', encoding='utf-8') as f: f.write('---\n') for key, val in meta_dict.items(): # 若已单独翻译元数据值,替换此处的val为翻译后内容 f.write(f'{key}: {val}\n') f.write('---\n') f.write(translated_content)
方案2:临时替换元数据键为占位符,翻译后还原
如果不需要翻译元数据的任何内容,仅需保留完整元数据块:
- 预处理时,将元数据块整体替换为一个独特的占位符(比如
@@@METADATA_BLOCK@@@) - 翻译正文内容后,再把占位符替换回原来的元数据块
这种方式操作更简单,适合元数据无需翻译的场景。
内容的提问来源于stack exchange,提问作者Vanja Stojanović
相关产品推荐
相关产品推荐

