Python勉強日記。今日はXLIFFファイルから原文、訳文を取り出してみたいと思います。XLIFFは翻訳メモリのTrados、Phraseで採用されているファイルフォーマットです。
XML形式ですのでテキストエディタで開いて中身を見ることもできますが、加工したり、後からgrepかけたりするには不便ですので、原文と訳文をタブ区切りのテキストファイルに出力します。こうしておけば、後から検索するのに便利ですし、エクセルなどに貼り付けて簡易データベースとして活用することも可能です。
import csv
import xml.etree.ElementTree as ET
input_file = "C:/test/test.xliff"
output_file = "C:/test/output.csv"
tree = ET.parse(input_file)
root = tree.getroot()
# CSVファイルのヘッダー
fields = ['source', 'target']
csv_data = []
for trans_unit in root.findall('.//{urn:oasis:names:tc:xliff:document:1.2}trans-unit'):
source = trans_unit.find(".//{urn:oasis:names:tc:xliff:document:1.2}source")
# 原文が存在しなければ次へ
if source is None:
continue
source_text = ''.join([text for text in source.itertext()]).strip()
if not source_text:
continue
target = trans_unit.find(".//{urn:oasis:names:tc:xliff:document:1.2}target")
if target is None:
# 訳文が未登録の場合は空文字を出力
target_text = ''
else:
target_text = ''.join([text for text in target.itertext()]).strip()
# csv_dataに1行ずつデータを追加
csv_data.append([source_text, target_text])
# CSVファイルにデータを書き込む
with open(output_file, 'w', encoding='utf-8', newline='') as csvfile:
csvwriter = csv.writer(csvfile, delimiter='\t')
csvwriter.writerow(fields)
csvwriter.writerows(csv_data)
※注:原文、訳文にタブ記号が含まれているケースは想定していません。必要に応じて適宜書き換えてください。Trados、Phraseで作成したxliffファイル(sdlxliff、mxliff)を読み込んでテストはしていますが、うまく出力できないこともあるかもしれません。