Multi-Saxon

2025年3月28日 · 3 分で読める
code

Multi-Saxon:大規模TEIコーパスのための並列XSLT処理

Multi-Saxonは、LXML(広く使われているPythonのXMLライブラリ)では扱えないXSLT 2.0および3.0の変換を並列に実行できるようにし、XML処理ツールの重大な空白を埋めます。XML TEI文書の大規模なコレクションに的を絞って設計されており、効率のよい並列実行で処理時間を大幅に縮めます。

主な機能

  • 高度なXSLT対応:LXMLの手に余るXSLT 2.0および3.0の変換を処理
  • 並列処理:並列化により、大規模な文書コレクションの変換時間を劇的に短縮
  • TEIに最適化:Text Encoding Initiative(TEI)のXML文書に特化して設計
  • スケーラブルな性能:数百から数千の文書からなるコーパスを効率よく処理
  • クロスプラットフォーム:さまざまなOSや環境で動作

Multi-Saxonが解決する問題

TEIを扱うデジタル・ヒューマニティーズの研究者は、往々にして二つの壁にぶつかります。

  1. LXML(Pythonでよく使われるXML処理ライブラリ)はXSLT 1.0にしか対応しておらず、XSLT 2.0/3.0の高度な機能が使えない
  2. TEI文書の大規模なコーパスを一つずつ順に処理すると、途方もない時間がかかる

Multi-Saxonは、Saxonの高度なXSLT機能を活かしつつ処理を複数のコアに振り分けることで、この両方に対処し、大幅な性能向上を実現します。

実装

Multi-SaxonはPythonとJavaのSaxonプロセッサを組み合わせ、高性能な変換パイプラインを構成します。

  • 堅牢なXSLT 2.0/3.0処理にJavaのSaxonライブラリを使用
  • マルチプロセッシングにより、利用可能なCPUコアに変換を分散
  • スループットを最大化するようプロセッサプールを効率よく管理
  • TEI文書をバッチ処理するための簡潔なインターフェースを提供

使用例

from multi_saxon import MultiSaxon

# Initialize with your XSLT stylesheet
transformer = MultiSaxon("transform.xsl")

# Transform a single document
transformer.transform("input.xml", "output.xml")

# Transform an entire directory in parallel
transformer.transform_directory("input_dir", "output_dir")

デジタル・ヒューマニティーズへのインパクト

大規模なTEI文書コレクションを扱うデジタル・ヒューマニティーズのプロジェクトにとって、Multi-Saxonは次のことを可能にします。

  • LXMLでは不可能な、コーパス全体にわたる複雑な変換
  • 処理時間の劇的な短縮(マルチコア環境では5〜10倍になることも珍しくありません)
  • XSLT 2.0/3.0の高度な機能による、より洗練された分析
  • 文書コレクション全体を処理するワークフローの簡素化

ソースコードとドキュメントはGitHubリポジトリにあります。

Clément Godbarge
著者
デジタル・ヒューマニティーズ講師
クレマン・ゴドバルジュはセント・アンドルーズ大学のデジタル・ヒューマニティーズ講師。研究テーマは近世ヨーロッパにおける科学と統治術の関係である。近刊の著書では、16世紀のフランスとイタリアの宮廷に仕えた医師たちが、いかにして新しいタイプの政治的専門家として自らを位置づけたかを考察している。これまでにアンドリュー・W・メロン財団、フルブライト委員会、アメリカ・ルネサンス学会、ハーバード大学の助成を受けている。