💡
Archivematicaの日本語ファイル名変換を修正する
概要
デフォルト設定のArchivematicaに日本語ファイル名のファイルを入力すると、「ユースケース公募提案書.docx」というファイル名は以下のように変換されます。
yu-suke-suGong_Mu_Ti_An_Shu_.docx
このファイル名変換をカスタマイズする方法について説明します。
概要
ファイル名の変換は以下で行われています。
具体的には、以下です。
decoded_name = unidecode(basename)
Google Colabでの実行例は以下です。
カスタマイズ
今回は、pykakasiを使用してみます。
また、DockerでArchivematicaを起動しているとします。以下の記事を参考にしてください。
まず、以下にpykakasiを追記します。
そして、以下のファイルも修正します。
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