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

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

概要 二つのテキスト間の差分を抽出するプログラムを作成しました。以下の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

「NDL OCR x IIIF」アプリにTEI/XML形式でダウンロードする機能を追加しました。

国立国会図書館「次世代デジタルライブラリー」で公開されているOCR結果をIIIFビューアで閲覧するアプリについて、OCR結果をTEI/XML形式でダウンロードする機能を追加しました。 https://static.ldas.jp/ndl-ocr-iiif/ 本アプリについては、以下の記事も参考にしてください。 本機能の追加にあたり、UIを更新しました。結果を「ビューア」と「データ」に分けています。 「ビューア」については、従来から提供していた「Mirador」と「Curation Viewer」に加えて、「Universal Viewer」、「Image Annotator」を追加しました。また、「次世代デジタルライブラリー」へのリンクと、TEI/XMLファイルの簡易ビューアとして「TEI Viewer」というページを実装して追加しています。 「データ」については、「マニフェストファイル」「キュレーションリスト」「TEI/XML」の3種類を提供します。 用途に応じてご活用いただけますと幸いです。

2022年4月15日 · 1 分 · Nakamura

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

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

2022年4月8日 · 1 分 · Nakamura

Pythonを用いたTEI/XMLファイルの分析サンプルプログラムを作成しました。

Pythonを用いたTEI/XMLファイルの分析サンプルプログラムを作成しました。 以下のGoogle Colabからご利用いただけます。 https://colab.research.google.com/drive/1fji80KZW8typjJMi01fyUWjrdYrNldsK TEIデータの活用を検討されている方の参考になりましたら幸いです。

2022年3月6日 · 1 分 · Nakamura

Omeka S XML Viewerモジュールの使い方

※ 本モジュールの使用にあたっては、一部発展的な手続きが必要となります。Omeka Sの基本的な使用を検討されている方は、その点ご注意ください。 概要 Omeka SでXMLファイルの表示を可能とするXML Viewerモジュールの使い方について説明します。TEIで作成したXMLファイルの表示といった用途などに利用できます。 gitlab.com インストール 本モジュールについては、2022年3月4日時点において、GitLabのみで公開されており、GitHubでは公開されていません。 また、リリース版のzipファイルが提供されていないため、ソースコードをダウンロードする必要があります。 具体的には、以下のURLから、ソースコード版のzipファイルをダウンロードします。 https://gitlab.com/Daniel-KM/Omeka-S-module-XmlViewer/-/archive/master/Omeka-S-module-XmlViewer-master.zip これを展開すると、リリース版のXmlViewerというフォルダとは異なり、Omeka-S-module-XmlViewerというフォルダが作成されます。なので、本フォルダ名をXmlViewerに変更する必要があります。 その後は、他のモジュールと同様、Omeka Sの管理画面からインストールを行います。 XMLファイルのアップロード XMLファイルのアップロードは、一般的なメディアの登録方法と同じです。アイテムを新規作成し、そのアイテムに紐づけるメディアとして、XMLファイルを登録します。登録方法は、画像などと同様、ローカルからアップロードする他、URLを参照して登録することもできます。 注意点として、Omeka Sのデフォルト設定では、xmlファイルのアップロードは許可されておらず、以下のようなエラーが発生します。 そのため、以下の設定画面の「セキュリティ」の項目において、「許可されるメディアタイプ」にtext/xml、許可されるファイル拡張子にxmlを追記して保存します。 もしくは、「ファイル検証を無効にする」を有効化します。 上記の設定により、以下のようにxmlファイルが登録されます。この時、下図のMIMEタイプを確認しておいてください。 なお、xmlファイルに <?[xml](http://d.hatena.ne.jp/keyword/xml) version="1.0" encoding="[UTF-8](http://d.hatena.ne.jp/keyword/UTF-8)"?> の記述がない場合、以下のように、MIMEタイプが text/html に設定されてしまう場合があります。この時、後述するxslによる変換がうまくいかない場合があるため、xmlファイルの修正を推奨します。 XML Viewerモジュールの設定 次に、以下のように、サイトの設定画面に移動します。 その中に「XML Viewer」という項目があります。ここに、先ほど確認したMIMEタイプがない場合、下図のように追記します。「xsl/xml-html.xslt」は、本モジュールでデフォルトで提供されているxsltファイルです。 具体的なxsltファイルは、以下からご確認いただけます。 https://gitlab.com/Daniel-KM/Omeka-S-module-XmlViewer/-/blob/master/asset/xsl/xml-html.xslt その結果、サイト内のメディアの詳細ページにおいて、以下のように変換されたHTMLの内容が表示されます。 具体的には、登録したXMLファイルに対して、以下のように、xsltファイルへのリンクが挿入されていることが確認できます。 まとめ 上述したように、本モジュールによって提供されるxsltファイルに基づき、Omeka Sに登録したXMLファイルの内容を表示できることを確認しました。 用途に応じたxsltファイルを作成することで、表示内容のカスタマイズが可能です。 例えば、以下のようなxsltファイルを用意し、/modules/XmlViewer/asset/xsl に配置します。 https://gist.github.com/nakamura196/a74202c691e9957938e89a36d4da319a そして、上述した設定画面で当該ファイルを指定することにより、以下のように表示スタイルを変更することができます。 少し発展的な内容を含むモジュールですが、Omeka SとTEI/XMLの連携をお考えの方などの参考になれば幸いです。

2022年3月4日 · 1 分 · Nakamura

IIIFマニフェストファイルからTEIのfacsimile要素を作成するプログラムを作成しました。

IIIFマニフェストファイルからTEIのfacsimile要素を作成するプログラムを作成しました。以下のGoogle Colaboratoryでお試しいただけます。 colab.research.google.com IIIFとTEIの連携を検討されている方の参考になりましたら幸いです。

2022年2月22日 · 1 分 · Nakamura

JavaScriptのquerySelector()でxml:idに特定の値を持つ要素を取得する方法

JavaScriptのquerySelector()でxml:idに特定の値を持つ要素を取得する方法についての備忘録です。 具体的には、例えばmyDocという変数に対して、以下の方法で取得できます。この例では、xml:id属性にabcという値を持つ要素を取得します。 myDoc.querySelector("[*|id=‘abc’]") *|(パイプ)idの形で指定する点がポイントです。 JavaScriptでTEI/XMLファイルを扱う場合、xml:id属性の値を使って要素を取得するケースがあります。このxml:id属性について、typeやcorrespといった他の属性と異なり、属性名にprefix「xml:」がついています。そのため、上記のような方法を使用する必要があります。 より良い方法や他の方法もあるかもしれませんが、参考になりましたら幸いです。

2022年2月21日 · 1 分 · Nakamura

Oxygenの自動整形機能においてlbタグの前で改行する方法

概要 本記事では、TEI/XMLを便利に扱うことができるツール「Oxygen XML Editor」において、自動で整形・インデントするルールを変更する方法について紹介します。 特に、行の始まりを示すlbタグの前で改行されるようにすることを目指します。 背景 TEI/XMLを便利に扱うことができるツール「Oxygen XML Editor」において、自動で整形・インデントする機能があります。下図の上部に示しているアイコンです。 本機能を使うことにより、一定のルールに基づいて整形されますが、このルールを編集したくなる場合があります。 例えば、上図は『校異源氏物語』のテキストデータです。行の始まりを示すlb(line beginning)タグがありますが、(私の環境の)デフォルトの整形ルールでは、lbタグが行の途中に入る形で整形されます。 本テキストデータを機械的に処理する際には問題ありませんが、特に人手でテキストデータを作成・編集する際に、lbタグの前で改行されてほしい、というニーズがありました。 整形ルールの編集 Oxygenの「オプション」というメニューから以下の画面を開き、画面左部のナビゲーションから「エディタ」 > 「整形」 > 「XML」を選びます。 下図は、私のデフォルト設定を示します。画面右下の「デフォルト設定」ボタンから、いつでもデフォルト設定に戻すことができます。 これに対して、下図の設定変更を行います。 まず、画面中央部の「要素 間隔」という項目において、右端の「改行」を選び、右下の「追加」ボタンから、lb要素を追加します。この時、「前」という列にチェックが入っていることにより、自動整形時に、lbタグの前で改行されるようになります。 次に、「整形」という項目において、「テキストをそのまま維持」にチェックを入れます。これにチェックを入れないと、マークアップの方法によっては、自動整形するたびに、lbタグの前に空行が入ってしまうことを確認しました。 その他の設定については、必要に応じて試してみてください。 結果 上記の設定を行なった上で自動整形を行うと、下図のように、lbタグの前で改行されるようになりました。 特に人手でTEI/XMLファイルを作成・編集する際に、本記事がお役に立てば幸いです。

2021年8月8日 · 1 分 · Nakamura