xsltprocを使って翻訳メモリtmxファイルをcsvに変換する

Posted by nogajun - 2021/02/06

_ LibreOfficeの翻訳にOmegaTとみんなの自動翻訳@Textraを使ってます。みんなの自動翻訳は、オープンソースの翻訳で使えるだけではなく、OmegaTで貯めた翻訳メモリを使って自動翻訳の辞書のカスタマイズができます。

それで、考えもなしにOmegaTのtmxファイルをみんなの自動翻訳の辞書にぶち込んでましたが、未翻訳の文字列や編集記号だけの文字列なども混じっていて整理したいと思ったけれど、tmxが編集できるエディタがない。

tmxを編集できるツールもないし、tmxはXMLファイルで原文と訳文が対になっているだけなので、CSVに変換して不要なデータを削除すればいいかと思ったけれど、マッピングの問題もあるので単純にXMLをCSVにするツールもない。

ということで、xsltprocに手を出さざるえない事になったのでXSLTを書いていたけど、資料が全然無い。いろいろ試行錯誤しながら、英語と日本語決め打ちで、なんとか書いたXSLTがこれ。

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output method="text" encoding="utf-8" />

     <xsl:template match="/">
         <xsl:text>"en-US"&#x9;"ja"</xsl:text>
         <xsl:text>&#xA;</xsl:text>
             <xsl:for-each select="tmx/body/tu">
             <xsl:text>"</xsl:text>
             <xsl:value-of select="tuv[@lang='en-US']/seg"/>
                 <xsl:text>"&#x9;"</xsl:text>
                 <xsl:value-of select="tuv[@lang='ja']/seg"/>
                 <xsl:text>"&#xA;</xsl:text>
             </xsl:for-each>
     </xsl:template>
 </xsl:stylesheet>

使い方は、上のXSLTを保存して、下のようにすれば使えるはず。

 $ xsltproc tmx2tsv.xsl (file.tmx) > (file.tsv)

変換は英語から日本語に決め打ちだけど、とりあえず目的は達成できたから、これで良しとしよう。