Multi-Saxon

Multi-Saxon: параллельная обработка XSLT для больших корпусов TEI
Multi-Saxon закрывает серьёзный пробел в инструментах обработки XML: он позволяет параллельно выполнять преобразования XSLT 2.0 и 3.0, с которыми не справляется LXML (популярная библиотека Python для работы с XML). Созданный специально для больших собраний документов XML TEI, Multi-Saxon заметно ускоряет обработку за счёт эффективного параллельного выполнения.
Основные возможности
- Продвинутая поддержка XSLT: выполняет преобразования XSLT 2.0 и 3.0, недоступные LXML
- Параллельная обработка: резко сокращает время преобразования больших собраний документов за счёт распараллеливания
- Оптимизация под TEI: спроектирован специально для XML-документов Text Encoding Initiative (TEI)
- Масштабируемая производительность: эффективно обрабатывает корпуса от сотен до тысяч документов
- Кроссплатформенность: работает в разных операционных системах и средах
Какую проблему решает Multi-Saxon
Специалисты по цифровым гуманитарным наукам, работающие с TEI, часто сталкиваются с двумя серьёзными трудностями:
- LXML (распространённая библиотека Python для обработки XML) поддерживает только XSLT 1.0, так что более продвинутыми возможностями XSLT 2.0/3.0 воспользоваться невозможно
- Последовательная обработка больших корпусов документов TEI может занимать непозволительно много времени
Multi-Saxon решает обе задачи: он использует продвинутые возможности XSLT в Saxon и распределяет обработку по нескольким ядрам, что даёт существенный выигрыш в производительности.
Реализация
Multi-Saxon сочетает Python с Java-процессором Saxon, образуя высокопроизводительный конвейер преобразований:
- использует Java-библиотеку Saxon для надёжной обработки XSLT 2.0/3.0
- применяет многопроцессность, распределяя преобразования по доступным ядрам 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.
