Pythonを用いてTEI/XMLファイルをEPUBに変換する

概要 Pythonを用いてTEI/XMLファイルをEPUBに変換する機会がありましたので、その備忘録です。 TEI/XMLファイルをEPUBに変換する方法として、Oxygen XML Editorを使用する方法もありますが、今回は、Pythonのライブラリ「EbookLib」を使用します。以下の記事を参考にしました。 https://dev.classmethod.jp/articles/try-create-epub-by-python-ebooklib/ 特に今回は、「校異源氏物語・本文テキストデータリポジトリ」で公開されているTEI/XMLファイルを対象として、縦書きのEPUBを作成することを目的とします。 変換方法 以下のノートブックにソースコードを記載しています。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/Pythonを用いてTEI_XMLファイルをEPUBに変換する.ipynb 結果 以下のように、EPUBに対応したリーダーで、校異源氏物語のテキストを閲覧することができます。 HTMLとCSSに変更を加えることで、多様な表示を実現することができると思います。 TEI/XMLの活用にあたり、参考になりましたら幸いです。

2022年9月30日 · 1 分 · Nakamura

XMLファイルで文字列のみを抽出して処理する方法

XMLファイルで文字列のみを抽出して処理する機会がありました。 このニーズに対して、以下のようなスクリプトにより、実現することができました。 s e o l u e p m e = n t B s e a = u t s i o f u u p l . S f o i u n p d ( C o h p i e l n d ( r p e a n t ( h t , e ' x r t ' = ) T , r u " e x , m l r " e ) c u r s i v e = T r u e ) ポイントは、text=Trueを与えている点で、テキストノードのみを取得することができました。 ...

2022年9月22日 · 1 分 · Nakamura

BeautifulSoupでxml:id属性を与える方法

BeautifulSoupでxml:id属性を与える方法の備忘録です。 以下の方法ではエラーが発生してしまいます。 f s s p r o o r o u u i m p p n . t b = a ( s p s 4 B p o e e u i a n p m u d ) p t ( o i s r f o t u u l p B S . e o n a u e u p w t ( _ i f t f e a u a g l t ( S u " o r p u e " p s , = " a x b m c l = " " ) x y z " , x m l : i d = " a b c " ) ) 以下のように記述すると正しく実行できました。 ...

2022年8月30日 · 2 分 · Nakamura

二つのテキスト間の差分を抽出するプログラムを作成しました。

概要 二つのテキスト間の差分を抽出するプログラムを作成しました。以下のGoogle Colabからご利用いただけます。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/校異情報の生成.ipynb 有名なサービスとして「difff」がありますが、今回はPythonを用いて実装しています。 https://difff.jp/ テキスト間の差分の算出には、difflib.SequenceMatcherを使用しています。 https://docs.python.org/ja/3/library/difflib.html 使い方 出力方式として、HTMLファイルとTEIファイルの2種類を選ぶことができます。 HTML HTMLファイルの出力結果例は以下です。 XML XMLファイルの出力例は以下です。 < < < さ た ? ? T し / x x E す T m m I せ E l l < < そ I - x t / t / > v m m e t e t e o l i e x e r d n H < i t < x s e s e f / H > b / t i l = a i f e o b > o " d l i a d o n h h e e < < < l d y < d = r t r D t / p / s / e e > p / y " e t > e i t u p o s D r > p > 1 f p s t i b u u o e > あ > . = : c l < t l < b r < u s い < < 0 " / > e t l i p l c l / r c う a / / l < / / " h / S i e c > i e i l c > え p a a b a a a t w t t S a P c D s i e お p p p / p p p e t w m l t t u a e t < < s D < < p < < p > p < < p < < p n p w t e m i b t s W w w t e x l r > l r > < l r > l r > c s . > > t o l i c i i i W s m e d き e d l x e d て e d o : t T > n i o > t t t i c l m g く m g b m m g と m g d / e i S c n > n n t > : / l i / i t t a S e e > i w w w w > : w w w w n r - l m t t s s d i i i i i i i i i g a c e t i m s s = t t t t d t t t t = w . < > o t " = = = = = = = = = " . o / n > x x a " " " " " " " " " u g r t < m m 1 # # # # a # # # # t i g i / l l " t t t t 3 t t t t f t / t p : : > 1 2 1 2 " 1 2 1 2 - h n l > i i " " " " > " " " " 8 u s e d d > > > > > > / / " b / > = = か こ け か ち じ > > ? u 1 " " < < け こ < ぬ づ > s . t t l / < < < < e 0 1 2 b l / r / / r " " " / e r l d l r c > > > > m d < e g e d < o 中 中 > g a m > m g a n 村 村 > p > > > p t 式 式 p p e 五 五 n 十 十 x x t 音 音 m m . < 又 l l c / 様 : : o w < i i m i / d d / t w = = l n i " " d e t a a a s n 2 4 s s e " " j > s > > p s 8 > / t e i - e x a m p l e / m a i n / t e i _ a l l . r n g " s c h e m a t y p e n s = " h t t p : / / r e l a x n g . o r g / n s / s t r u c t u r e / 1 . 0 " t y p e = " a p p l i c a t i o n / x m l " ? > 工夫した点として、TEI(Text Encoding Initiative)で定められているappタグを用いて出力します。そのため、appタグに対応したツールで可視化を行うことができます。 ...

2022年7月14日 · 4 分 · Nakamura

Node.js で XSLT を実行するサンプルリポジトリを作成しました。

Node.js で XSLT を実行するサンプルリポジトリを作成しました。 https://github.com/ldasjp8/nodejs-xslt TEI/XMLファイルなどをNode.jsで処理する際の参考になりましたら幸いです。

2022年4月8日 · 1 分 · Nakamura