Mirador3プラグイン開発: Text Overlay pluginで縦書き対応を行う

概要 Text Overlay plugin for Mirador 3は、OCRまたはトランスクリプションに基づいて選択可能なテキストオーバーレイを表示するMirador3のプラグインです。 https://github.com/dbmdz/mirador-textoverlay 以下でデモページが公開されています。 https://mirador-textoverlay.netlify.app/ 一方、日本語などの縦書きテキストを表示してみると、以下のようにうまく表示ができませんでした。 そこで、上記のリポジトリをフォークして、縦書きテキストも表示できるようにしました。以下のリポジトリでソースコードを公開しています。(いずれプルリクエストも検討したいと思います。) https://github.com/nakamura196/mirador-textoverlay 結果、以下のように縦書きテキストも表示できるようになりました。 デモページは以下です。 https://nakamura196.github.io/mirador-integration-textoverlay/?manifest=https://nakamura196.github.io/static/iiif/6722fa34-2fff-11ee-a029-0242ac1c000c/manifest_o.json&annotationState=1&canvasIndex=3 以下、本モジュール開発に関連する事項をメモします。 マニフェストファイルの構造 本モジュールでは、以下の要件を満たすIIIFマニフェストが必要とのことでした。 https://github.com/dbmdz/mirador-textoverlay#requirements-for-supported-iiif-manifests いくつかのオプションがありますが、以下のwellcome collectionのマニフェストを参考にしました。 https://iiif.wellcomecollection.org/presentation/v2/b18035723 Canvas毎にseeAlsoでALTO XMLファイルへのURLが指定されています。 { } { } { } { } { } " " " " " " } " " " " , , , } " } " " " @ @ f h w s ] " ] " @ @ l t " " " " " " " " , s , h w i i t o e i e " " " " " " , o , w i t a h " " " w h w h w h w h } e " " " " e i m { d y r i d r @ @ p p w h } t { } i d y b u @ @ s i e i e i e i e e @ p f l i d a " p m g t v c i r r i e h t " p e m i t e " " " " " " " d i d i d i d i ] A i r o a g t g " " " " : e a h h i o d o o d i } " e " " " h : e l b d y r @ @ p p w h s t g t g t g t g l d o r b h h e @ @ m r " t t " c n " f t t g , o r @ @ l i " " n " p v c i r r i e i h h h h h h h h s " f m e t " s i t o e " : " " : e t : i o h h n C i t a n " : : a : e i o d o o d i z " t " t " t " t o : i a l " : " d y t s h : : " e l c " t " o d y b " h i " c n " f t t g e : " : " : " : " " l t " : : " p i o t " 7 : x " e o : " : n " p e : t " " l " : e t : i o h h s : : : : : " e " : 2 : e v u t d " 1 3 t h " l : t : e l t s - " h " e l c " t " 7 1 2 7 h " : 3 4 [ " a r p c i 0 2 { " t : " 2 " e " " " p c " : t " : x " e o : " : 2 1 4 2 8 4 3 1 { t : " 3 1 " : t c s t m 2 , : t : 4 3 h n " : : " s : , t d t h " l : , 0 3 0 6 0 2 0 t " M 7 1 h i e : y a 4 p " 1 3 t t h : C { p c { " t : " 7 [ 0 , 0 , 0 , 2 p " t E 2 , t " o " / p g , " s h " 1 7 t " t " " / a s t : t : 3 1 4 s h e T , t o n : / e e h : t h , 2 p : t s T / n : y p " 2 0 : t x S p a " i s / t / t t s p c e i v / p " s h " , 2 / t t - s : : { i : j t / p t : [ s : x i a / e h : t h 4 / p / A : A i I p p i : p / : A t i s i s t / t t , a : x L / n " f m e : i / : / / n f " i : t / p t p / m T / n s . a g / i / / i / n o . , i I p i : p i l O i o c w g " / f i / i i o f w f m : i / : . w " i t : e e , i . i i i i t e . a / i / / w w , X i a p l " i w i i f i a p l w g / f i / e w M f t a l , i e f i . f t a l e e i . i i l . L . i i c f l . f w . i g c l " i w i i l l " w o n o . l i . e w o e o l , i e f i c o e n t m i c o i l e n m c f l . f o c l " i e o / o l l L e o . l i . m . l , n c m a / c l i - c m i c o i e g c g o a e p a o c s " o e o / o c o o " l p c i p m o t l c m a / o v m , l i / i e m " l o a e p a l / e e l i / c e , e l p c i p l s c c i l m i o c c l i / i e t o t m e a m l o t e l i / c a l i a c g a l l i c i l m i t n l o g t e g e l o t m e a m i d e n e i e c e n i a c g a o a c . / 2 " t c . o g t e g n r t o 2 n , i t o n e i e . d i r / . l o i r . / 2 " o s o g c o e n o g o 2 n , r / n / o r v . n / r / . l g a . i n g e o . p g c o e / l o m t / l r o r / o r v t t r a e i 1 g r e t n g e e o g g x m . / g s h t / l x / / e t a j p / e u e t 0 t p / . g s r a n m x h . / 3 r b j e e n t b t u j a / e 1 s n s n a s . m s l a s 8 b " e o t / j b o t l e 0 n 1 , n t i b s s n o t n 3 " 8 t a o 1 o / " / o t 5 , 0 a t n 8 n b , b . a 7 3 t i / 0 " 1 1 x t 2 5 i o b 3 , 8 8 s i 3 7 o n 1 5 0 0 d o _ 2 n s 8 7 3 3 " n 0 3 / / 0 2 5 5 , / 0 _ b v 3 3 7 7 b 0 0 1 2 5 _ 2 2 1 3 0 8 / 7 0 3 3 8 . 0 0 b 2 0 _ / 0 J 3 3 1 3 0 0 b 3 P . 5 8 / 3 0 1 5 2 J 7 0 c . 0 8 7 / P 2 3 a J 3 0 2 f 2 3 5 n P . 3 3 u " / 7 v 2 J 5 / l , c 2 a / P 7 c l a 3 s f 2 2 a / n / e u " 3 n 7 v b s l , _ v 3 a 1 / l 0 a 2 s 8 b / 0 s , e 0 1 7 0 e 1 s 3 8 2 3 s 0 / 5 0 , . / 2 b 7 3 1 J b 4 1 2 5 0 P 1 / 8 3 7 0 2 8 0 0 _ 2 / " 0 / 3 0 3 0 , 3 d 5 0 _ / 5 e 7 0 0 d 7 f 2 3 0 e 2 a 3 . 0 f 3 u _ J 3 a _ l 0 P . u 0 t 0 2 J l 0 . 0 / P t 0 j 3 l 2 . 3 p . i " j . g J n , p J " P e g P , 2 " " 2 " , , / p a i n t i n g / a n n o " , まとめ 開発したプラグインについて、xmlファイルのロードが完了しない時があるなど、引き続き改善が必要ですが、Mirador3のプラグイン開発やIIIF、OCR結果の活用にあたり、参考になりましたら幸いです。 ...

2023年8月22日 · 9 分 · Nakamura

ALTO (Analyzed Layout and Text Object) XMLについて

概要 ALTO (Analyzed Layout and Text Object) XMLについて、GPT-4に問い合わせた結果を共有します。 https://www.loc.gov/standards/alto/ 必須項目 ALTO (Analyzed Layout and Text Object) XMLは、OCR生成テキストとそのレイアウトを表現するためのXMLスキーマです。その構造は非常に柔軟で、多くの要素と属性が存在しますが、必須の要素は限られています。 最も単純な形式のALTO XMLは、以下のような階層構造を持ちます: <alto>: ルート要素です。ALTO XMLスキーマのバージョンを示す@xmlns属性と@xmlns:xsi属性を持つ必要があります。また、<Description>と<Layout>という二つの子要素を持つ必要があります。 <Description>: ファイルのメタデータを含みます。この要素自体に必須の子要素はありませんが、通常、<MeasurementUnit>, <sourceImageInformation>や<OCRProcessing>などの子要素を含むでしょう。 <Layout>: ファイルの物理的なレイアウトを表現します。これは<Page>という子要素を1つ以上含む必要があります。 <Page>: 一つのページを表現します。この要素は@IDと@WIDTHと@HEIGHTという三つの必須属性を持つべきです。また、<PrintSpace>という子要素を1つ持つことができます。 上記の要素はALTO XMLの最も基本的な構造を表現していますが、テキストの内容やそのレイアウトを詳細に表現するためには、さらに多くの要素と属性を使用することが可能です。例えば、<PrintSpace>, <TextBlock>, <TextLine>, <String>などの要素を使用することで、テキストの物理的な配置や内容を詳細に表現することができます。それぞれの要素や属性の詳細については、ALTO XMLスキーマのドキュメンテーションを参照してください。 OCRProcessing要素 OCRProcessing要素は、ALTO XML内の<Description>エレメント内で使用されます。この要素は、特定のOCRプロセスに関する情報を格納します。それは以下のサブ要素を持つことができます: ocrProcessingStep: OCR処理の各ステップを記述します。この要素は processingDateTime, processingAgency, processingSoftware, processingStepSettings, processingStepDescriptionといった属性を持つことができます。 以下に、OCRProcessingエレメントの使用例を示します: < D e < D s O e c C O s r R o C c i P c < < < < < o R r p r r p p p / p p c P i t o P r r r < < < p r r r r p i c r o o o s s s r o o P o t o e o c c c o o o o c c r c i n s c e e e f f f c e e o e o > s e s s s t t t e s s c s n i s s s s w w w s s s e s > n s i i i a a a s i i s i g i n n n r r r i n n s n n g g g e e e n g g i g I g D A S C N V g S S n > D S a g o r a e S t t g = t t e f e m r o e e S " e e n t a e s f p p t O p T c w t > i t S D e C > i y a o S o w e e p R m > r r o n a t s > 1 e A e > f > r t c " > g > S t S e i r > 2 e o w o > n i 0 n f a f g p 2 c t r t s t 3 y w e w > i - a a S o 0 N r N r e n 8 a e a e t > - m m t D 0 e C e V i e 1 < r < e n s T / e / r g c 0 p a s s s r 0 r t o i < i : o o f o / p 0 c r t n p t 0 e w < r i : s N a / o o 0 s a r s c n 0 i m e o e < n e N f s o / g < a t s f p A / m w i r g s e a n t o e o > r g h c n f e S e e c t V t s y w e e p s > a r p r i r s S o n e i e c g C o t e D r n t s a e > i s t a n i e t g n T o s g i r > m > s e t > e p < / p r o c e s s i n g S t e p D e s c r i p t i o n > ここで、processingDateTimeはOCR処理が行われた日時を表し、processingAgencyはその処理を行った機関名を表します。processingSoftwareはOCR処理に使用されたソフトウェアに関する情報を含み、processingStepSettingsとprocessingStepDescriptionはそれぞれ設定と処理手順の説明を提供します。 ...

2023年7月31日 · 3 分 · Nakamura