💡

Archivematicaの日本語ファイル名変換を修正する

2024/06/19に公開

概要

デフォルト設定のArchivematicaに日本語ファイル名のファイルを入力すると、「ユースケース公募提案書.docx」というファイル名は以下のように変換されます。

yu-suke-suGong_Mu_Ti_An_Shu_.docx

このファイル名変換をカスタマイズする方法について説明します。

概要

ファイル名の変換は以下で行われています。

https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/change_names.py

具体的には、以下です。

decoded_name = unidecode(basename)

Google Colabでの実行例は以下です。

https://colab.research.google.com/github/nakamura196/000_tools/blob/main/unidecodeを試す.ipynb

カスタマイズ

今回は、pykakasiを使用してみます。

https://codeberg.org/miurahr/pykakasi

また、DockerでArchivematicaを起動しているとします。以下の記事を参考にしてください。

https://zenn.dev/nakamura196/articles/dd30f97d87526c

まず、以下にpykakasiを追記します。

https://github.com/artefactual/archivematica/blob/qa/1.x/requirements-dev.txt

そして、以下のファイルも修正します。

https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/lib/clientScripts/change_names.py

import os
import re
import shutil

from unidecode import unidecode

import pykakasi

# 初期化
kakasi = pykakasi.kakasi()

# テキストをローマ字に設定
kakasi.setMode("H", "a")  # 平仮名をローマ字に
kakasi.setMode("K", "a")  # カタカナをローマ字に
kakasi.setMode("J", "a")  # 漢字をローマ字に
kakasi.setMode("r", "Hepburn")  # ヘボン式ローマ字に設定

# コンバーターを作成
converter = kakasi.getConverter()

VERSION = "1.10." + "$Id$".split(" ")[1]

# Letters, digits and a few punctuation characters
ALLOWED_CHARS = re.compile(r"[^a-zA-Z0-9\-_.\(\)]")
REPLACEMENT_CHAR = "_"


def change_name(basename):
    if basename == "":
        raise ValueError("change_name received an empty filename.")
    # decoded_name = unidecode(basename)
    decoded_name = converter.do(basename)
...

上記の修正を加えて、Archivematicaを再ビルドした結果、以下のようなファイル名に変換されるようになりました。

yuusukeesukouboteiansho.docx

まとめ

ファイル名の変換については、METSファイルの中で、以下のように記載されています。

<premis:eventOutcomeDetailNote>Original name="%transferDirectory%objects/ユースケース公募提案書.docx"; new name="%transferDirectory%objects/yuusukeesukouboteiansho.docx"</premis:eventOutcomeDetailNote>

そのため、ファイル名の変換ルールを気にする必要はないかもしれませんが、参考になりましたら幸いです。

Discussion