DTS Viewerの更新:ページネーションへの対応

概要 DTS (Distributed Text Services)ビューアについて、ページネーションへの対応を行ったので、備忘録です。 https://dts-viewer.vercel.app/ja/ 背景 DTSで多数のリソースなどを提供する際に、以下のように、viewプロパティを使って、ページネーションに関する情報を提示するようでした。 https://distributed-text-services.github.io/specifications/versions/unstable/#collection-endpoint { } " " " " " " " " " } " ] " } @ d @ @ c t t t d , m , v c t i t o o o i u e " i o s d y l t t t b m . e n V " p l a a l l " " ] b . w " " " " " " t e e e l l e i p t e . " @ @ f p n l e r : " c P C " n u i r " : i t i r e a x s t a h : C b t " d y r e x s t i " : i r i o l l { : { " p s v t t " o l o e l " r i e " : e t i " " : n e " n n d L e s " l [ " " o : : " t C " t r e " h : a " : : u " : t o : s e t : e n / s " " h r l " n t r [ g a " " " / / t " e l " : " r { " " p P / : a a t 1 s e / : e : : i a a p p p - _ c a 1 s / g p " i i s a d t p , 1 [ " d i i / / : l e i i 0 d " f t n a d d / p _ o / 0 e É r s a d p t t / h p n d 0 c " / t t i s s d a o " t 0 P o , c i s / / i " i , s , o l o o d c c s , l / i e " l n c t o o t u c l v l " o s l l r s o u N a e , l / l l i " l s a l c l c e e b , l " t u t e o c c u e , i e i c l t t t c o " o t l i i e t n n i e o o d i a : / o c n n - o l ? n t / / t n e " i / i ? ? e / L d ? o i i x { d e = i n d d t ? e t l d / = = - i s t e = ? l l s d r t l i e e e , C e t e d t t r p h s r t = t t v a a e t l r r i g r d s r e e e c e t e _ e t s s e , e d s t _ _ s n s P e _ r d d . a " o _ d e e e g v , i p e s _ _ i } l o _ _ p p t " " u i p d o o h , h s l o e i i u t " u i _ l l b t } s l p u u . p & u o s s i s p s i & & o : a & l p p / / g p u a a s / e a s g g p v = g & e e e i 1 e p = = c a 9 = a 2 5 i f " 1 g 0 0 f . , " e " 0 i o , = , " c r 1 a g 8 t / " i v , o i n a s f / / c 1 o 6 n 7 t 8 e 7 x 4 t 5 / 8 1 5 - " a ] l , p h a 1 . j s o n " , そこで、DTS Viewerについて、上記のviewプロパティに対応できるように改修しました。 ...

2025年6月2日 · 4 分 · Nakamura

NDL古典籍OCR-Liteを用いたアノテーション付きIIIFマニフェストファイルとTEI/XMLファイルの作成

お知らせ 本記事で紹介する流れをわかりやすくした記事を作成しました。以下も参考にしてください。 概要 NDL古典籍OCR-Liteを用いたアノテーション付きIIIFマニフェストファイルとTEI/XMLファイルの作成を行うツールを試作したので紹介します。 アノテーション付きIIIFマニフェストファイルの作成 まず、NDL古典籍OCR-Liteを用いて、IIIFマニフェストファイルを入力として、アノテーション付きIIIFマニフェストファイルを出力するGradioアプリを作成しました。Hugging FaceのSpaceを用いて公開しています。 https://nakamura196-ndlkotenocr-lite-iiif.hf.space/ 出力結果として、以下のようなアノテーション付きIIIFマニフェストファイルが得られます。 { } " " " " } " ] @ i t l , i c d y a " ] t { } { } o " p b n e , n : e e o " m " " " " " } " ] " ] " " " " " } " ] " ] t " l n 校 s i t w h l , i , a i t w h l , i , a e " : " e 異 " d y i e a " ] t { } n { } d y i e a " ] t { } n { } x h : " 源 : " p d i b n e n " p d i b n e n t t " : 氏 : e t g e o " m " " " ] o " " " ] : e t g e o " m " " " ] o " " " " t M { 物 [ " h h l n 1 s i t i t i t i " h h l n 2 s i t i t i t i : p a [ 語 " : " t " e " " d y t { } a d y t { } { } { } { } { } { } { } " : " t " e " " d y t { } a d y t s n . h : " : " : " p e t " p e , , , , , , h : " : " : " p e t " p e " : i t " : : : e m " " " " " } i : e m " " " " " } " " " " " } " " " " " } " " " " " } " " " " " } " " " " " } " " " " " } t " : : : e m " " " " " } i : e m h / f 巻 t C 6 { [ " s i t m t b o " s i t m t b i t m t b i t m t b i t m t b i t m t b i t m t b i t m t b t C 6 { [ " s i t m t b o " s t / e 一 p a 8 4 [ " : " d y o a o " " " " " " ] n " : " d y o a o " " d y o a o " " d y o a o " " d y o a o " " d y o a o " " d y o a o " " d y o a o " " p a 8 4 [ " : " d y o a o " " " " " " ] n " : " t d s " s n 9 7 h : " p t r d i t f w h s s h : " p t r d t v " p t r d t v " p t r d t v " p t r d t v " p t r d t v " p t r d t v " p t r d t v s n 9 7 h : " p t r d i t f w h s s h : p l t : 0 0 t " : e i g y d y o i e e { } " t " : e i g y y a : e i g y y a : e i g y y a : e i g y y a : e i g y y a : e i g y y a : e i g y y a : 0 0 t " : e i g y d y o i e e { } " t " : . " / a , 6 t A [ " v e " " p r d i r : t A [ " v e " p l " v e " p l " v e " p l " v e " p l " v e " p l " v e " p l " v e " p l / a , 6 t A [ " v e " " p r d i r : t A [ n , / s , p n " : a t : : e m t g v " " " p n " : a t : e u " : a t : e u " : a t : e u " : a t : e u " : a t : e u " : a t : e u " : a t : e u / s , p n " : a t : : e m t g v " " " p n ] / d d " s n h t " " a h h i i t p [ s n h t " " e h t " " e h t " " e h t " " e h t " " e h t " " e h t " " e d " s n h t " " a h h i i t p [ s n i l l , : t " i : { " : t " t c d y r : t " i : { : " t " i : { : " t " i : { : " t " i : { : " t " i : { : " t " i : { : " t " i : { : " l , : t " i : { " : t " t c d y r : i . . t t A o h " : " e " p o t t A o : t A o : t A o : t A o : t A o : t A o : t A o : . t t A o h " : " e " p o t i g n / a p n n " t " : : " : e f / a p n n " " p n n " " p n n " " p n n " " p n n " " p n n " " p n n " " n / a p n n " t " : : " : e f / a f o d d t s n " h t I 6 : " i d t s n " h T " s n " h T " s n " h T " s n " h T " s n " h T " s n " h T " s n " h T " d d t s n " h t I 6 : " i d t . . l l i : : t p m " 8 4 " : l l i : : t e 一 : : t e ○ : : t e 一 : : t e ス : : t e □ : : t e 〇 : : t e 同 l l i : : t p m " 8 4 " : l l i i j . . o t t s a i 9 7 [ h e . o t t x ・ t t x 〇 t t x 一 t t x 〇 t t x 琉 t t x 〇 t t x 校 . . o t t s a i 9 7 [ h e . o o p g n n / a " p : g m 0 0 t " " n n / a " p t 〇 / a " p t " / a " p t " / a " p t 〇 / a " p t 球 / a " p t 〇 / a " p t 異 g n n / a " p : g m 0 0 t " " n n / / o d P d t s s / e a , 6 t I : d P d t c s u ・ d t c s u d t c s u d t c s u 〇 d t c s u □ d t c s u 〇 d t c s u 源 o d P d t s s / e a , 6 t I : d P a a . l a l i c : / " g , p m l a l i o : a ・ l i o : a l i o : a l i o : a 六 l i o : a □ l i o : a 〇 l i o : a 氏 . l a l i c : / " g , p m l a p p j . g . o : / d , e s a " . g . o m / l ・ . o m / l . o m / l . o m / l 〇 . o m / l □ . o m / l 〇 . o m / l 物 j . g . o : / d , e s a " . g i i p g e n n p / l / : g l g e n n m / B ・ n n m / B n n m / B n n m / B 〇 n n m / B □ n n m / B 〇 n n m / B 巻 p g e n n p / l / : g l g e / / / o " d " a d . j / e e o " d " e d o ・ d " e d o d " e d o d " e d o 〇 d " e d o □ d " e d o 〇 d " e d o 一 / o " d " a d . j / e e o " p i a . , l , i l n p / S v . , l , n l d ・ l , n l d l , n l d l , n l d 一 l , n l d □ l , n l d 〇 l , n l d " a . , l , i l n p / S v . , r i p j . n . d e d e e j . t . y 一 . t . y . t . y . t . y 〇 . t . y □ . t . y 〇 . t . y p j . n . d e d e e j e i i p g t n l g l r l p g i n " 一 g i n " g i n " g i n " 〇 g i n " □ g i n " 〇 g i n " i p g t n l g l r l p s f / / o i d . " . v 2 / o n d , 一 o n d , o n d , o n d , 〇 o n d , □ o n d , 〇 o n d , / / o i d . " . v 2 / e / i a . n l g , n i " a . g l 一 . g l . g l . g l 〇 . g l □ . g l 〇 . g l i a . n l g , n i " a n 3 i p j g . o d c p j " . ・ j " . j " . j " . 〇 j " . □ j " . 〇 j " . i p j g . o d c p t 4 i i p " g . l e i p , g ・ p , g p , g p , g 〇 p , g □ p , g 〇 p , g i i p " g . l e i a 3 f / / , o j . 2 / / o ・ / o / o / o 〇 / o □ / o 〇 / o f / / , o j . 2 / t 7 / i a . p g " i a . ・ a . a . a . 一 a . □ a . 〇 a . / i a . p g " i i 6 3 i p j / o , i p j ・ p j p j p j 一 p j □ p j 〇 p j 3 i p j / o , i o 8 4 i i p a . i i p ・ i p i p i p 一 i p □ i p 〇 i p 4 i i p a . i n 6 3 f / / p j f / / ・ / / / / / / 〇 / / □ / / 〇 / / 3 f / / p j f / / 7 / i a i p / i a ・ i a i a i a 〇 i a " i a 〇 i a 7 / i a i p / 3 m 6 3 i p / / 3 i p ・ i p i p i p 〇 i p i p 〇 i p 6 3 i p / / 3 / a 8 4 i i i a 4 i i ・ i i i i i i 一 i i i i 〇 i i 8 4 i i i a 4 c n 6 3 f / i p 3 f / ・ f / f / f / 一 f / f / 〇 f / 6 3 f / i p 3 o i / 7 / i i i 7 / i ・ / i / i / i 一 / i / i 〇 / i / 7 / i i i 7 n f c 6 3 i f / 6 3 i ・ 3 i 3 i 3 i 一 3 i 3 i 一 3 i c 6 3 i f / 6 t e a 8 4 i / i 8 4 i ・ 4 i 4 i 4 i 〇 4 i 4 i 〇 4 i a 8 4 i / i 8 e s n 6 3 f 3 i 6 3 f ・ 3 f 3 f 3 f 〇 3 f 3 f 〇 3 f n 6 3 f 3 i 6 x t v / 7 / 4 i / 7 / ・ 7 / 7 / 7 / 〇 7 / 7 / 一 7 / v / 7 / 4 i / t . a c 6 3 3 f c 6 3 ・ 6 3 6 3 6 3 〇 6 3 6 3 〇 6 3 a c 6 3 3 f c . j s a 8 4 7 / a 8 4 ・ 8 4 8 4 8 4 〇 8 4 8 4 〇 8 4 s a 8 4 7 / a j s / n 6 3 6 3 n 6 3 ・ 6 3 6 3 6 3 〇 6 3 6 3 〇 6 3 / n 6 3 6 3 n s o 1 v / 7 8 4 v / 7 ・ / 7 / 7 / 7 〇 / 7 / 7 " / 7 2 v / 7 8 4 v o n " a c 6 6 3 a c 6 ・ c 6 c 6 c 6 〇 c 6 c 6 c 6 " a c 6 6 3 a n " , s a 8 / 7 s a 8 ・ a 8 a 8 a 8 〇 a 8 a 8 a 8 , s a 8 / 7 s " , / n 6 R 6 / n 6 ・ n 6 n 6 n 6 〇 n 6 n 6 n 6 / n 6 R 6 / , 1 v / 0 8 1 v / ・ v / v / v / 一 v / v / v / 2 v / 0 8 2 / a c 0 6 / a c ・ a c a c a c 一 a c a c a c / a c 0 6 / p s a 0 / a s a ・ s a s a s a ・ s a s a s a p s a 0 / a a / n 0 R n / n ・ / n / n / n 〇 / n / n / n a / n 0 R n g 1 v 0 0 n 1 v ・ 1 v 1 v 1 v 〇 1 v 1 v 1 v g 2 v 0 0 n e / a 0 0 o / a ・ / a / a / a ・ / a / a / a e / a 0 0 o " p s 1 0 s a s ・ a s a s a s ・ a s a s a s " p s 2 0 s , a / / 0 " n / ・ n / n / n / ・ n / n / n / , a / / 0 " g 1 f 0 , n 1 ・ n 1 n 1 n 1 ・ n 1 n 1 n 1 g 2 f 0 , e " u 0 o # ・ o # o # o # ・ o # o # o # e " u 0 / , l 1 s x ・ s x s x s x ・ s x s x s x / , l 2 i l " / y ・ / y / y / y ・ / y / y / y i l " m / , 0 w ・ 1 w 2 w 3 w の 4 w 5 w 6 w m / , a f " h ・ " h " h " h 〇 " h " h " h a f g u , = ・ , = , = , = 〇 , = , = , = g u e l 5 ・ 5 5 4 ・ 4 4 6 e l a l 2 ・ 2 0 3 ・ 3 2 9 a l n / 7 ・ 9 9 7 ・ 7 8 4 n / n 0 0 ・ 3 2 5 ・ 5 3 , n 0 o / , ・ , , , 一 , , 4 o / " d 2 ・ 2 3 3 ・ 2 2 9 " d , e 7 ・ 0 2 0 ・ 8 7 9 , e f 5 ・ 0 7 4 ・ 5 5 , f a , ・ 9 2 , " 3 6 3 a u 1 ・ , , 1 , , 1 u l 1 ・ 2 6 0 4 6 0 l t 4 ・ 1 3 3 5 3 , t . , ・ 8 , , , , 2 . j 9 ・ , 8 1 5 2 9 j p 3 ・ 4 0 4 2 5 9 p g 5 ・ 2 " 7 2 2 1 g " " ・ 4 , 5 " " " " , , ・ " " , , , , ・ , , " TEI/XMLファイルの作成 上記で得られたアノテーション付きIIIFマニフェストファイルを入力として、TEI/XMLファイルを作成するライブラリを作成しました。 ...

2025年5月27日 · 42 分 · Nakamura

TEI/XMLファイルをS3互換のオブジェクトストレージでホストする

概要 TEI/XMLファイルをS3互換のオブジェクトストレージでホストする機会がありましたので、備忘録です。具体的には、mdx Iのオブジェクトストレージを対象にします。 https://mdx.jp/mdx1/p/about/system 背景 TEI/XMLファイルを読み込み、その内容を可視化するウェブアプリケーション(Next.js)を構築します。この時、ファイル数やサイズが小さい場合は、publicフォルダに格納していましたが、これらが大きくなった場合、別の場所でホストすることを考えました。 場所の選択肢は多々ありますが、今回はS3互換であるmdx Iのオブジェクトストレージを対象にします。 GUIを用いたオブジェクトストレージへのファイルアップロード オブジェクトストレージへTEI/XMLファイルをGUI経由でアップロードする方法も多々あります。その中で、これまではCyberduckを使用する方法や、GakunNin RDMを使用する方法などを紹介しました。 一方、今回の事例では、TEI/XML以外のコンテンツをDrupalで管理していました。そこで、Drupalとオブジェクトストレージを接続し、ユーザはDrupalの操作で完結できるようにしました。 Drupalとオブジェクトストレージの接続 以下のモジュールを使用します。 https://www.drupal.org/project/s3fs インストール後、環境設定のページ/admin/configから、S3 File Systemを選択します。 そして、アクセスキーや秘密鍵を登録し、さらにS3のバケット名を登録します。 またAdvanced Configuration OptionsのCustom Host Settingsにおいて、https://s3ds.mdx.jpを入力します。 これでオブジェクトストレージとの接続設定は完了です。 その後、各コンテンツタイプのフィード設定において、アップロード先として「S3 File System」を選択します。 また、今回はTEI/XMLファイルがアップロード対象となるため、「許可されている拡張子」として、xmlを入力します。 この結果、DrupalのGUIを介してアップロードしたTEI/XMLファイルが、mdx Iのオブジェクトストレージに格納されるようになりました。 (参考)DrupalのJSON:APIを用いたファイルの一括アップロード TEI/XMLの初期登録にあたり、Pythonを用いた一括登録を行いました。JSON:APIを用いたファイルの一括アップロードの方法は、以下の記事などが参考になりました。 https://www.drupal.org/node/3024331 一例ですが、以下のようなスクリプトで実現できました。 i i i f f f c m m m r r r l p p p o o o a o o o m m m s r r r s d d d d t t t d g t e e e e o l q A f f f f r j o t o d p e s s e b m i l # s # # # s s l # l l i g # c i e u u # f # w h h h # r i e q o n C _ o e e e o o o f e s f l p r i i e e e e f l u n v i i l i a D l エ s 認 l l g ロ g g t C r s l l フ l フ t a a a フ s s e m m i n d r f ン e 証 f f i グ i i l _ S f c e o ァ e ァ h d d d ァ p r e s i p p e i _ u . ド l 情 . . n イ n n l j h o s c R _ f c s # # s } : # s a = イ n イ f e e e イ o e i : p t m o o n t d p D ポ f 報 U P ( ン _ _ o s e g e s F t " o r e e d ル a ル o i r r r ル n s f r s p r r t _ o a R イ . ( S A s リ u r g o a i l r ト o { o f r s l r l _ f 名 m を p l s s s を s p i o t t : _ t l U ン J B E S e ク r e i n d n f f ー k s k _ e e f a f f " を e バ e e [ [ ア e o v n r ( e サ P ト S a R S l エ l s n = e _ . _ ク e e i t t l . " " " i . i { 取 イ n _ = ' ' ッ n e p t t g t s n イ A ( O s N W f ス p _ { r r s t ン n l e o u f h C A X s c l s 得 = ナ ( d C C プ = s r r ( l q e v ト L J N i A O ) ト = o u " s e e o を _ f s k r . e o c - e s e e リ f a s o o ロ e b i f l o d l ( の _ S A c M R : n r n = s s k 取 r . = e n c a n c C r ( l o モ i t e n n ー r . o n " o b m f o U B O P 認 E D f s l a { p s e 得 e D s n s d t e S E f s f s ー l a l t t ド e s s t フ a ) v R A N I 証 " e , m " o i n s R e _ c r e e p R x _ e . . ド e f e e q t e ( ァ d : e L S : _ ) = = { e C n o ( p U l r s f r n t F c t l D p で _ = . n n u a : f イ _ r ( E A E s = " o s n s o P f e r _ s t " - e o f R a 読 p h t t e t " ル d r 例 _ P N o o e : n e _ e n A . s f t - : T p k , U t み a f e - - s u フ ア o i ) U I D s s l r t . c l s L s p _ o = T o t e P h 込 t . a T D t s ァ ッ t d R ) P . . f e s e s o f e _ e o t k y " k i n t A . む h r d y i s _ イ プ e e L O g g . q e n t o ) B s n o e { p a e o y L b , e e p s . c ル ロ n = I e e D u l t a k : = A s s k n e p n n = p _ a a r e p p o ア ー v T = N t t R e f - t i S i e e " p " ( e B s ' d s ' o o d ッ ド r T e e U s . T u e r E o . n = : l : f N , A e r ( . ] s s e プ 失 u o n n P t U y s s e _ n s _ i " o S n b ) c i t ロ 敗 e s = v v A s S p _ q U _ t r c " c c C n u E a ' o = t ( = ー : ) . ( ( L . E e c = u R c a e s a a s S e u _ m ) p i u = ド g f " " _ p R " o e L o t s r p t r R i U e y ' o r 成 { e " D D B o N : d l s } u p f p i f F d R ( a ( a n l 2 功 r t { R R A s A e o t k s o _ l o _ ト , L f s ) p ' , 0 : e e s U U S t M " g s s i _ n t i n t ー } i p ] 0 s n e P P E ( E a = i . e e c s o c / o ク f / l f l h : { p v l A A _ , p = n g s s o e k a v k ン i j e : i = e f o ( f L L U p _ e s d . e t n e 取 e s _ c a i n " . _ _ R " l 2 r t i e t n i d n 得 l o p a f d l s D D U P L p i 0 e ( o # e _ o . _ 失 d n a t ' e e e R R S A } a c 0 s n = x r n a r 敗 , a t i a r n . U U E S / s a : p / こ = t e / p e : p h o t s a s P P R S u s t o t こ s v i s f i ) n t = m t A A N W s " i n o で 2 p n + p { i / / a h e a L L A O e : o s k ロ 0 o d j o c l n o c e } t _ _ M R r n e e グ 0 n . s n s e o c h a " u B B E D / s / . n イ : s a o s r _ d t m d ) s A A " " l e j c " ン e p n e f p e e e e _ S S ) ) o l s o , セ . i " . _ a / t n r c E E g f o o ッ t + , t t t { - t s o _ _ i . n k シ e j e o h t s ; , d U U n P " i ョ x s x k , y t e R R ? A } e ン t o t e p r f c } L L _ S s を n , n v e e i o " } f S 渡 " _ e } a l o { ) / o W す , r r / m e k r j r O e b { ' n i e s m R s o u a e s o a D p s u m s p n t } o e i e = o a = , n = d = s n p j s F } " e s i s e a / { l e / o . l { f f . n n s s f i . t o " t e i l s e d a ) e e e x e t : l n s t / u d a s } a s } m i " r _ " e o ) t c } n i o " _ c d ' c l e o e } o " k { i c e s s r , f _ d t a o t k a e = n f _ i r l e e s _ p d o a n t s a e ) . t e x t } " ) すでに対象コンテンツが作成済みで、例えばfield_fileといったフィールドにファイルをアップロードする目的で使用することができます。 ...

2025年5月24日 · 14 分 · Nakamura

校異源氏物語テキストDBのDTS(Distributed Text Services) APIの更新

概要 校異源氏物語テキストDBのDTS(Distributed Text Services) APIを更新したので、備忘録です。 背景 DTS(Distributed Text Services) APIは以下で説明されています。 https://distributed-text-services.github.io/specifications/ 以下の記事で、DTS APIの作成について紹介しました。 一方、以下を課題としていました。 今回開発したDTS APIも上記のガイドラインに非対応の箇所がある可能性がある点にご注意ください。 そこで、前回作成したAPIをv1とし、今回はdtsVersionの1-alphaに従ったv2のAPIを作成します。 API 以下がEntry Endpointです。v1とv2の違いは以下です。 v1 https://dts-typescript.vercel.app/api/v1/dts { } " " " " " " n @ @ c @ d a i t o c o v d y l o c i " p l n u g : e e t m a " c e e t " : t x n i i t t a " o " s n p E n : " " i n s : : / t " " v r : d " " 1 y t / / / P " s a a d o / / p p t i a E i i s n p n / / " t i t v v , " / r 1 1 , v y / / 1 P d d / o t t d i s s t n / / s t d n / . o a c j c v o s u i l o m g l n e a e l n t c d t i t " " o i , n o " n , s " , v2 https://dts-typescript.vercel.app/api/v2/dts ...

2025年5月24日 · 18 分 · Nakamura

IIIF画像に対する多角形アノテーション支援ツールの改修

概要 IIIF画像に対する多角形アノテーション支援ツール「IIIF Annotator」の改修を行いました。具体的には、以下の2点に取り組みました。 Image Server未使用のマニフェストファイルへの対応 アノテーション付きIIIFマニフェストファイルのエクスポート機能 TEI/XMLファイルのエクスポート機能 以下、これらの改修について説明します。 背景 以下の記事で、アノテーション付与ツールを新規に作成した理由等を説明しました。 今回追加した機能は他のツールでも提供されている機能群になりますが、利便性向上のため追加実装しました。 Image Server未使用のマニフェストファイルへの対応 以下の記事で紹介しているように、IIIFマニフェストファイルにおいて、Image API(Image Server)を使用しないオプションを取ることができます。デメリットもありますが、Cantaloupe Image Serverなどのソフトウェアを導入せずに使用できる点に利点があります。 IIIF Annotatorについて、これまではImage Serverの使用を前提として実装していましたが、今回の改修により、Image Server未使用のマニフェストファイルも読み込めるようにしました。 具体的には以下のように、serviceの有無に応じて、OpenSeadragonに渡すtileSourcesを調整しました。 c o n . } . ) s m ) f ; t a c c i c } i } } i ( p o o f o ; f l t t ( n n n i s r e r } t i t i ( s s ( s d e ( e l e ; e l i l c t t ! t : r b t s t t u r e l e a a v o u e u y r ( S e S n a a n b s i d r r p l o S o v n n n o t c y n { n e : u o u a n n o d r e . : r u r s o o t y i ? s b { b c r c : t t a n : e o " o e c e a a t = g r d i d : e s C t t i ; { v y m y a i i o a i . a . s ! = n o o n n " c s g i t = v n n ) n @ e e e d r = c a P o i r " , i a s a = r t d & v , n n n ) g e a " & i g u v e a t t : c l a = n u i b e | l s > = n r o s o [ e o n n t d 0 { s { c t . r y ] a a n b i . [ t n t u o n s " y v i l d g e @ p a o l y r i e s n ; } v d : . P a [ i " i a s ] c ] s t g ; e t e e { . + r m ? l i s . e " n ? i n / g . t g i ; [ e t n 0 m h f u ] s o r ; ? > . l . j : [ 0 s 0 ) o s ] n t ; { " r ; i n g } | n u l l ) = > エクスポート機能 アノテーション付きIIIFマニフェストファイル、およびTEI/XMLファイルとしてエクスポートする機能を追加しました。エクスポートボタンを押すと、以下のような選択肢が表示されます。 ...

2025年5月20日 · 3 分 · Nakamura

DTS (Distributed Text Services)のビューア開発

概要 DTS (Distributed Text Services)のビューアを開発したので、備忘録です。 以下のURLからお試しいただけます。 https://dts-viewer.vercel.app/ja/ 背景 DTS (Distributed Text Services)の公式ページは以下です。 https://distributed-text-services.github.io/specifications/ 以下の記事でも取り上げました。 今回、このDTS仕様に一部準拠したビューアを開発しました。 使い方 以下がトップページです。フォームにDTSのURLを入力します。ページ下部で例を提供します。技術的には、Entry pointを使用しています。 コレクションの一覧ページです。Collection Endpointを使用しています。 以下のAPIを例としています。 リンクをたどると、以下のようなリソースの一覧ページに遷移します。 ダウンロードボタンを押すと、TEI/XMLが表示されます。Document Endpointを使用しています。 ナビゲーションボタンを押すと、アクセス可能な部分テキストの一覧が表示されます。Navigation Endpointを使用していますが、現時点で複数階層には非対応です。 リンクをクリックすると、以下のような部分テキストをダウンロードすることができます。 工夫点 公式ページに以下のように記載されています。 The DTS Specification is currently in a public comment period following the 1-alpha release (機械翻訳)DTS仕様は、1-alphaリリースの後、現在パブリックコメント期間中です。 このような背景のため、既存のDTSの記述方法にばらつきがありました。そこで内部でできるだけDTS API (1.0 Draft)に変換し、その結果を可視化するようにしています。 DTS仕様が成熟するにつれ、このような問題は解決されるかと思います。 まとめ DTS仕様は以下のように説明されています。 The Distributed Text Services (DTS) Specification defines an API for working with collections of text as machine-actionable data. ...

2025年5月11日 · 1 分 · Nakamura

Annotorious v2のpolygonツールを使って、polylineを作成する

概要 Annotorious v2のpolygonツールを使って、polylineを作成する方法の備忘録です。 背景 Annotorious v2のウェブサイトは以下です。 https://annotorious.github.io/getting-started/ 以下のように、polygonを記述することができます。 一方、同様の方法でpolylineを記述するツールは、以下のプラグインを含めて、提供されていないようでした。 https://github.com/annotorious/annotorious-v2-selector-pack カスタマイズ 以下のような多角形を作成した場合、 以下のようなJSONファイルが作成されます。 { } " " ] " } " " t b , t , @ i y o a c d p d r o " e y { } g " " } n : " " e s s t : : t o e e " " u l x # " [ " " " : r e " " t c A t v p c c t v " 4 n y a u { e t y a : 6 n p l r " o p l 9 o e u p : r e u " b t " e o " " e h 1 a : " s " : : " t a t : e h : t 3 i " " t { " p - o T " : t S " : 8 n e p p v < / 9 " x o " s g s / 0 , t l c : S v w 2 u y o / e g w - a g m / l > w 4 l o m w e < . 4 B n e w c p w 4 o " n w t o 3 3 d , t . o l . - y i e r y o 8 " n - " g r f , g c , o g 5 " o n / 4 d n - i p s 4 c o / 7 e i a d s n n f . t n 8 u s o b n = . b i \ j 8 f " s 7 r 3 o d . 3 n 7 c 8 l e h 3 d " / . " l 1 , o 2 r 1 i 3 s 3 / 7 g 8 a 9 u 0 / 6 g 2 a 5 u , - 1 F 2 r 9 a 0 g . m 1 e 3 n 7 t 4 / 5 g 1 a 1 u 7 - 1 F 8 r 7 a 5 g m 9 e 4 n 5 t . _ 1 f 3 r 5 a 4 g 9 0 8 0 0 1 4 a 6 . 8 j 7 p 5 2 , / 1 f 6 u 5 l 8 l . / 4 f 2 u 6 l 5 l 1 / 3 0 6 / 7 d 1 e 8 f 7 a 5 u l 8 t 8 / 5 j . p 9 g 6 " 9 , 6 6 5 5 2 7 3 4 3 8 , 3 0 0 3 . 3 5 2 2 9 4 9 2 1 8 7 5 2 5 0 8 . 5 4 1 5 0 3 9 0 6 2 5 , 3 3 4 8 . 4 2 4 0 7 2 2 6 5 6 2 5 3 4 8 5 . 0 2 1 4 8 4 3 7 5 , 2 7 2 4 . 3 5 7 9 1 0 1 5 6 2 5 2 1 7 0 . 8 1 1 7 6 7 5 7 8 1 2 5 , 2 1 0 7 . 6 3 3 7 8 9 0 6 2 5 \ " / s v g > " 上記に対して、autoCloseのような変数を用意し、これがfalseの場合、polygonという文字列をpolylineに変更する処理を加えました。 ...

2025年5月5日 · 9 分 · Nakamura

Vercelにデプロイしたexpressについて、vercel.jsonによるcors対応を行う

概要 Vercelにデプロイしたexpressについて、vercel.jsonによるcors対応を行う方法に関する備忘録です。 背景 以下の記事で紹介したプログラムについて、cors対応を行いました。 以下を参考にしています。 https://vercel.com/guides/how-to-enable-cors 方法 対応方法は以下です。他にも方法があるかと思いますが、headersを加えることで対応することができました。 https://github.com/nakamura196/dts-typescript/commit/4c28f66b2af68950656dcb812f3e941d1b9b5feb { } " " ] " ] " ] " ] v b , r , r , h e u { } e { } e { } e { } r i w d a s l " " r " " i " " " d " " ] i d s u i s d r s d p e s h o s r s t o e e o e e r o e { { { } { } n " c e e u s c u s r s u a , " : " " s r t t r t m " r d " " " " " " : : : " c i s c i a : c e k k k v k v [ : e n " e n n e r e e e a e a 2 " " " a : " a e [ " s y y y l y l , s @ [ : t : t n : " " " " u " u r v i [ i t : : : : e : e c e " " " " " " / r n n : / [ " " " : " : i c a " " " a A A A A n e p : , : t p c c c " c " d l i r i c c c G c X e / / " " u / e e e E e - x n d / / e ( s s s T s C . o t s a . s s s , s S t d s r p * - - - O - R s e ( c i ) C C C P C F " " . / " o o o T o - , i d , n n n I n T ) n t t t t O t o " d s r r r N r k , e " o o o S o e x , l l l , l n . - - - P - , t A A A A A s l l l T l X " l l l C l - o o o H o R w w w , w e - - - D - q C O M E H u r r e L e e e i t E a s d g h T d t e i o E e e n n d , r d t " s P s - i , " O " W a , S , i l " T t s v , h " a P , , l U u T A " e " c v " c a : e l p u " t e * , " " : A } c " , c t e r p u t e - " V e } r , s i o n , C o n t e n t - L e n g t h , C o n t e n t - M D 5 , C o n t e n t - T y p e , D a t e , X - A p i - V e r s i o n " まとめ 参考になりましたら幸いです。 ...

2025年4月24日 · 3 分 · Nakamura

Google Cloud Vision APIとGakuNin RDMを用いたTEI/XMLファイル作成アプリの試作

概要 Google Cloud Vision APIとGakuNin RDMを用いたTEI/XMLファイル作成アプリを試作しましたので備忘録です。 背景 Google Cloud Vision APIを使ってOCR結果を反映したTEI/XMLファイルを作成する環境が必要になりました。そこでバックエンドとしてGakuNin RDMを用いて、ユーザごとにファイルを管理して、OCRを実行可能な環境を試作しました。 使い方 フォルダの作成 以下にアクセスします。 https://ge-manager.vercel.app/ 画面右上から、GakuNin RDMを使ってログインします。 以下のようにプロジェクト一覧が表示されます。 適当な階層まで下り、フォルダの作成ボタンを押します。 ここでは、「sample」というフォルダを作成します。 そして、「GE Manager」のリンクを押します。 以下のようなページに遷移します。 処理の実行 今回は、「e-codices - Virtual Manuscript Library of Switzerland」の「fragm1a」を使用させていただきます。 https://www.e-codices.unifr.ch/loris/gau/gau-Fragment/gau-Fragment_frag001a.jp2/full/full/0/default/jpg 画像のURLを入力して、アップロードボタンを押します。アップロードされると、以下のような画面に変わります。 次に、「OCR実行」ボタンを押します。正しく完了すると、以下のように表示されます。 次に「TEI/XML作成」ボタンを押します。正しく完了すると、以下のようにTEI/XMLとともに表示されます。 Oxygen XML Editorでダウンロードしたファイルを表示した例です。Google Cloud Vision APIによるOCR結果を確認することができます。 GakuNin RDMのファイル 上記のプロセスで作成された各種ファイルは、GakuNin RDMのフォルダにファイルとして保存されます。 参考: URLを介してアクセス可能な画像ファイルを用意する mdx.jpのオブジェクトストレージを利用して、URLを介してアクセス可能な画像ファイルを用意する。 今回はge-editorというバケットを作成し、以下のようなファイルを用意します。 { } " " ] V S e t { } r a s t " " " } " " i e S E P , A R o m i f r " c e n e d f i D t s " n " e n D i o : t : c c N o u " t i " n r " : " " p : " c 2 g : a : e 0 [ e l [ " 0 - " " " [ : 8 e A : * " - d l " s " 1 i l { ] 3 g 0 t o : e - o w L - 1 r " i e 7 " , s d " , t i , B t u o c r k " e t " , " s 3 : G e t O b j e c t " ] , そして、以下を実行することで、上記のバケットにアップロードされたファイルをダウンロード可能にします。 ...

2025年4月16日 · 2 分 · Nakamura

IIIFの多角形アノテーションをTEI/XMLで表現する一例

概要 IIIFの多角形アノテーションをTEI/XMLで表現する一例について紹介します。 方法 TEI/XMLでは、zoneタグとpoints属性を使用して、多角形のアノテーションを表現することができます。 https://www.tei-c.org/release/doc/tei-p5-doc/en/html/ref-teidata.point.html 例 動作確認のため、以下の記事で紹介したアノテーションツールに、TEI/XML形式でのエクスポート機能を追加しました。 具体的には、以下のようなダウンロード時のオプションを追加しました。 ダウンロード結果として得られるTEI/XMLの例は以下です。ulx, uly, lrx, lryで矩形を記述しつつ、pointsで多角形の情報を記述しています。 < < < < ? ? ? T / x x x E T m m m I E l l l < < < I - - x t / t / f / > v m m m e t e t a f e o o l i e x e c a r d d n H < i t < x s < < c s e e s e f / H > b / t i s / s / s i l l = a i f e o b > m u s u s i o " d l i a d o i r u r u m n h h h e e < < < l d y < d l f < < < r f < < < r i = r r t r D t / p / s / e e > p / y e a g z z f a g z z f l " e e t > e i t u p o s D r > p > c r o o a c r o o a e 1 f f p s t i b u u o e > > s e a n n c e a n n c > . = = : c l < t l < b r < u s S a p e e e p e e e 0 " " / > e t / l i p / l c p / r c o m s h > s h > " h h / S i t e c > p i e > p c > m e a i u u a i u u t t w t t i S a > c D > e e A m c l l m c l l e t t w m l T t t t P a e I D s e x x e x x n p p w t e i l m i u t s n e t = A u = = A u = = c : : . > > t e t o b i c f s e " s r " " s r " " o / t l > > n l o > o c x h = l 5 4 = l 2 9 d / e e S i n r > t t " = 3 7 " = 1 9 i w w i t c S m t h " 1 8 h " 9 3 n w w - m a t a h p t h 4 " t h 7 " g w w c t t m t e s t t " t t " = . . . > i t i r : p t u p t u " t t o o > o e / s p u l s p u l u e e r n n . / : s l y : s l y t i i g d / : y = / : y = f - - / I a l / = " / / = " - c c n n b . d / " 3 d / " 3 8 . . s f o n l d 1 0 l d 3 7 " o o / o u d . l 9 7 . l 0 0 ? r r 1 r t l n . 8 " n . 4 1 > g g . m . d n 3 d n 4 " / 0 a t g l d " l l d " r r " t h o . l r . l l e e > i e . g . l x g . l r l l o j o g r = o g r x e e n s p . o x " . o x = a a o j . = 1 j . = " s s u a p j " 2 p j " 2 e e r p / p 5 2 / p 2 8 / / c i a / 5 6 a / 7 4 x x e / p a 0 " p a 3 9 m m i i p 9 i p 1 " l l i / i " l / i " / / i i / r i / l t t f i i l y i i l r e e / i i r = i i r y i i 3 f i y " f i y = / / 4 / f = 3 / f = " c c 3 3 / " 7 3 / " 4 u u 7 4 3 2 3 4 3 3 0 s s 6 3 4 1 1 3 4 5 9 t t 8 7 3 8 " 7 3 7 5 o o 6 6 7 9 6 7 3 " m m / 8 6 " a 8 6 " / / m 6 8 n 6 8 a s s a / 6 a a / 6 a n c c n c / n = c / n a h h i a R a " a R a = e e f n 0 = 校 n 0 = " m m e v 0 " 異 v 0 " 中 a a s a 0 C 源 a 0 サ 央 / / t s 0 を 氏 s 0 ン 公 r r . / 0 変 物 / 0 プ 論 e e j 1 0 更 語 3 0 ル 社 l l s " 1 " " " 3 " 蔵 a a o > / > / 版 x x n f p p f p " n n " u o o u o g g > l i i l i p / / l n n l n o t t / t t / t i e e f s s f s n i i u = = u = t _ _ l " " l " s a a l 5 4 l 2 = l l / 3 7 / 2 " l l 0 1 8 0 0 9 . . / 4 , / 9 9 r r d , 3 d , 3 n n e 2 7 e 3 , g g f 0 3 f 0 4 " " a 8 2 a 4 0 u 7 u 5 9 t t l 4 l 6 y y t 5 7 t 2 p p . 4 8 . 1 9 e e j 1 , j 9 9 = = p 2 3 p 8 3 " " g , 0 g , , a a " 1 8 " 3 3 p p 9 5 7 p p s 8 1 s 5 0 l l a 4 2 a 1 2 i i m 2 m c c e 5 7 e 2 2 a a A 5 , A 7 8 t t s 1 3 s 2 4 i i = 0 0 = 9 9 o o " , 8 " , , n n h 2 h 3 3 / / t 0 1 t 5 7 x x t 8 2 t 7 0 m m p 7 2 p 5 2 l l s 7 s " " : 5 , : 2 2 / 4 3 / 7 8 s s / 1 7 / 3 4 c c d 2 3 d 2 9 h h l , 2 l , , e e . 2 . 3 4 m m n 1 4 n 0 0 a a d 9 7 d 6 9 t t l 0 8 l 2 6 y y . , . p p g 5 3 g 2 9 e e o 3 7 o 2 9 n n . 1 3 . 0 3 s s j 4 2 j 9 , = = p , " p , 4 " " / 2 / / 3 0 h h a 0 > a 0 9 t t p 8 p 4 6 t t i 7 i 5 " p p / / " : : i 5 i / i 3 i / i 1 i r p f 4 f e u / , / l r 3 2 3 a l 4 0 4 x . 3 8 3 n o 7 7 7 g c 6 " 6 . l 8 / 8 o c 6 > 6 r . / / g R R r 0 0 n g 0 0 s 0 0 d 0 0 s s 0 0 t d 0 0 r l 1 3 u / " " c s / / t c > > u h r e e m / a 1 t . r 0 o " n ? " > ? > 以下は、Oxygen XML Editorで表示した例です。 ...

2025年4月8日 · 8 分 · Nakamura

CETEIceanとXPathを使って特定の要素にスクロールする

概要 CETEIceanとXPathを使って特定の要素にスクロールする方法を調べたので備忘録です。 デモ 以下のURLからお試しいただけます。 https://next-ceteicean-router.vercel.app/xpath/ ページにアクセス後、スクロールし、以下のように表示されます。 XPathの取得 上記では、以下の「校異源氏物語テキストDB」のXMLファイルを対象にしています。 https://kouigenjimonogatari.github.io/tei/01.xml そして、以下のXPathを指定しています。 /TEI/text[1]/body[1]/p[1]/seg[267] このXPathの取得にあたっては、Oxygen XML Editorを用いて、対象要素を右クリックして、「Copy XPath」から取得することができました。 スクロールの実装 以下で紹介したアプリをベースにします。 GitHub上のソースコードは以下です。 https://github.com/nakamura196/next-ceteicean-router/blob/main/src/components/xpath/Render.tsx 特に以下の部分で、XPathをCETEIceanによって作成される要素名に変換し、scrollIntoViewによってスクロールしています。 R } f e , e a c c i } t c o o f [ c t n n . . . c ) c i } t h . s s r r t ( o ; o f e D u t t e e o t n x t n X n n t } t i a s p p L e s p e u P u s ( a ) a D t e r x l l o i t a i l a l t t r b b i ; r o a E a p a a w C t C l t l a g e l n g c の f w a c c e o r h o , h t r e h o l e ] 修 f X t e e r n e , n R a g t a c i t ) 正 e p h ( ( C t s t e r e E v k n E ; c a / / a e u e s g t l i : e l t t = ( s n l n u e E e o : e ( h [ e t t t l t l m r " m ( r A ( R R t E e e : c " e ) = a / - ) e = e . l m n e c n w , Z ; f f F e e t " n e t = " X a . d . I m n . s t n . > / p " - c o c R e t s m e t s T a " z u c u S n ) c o r e t { E t ) ] r u r T t r o " r y I h r m r _ { o t , " l / e e e O = l h , e t ( n n n R l " . e ? t t t D r I , b x 先 = ) . , E e n a t 頭 \ e R s t c [ の / { v E u o k 1 ス | a D l V g ] ラ \ l _ t i r / ッ [ u N . e o b シ | a O s w u o ュ $ t D i ( n d を ) e E n { d y 削 / ( _ g C [ 除 g T l o 1 , Y e l ] P N o / " E o r p t , d [ e e = 1 i V ] - a " / $ l y s 1 u e e " e l g ) l [ a o 2 s w 6 " 7 H ; ] t T " e M ; i L - E プ l レ e フ m ィ e ッ n ク t ス ; を 追 加 まとめ 他にも良い方法があるかもしれませんが、参考になりましたら幸いです。 ...

2025年3月27日 · 3 分 · Nakamura

LEAF WriterとGakuNin RDMを用いたTEI/XMLファイルの編集環境の試作

概要 LEAF WriterとGakuNin RDMを用いたTEI/XMLファイルの編集環境の試作を行いましたので、備忘録です。 参考 以下の記事で、LEAF WriterをNext.jsから使用する方法を紹介しました。 特に、以下のnpmパッケージを使用しています。 https://www.npmjs.com/package/@cwrc/leafwriter 上記で編集対象とするTEI/XMLファイルの入出力にあたり、GakuNin RDMを使用してみます。GakuNin RDMのAPIをJavaScriptから使用する方法について、以下も参考になりましたら幸いです。 使い方 以下がプロトタイプシステムのURLです。(色々と不具合が含まれる点にご注意ください。) https://rdm-leaf-editor.vercel.app/ UIはClaude 3.7 Sonnetに作成してもらっています。 「サインイン」ボタンを押すと、認証画面に進むので、ログインします。 ログイン後、リダイレクトされ、プロジェクトの一覧が表示されます。 TEI/XMLファイルが含まれるディレクトリまで移動します。ファイル名に「.xml」が含まれる場合、「Leaf Writer」の列に「編集」ボタンが表示されます。 LEAF Writerの編集画面に遷移するので、テキストを編集します。作業が完了したら、画面右上の「保存」ボタンを押します。 GakuNin RDMのUIから確認してみると、バージョンごとに保存されていることが確認できます。 実装 GakuNin RDMからのファイルの取得および更新は以下で行っています。 e ) } e ) } x : x : p u a c } i } r p u c a c c c } i } フ o r c P o ) f e フ o r o c o P o o ) f ァ r l c r n m h } ; t ) t ァ r l n c n r n n m h } b ; c c c t イ t : e o s e e , ( h ; u イ t : t e t o s s e e , o ( o o o h ル s m t t a A ! r ` r ル e s e m t t t a A d ! n n n r の a s s i h d u r o フ n の a s n s n i h d u y r s s s o 内 s t T s r o e t e w ァ 内 s t t T t s b r o e t : e t o o w 容 y r o e e d r h s イ a 容 y r : o T e l e d r h s l l を n i k < s : s o p n ル w を n i k y < o s : s o b p e e e n 取 c n e s p : r o e の a 更 c n s e p v b p : r l o r . . e 得 g n t o " i n w 取 i 新 g t n e o o " i o n r e e w す f , : r n G { z s 得 t す f , r : : i = n P { z b s o r r る u i s E a e E に る u i d s U a , e r r r E n s n e T t . r 失 r n n s s > n e T t . T o o r c t g " i o r 敗 e c g t t e " i o e r r r t r > = , o k o し s t , r r { w = , o k x ( ( o i i n ) r ま p i i i n ) t " " r o n { a : ( し o o n n B a : 保 レ ( n g w { た n n g g l w { = 存 ス ` a ` 。 s , o a ` に ポ 保 f i B ス e u = b i B a 失 ン 存 e t e テ . p ( t e w 敗 ス に t a ー t d " [ a a し : 失 c f r タ e a a c f r i ま " 敗 h e e ス x t p o e e t し , し F t r コ t e p n t r た ま i c ー ( F l t c r 。 e し l h $ ド ) i i e h $ e ス r た e ( { : ; l c n ( { s テ r 。 C u a e a t u a p ー o ス o r c $ C t ] r c o タ r テ n l c { o i , l c n ス T ー t , e r n o , e s コ e タ e s e t n { s e ー x ス n { s s e / { s . ド t コ t T p n x t T t : ) ー ( o o t m y o e " ; ド k n ( l p k x , : e s " e e t n e : n ( r $ } . } ) e { ` s c ` ; s r , t o , p e a n o s t t n p u e s o s n e n } t . s ` T s e y t . p a s e t t u a } s t ) ) u ; ; s } ` ) ; 上記で使用するURLは以下です。 ...

2025年3月21日 · 15 分 · Nakamura

TEI/XMLから検索システムを構築する際のDTS(Distributed Text Services)のdts:wrapperの応用例

概要 TEI/XMLから検索システムを構築する際のDTS(Distributed Text Services)のdts:wrapperタグの応用例に関するメモです。 DTS(Distributed Text Services)は以下です。 Cayless, H., Clérice, T., Jonathan, R., Scott, I., & Almas, B. Distributed Text Services Specifications (Version 1-alpha) [Computer software]. https://github.com/distributed-text-services/specifications` 参考 DTSの構築例として、以下なども参考になりましたら幸いです。 例 以下の「デジタル延喜式」を例とします。 https://khirin-t.rekihaku.ac.jp/engishiki/ 本システムでは、TEIを用いて作成したXMLデータから、検索時の単位となる部分を抽出し、それをJSON形式のデータに変換した上で検索を行っています。JSONデータの例は以下です。JSON:APIに準拠した記述を採用しています。 http://khirin-t.rekihaku.ac.jp/engishiki/jsonapi/item/39100101.json { } " } " } j , d s a o t n " " } a " " " } a v m " t i a p e e : y d t i r t p " t " s a " } { e : r " " ] " ] " ] " " ] " " " " : i " l " i l j , s , v , u c , m m t x o : i : " b a y h o p a a e h m { n n 3 u b o i l d t n m u l " { k " } " 9 t e " " k " " " a e " i b m " : s s i 1 e l : 3 i 3 : 3 t g 式 f e b : " e t 0 s " 9 " 9 9 e o " e r n " : l e 0 " : [ - : - [ " d r s " a " 1 f " m 1 : 1 1 " y t : i < . { " h " 0 " - [ : " " l ? 0 : r , 1 { 正 0 正 : : " " x " e " 親 0 親 " h : m , { f , 1 " 2 [ " t l " 1 0 h t " : 諸 2 t p h v 諸 王 5 t s t e " 王 年 - p : t r h 年 満 0 s / p s t 満 " 3 : s i t 条 - k : p 1 / h n : 項 5 k i / = / 1 " h r k \ / " , i i h " j , r n i 1 s i - r . o n a i 0 n - . n \ a a r - " p . e a i r k . e . e i r n o k h e c r i a k o g h k i d / a u h i f k . a n o u a k g r . c u = m a . . \ a c j a " t . p c U / j / . T 1 p i j F . / i p - 0 i i / 8 / i f i \ " i / i " f 2 i ? / / f > r e e n 2 n k g / < i i e T h s n E a h g I k i i u k s x / i h m H % i l - 2 k n 7 F i s 4 H % = 3 - 2 \ - 7 F " 7 4 H h 4 3 - t - - 7 t 3 7 4 p 9 4 3 : / - - / m 3 7 / a 9 4 w n / - w i p 3 w f a 9 . e g % t s e 2 e t 5 F i . 0 0 - j 6 0 c s 9 0 . o " 0 o n , 2 r " . g , t / i n f s / / f 1 u . l 0 l \ / " 2 > 0 \ 0 n , / 0 < / d d t e s f : a w u r l a t p . p j e p r g " x , m l n s : d t s = \ " h t t p s : / / w 3 i d . o r g / a p i / d t s # \ " > \ n < d i v t y p e = \ " o r i g i n a l \ " > < p a n a = \ " 項 \ " c o r r e s p = \ " # p a g e 5 0 6 9 \ " x m l : i d = \ " o - i t e m 3 9 1 0 0 1 0 1 \ " > \ n 凡 諸 王 年 満 十 二 、 毎 年 十 二 月 、 \ n < o r g N a m e s a m e A s = \ " # 京 職 \ " > 京 職 < / o r g N a m e > \ n 移 \ n < o r g N a m e s a m e A s = \ " # 宮 内 省 \ " > 宮 内 省 < / o r g N a m e > \ n 、 \ n < o r g N a m e s a m e A s = \ " # 宮 内 省 \ " > 省 < / o r g N a m e > \ n 以 \ n < o r g N a m e s a m e A s = \ " # 京 職 \ " > 京 職 < / o r g N a m e > \ n 移 、 即 付 \ n < o r g N a m e s a m e A s = \ " # 正 親 司 \ " > 司 < / o r g N a m e > \ n 令 勘 会 名 簿 、 訖 更 送 \ n < o r g N a m e s a m e A s = \ " # 宮 内 省 \ " > 省 < / o r g N a m e > \ n 、 明 年 正 月 待 \ n < o r g N a m e s a m e A s = \ " # 太 政 官 \ " > 官 < / o r g N a m e > \ n 符 到 、 始 預 賜 時 服 之 例 、 < / p > < / d i v > < d i v t y p e = \ " j a p a n e s e \ " > < n o t e t y p e = \ " s u m m a r y \ " > \ n 衣 替 え 手 当 て の 受 給 年 齢 に 達 す る 皇 族 へ の 支 給 開 始 手 続 き に 関 す る 規 定 \ n / n o t e > < p a n a = \ " 項 \ " c o r r e s p = \ " e n g i s h i k i _ v 3 9 . x m l # i t e m 3 9 1 0 0 1 0 1 e n g i s h i k i _ v 3 9 _ e n . x m l # i t e m 3 9 1 0 0 1 0 1 \ " x m l : i d = \ " j a - i t e m 3 9 1 0 0 1 0 1 \ " > \ n 皇 族 の 年 齢 が 数 え で 十 二 歳 に 達 し た ら 、 十 二 月 に \ n < r u b y > \ n < r b > \ n 京 職 \ n / r b > \ n < r t p l a c e = \ " r i g h t \ " > \ n き ょ う し き \ n / r t > \ n < / r u b y > \ n が \ n < r u b y > \ n < r b > \ n 宮 内 省 \ n / r b > \ n < r t p l a c e = \ " r i g h t \ " > \ n く な い し ょ う \ n / r t > \ n < / r u b y > \ n に 通 知 し 、 宮 内 省 は 京 職 の 通 知 書 類 を \ n < r u b y > \ n < r b > \ n 正 親 司 \ n / r b > \ n < r t p l a c e = \ " r i g h t \ " > \ n せ い し ん し \ n / r t > \ n < / r u b y > \ n に 下 し て 正 親 司 が 保 管 す る 皇 族 の 台 帳 と 照 合 さ せ よ 。 正 親 司 は こ の 作 業 が 終 わ っ た ら 通 知 書 類 を 宮 内 省 に 送 れ 。 翌 年 正 月 に \ n < r u b y > \ n < r b > \ n 太 政 官 \ n / r b > \ n < r t > \ n だ い じ ょ う か ん \ n / r t > \ n < / r u b y > \ n の 通 達 を 受 領 し て か ら 、 衣 替 え 手 当 て の 支 給 を 開 始 せ よ 。 \ n < / p > < / d i v > < d i v t y p e = \ " e n g l i s h \ " > < n o t e t y p e = \ " s u m m a r y \ " > \ n A g e o f R o y a l R e c i p i e n t s f o r S e a s o n a l C l o t h i n g \ n / n o t e > < p a n a = \ " 項 \ " c o r r e s p = \ " e n g i s h i k i _ v 3 9 . x m l # i t e m 3 9 1 0 0 1 0 1 e n g i s h i k i _ v 3 9 _ j a . x m l # i t e m 3 9 1 0 0 1 0 1 \ " x m l : i d = \ " e n - i t e m 3 9 1 0 0 1 0 1 \ " > \ n E v e r y y e a r i f \ n < s e g x m l : i d = \ " f o o t n o t e 3 9 1 0 0 1 0 1 0 1 \ " > \ n a \ n p r i n c e o r p r i n c e s s \ n / s e g > \ n r e a c h e s \ n < s e g x m l : i d = \ " f o o t n o t e 3 9 1 0 0 1 0 1 0 2 \ " > \ n t w e l v e y e a r s o l d \ n / s e g > \ n , t h e C a p i t a l O f f i c e s h o u l d r e p o r t t h a t \ n i n f o r m a t i o n v i a \ n < s e g x m l : i d = \ " f o o t n o t e 3 9 1 0 0 1 0 1 0 3 \ " > \ n a p a r a l l e l m e m o r a n d u m \ n \ n < s e g r e n d = \ " i t a l i c \ " > \ n i \ n / s e g > \ n \ n < / s e g > \ n t o t h e M i n i s t r y o f t h e R o y a l \ n H o u s e h o l d i n t h e t w e l f t h m o n t h . T h e n t h e M i n i s t r y s h o u l d s e n d t h e \ n m e m o r a n d u m t o t h e R o y a l F a m i l y R e g i s t e r O f f i c e t o c h e c k t h e l i s t a g a i n s t \ n t h e i r e x i s t i n g r o s t e r . A f t e r f i n i s h i n g a l l o f t h e s e p r o c e d u r e s , t h e \ n R o y a l F a m i l y R e g i s t e r O f f i c e s h o u l d r e t u r n t h e m e m o r a n d u m t o t h e \ n M i n i s t r y . T h e p r i n c e o r p r i n c e s s i n q u e s t i o n w i l l r e c e i v e s e a s o n a l \ n c l o t h i n g a f t e r t h e C o u n c i l o f S t a t e ' s o r d e r i s i s s u e d i n t h e f o l l o w i n g \ n N e w Y e a r . \ n < / p > < / d i v > \ n / d t s : w r a p p e r > \ n < / T E I > " 検索結果は以下のように表示されます。校訂文(@type=“original”)、現代語訳(@type=“japanese”)、および英訳(@type=“english”)を表示しています。 ...

2025年3月15日 · 13 分 · Nakamura

Miradorで画像を表示し、CETEIceanでテキストを表示するサンプルアプリ

概要 TEI/XMLファイルを読み込み、Miradorで画像を表示し、CETEIceanでテキストを表示するサンプルアプリを作成しました。以下のURLからお試しいただけます。 デモサイト https://nakamura196.github.io/ceteicean-mirador/ 背景 これまでにも、同様の機能を提供するアプリケーションを開発してきました。 Next.js を使用した実装例 XSLT を使用した実装例 今回は、HTMLとプレーンなJavaScriptのみを使用して実装する方法をご紹介します。 対象データ 以下の校異源氏物語テキストDBを対象とします。 https://kouigenjimonogatari.github.io/ 実装方法 ソースコードは以下のリポジトリで公開しています。 https://github.com/nakamura196/ceteicean-mirador 実装のポイント 1. CETEIcean の behaviors を利用した pb タグの処理 以下のコードでは、CETEIcean の behaviors を利用して pb タグのクリック時の挙動を定義しています。 c } t ) . t } ; a e , d i g f p } d : r i b B a g : l i } c i } c p p } r e { 不 p u p e f o f o b b ) e h 要 h r b f t p n c p n . . c i } ; t a な i e タ u 属 ( b c s ( o b ペ s t ク a o f u v 要 c : グ n p 性 e . o t c n . ー t e リ d n c i } r i 素 : の c b を l s r o s s ジ x ッ d s ( o f n o を 処 t 引 . e r c r t e 番 p t ク E t z n c i } r 非 理 i = き h t e o r t 号 a C イ v o s ( o f p s 表 o 継 a A s r e z A を g o ベ e z n t z n g b ( 示 = n d ぐ s t p r s o t 表 e n ン n o e o s ( o ; { = > o A t 属 e p n t 示 N t ト t n I z n t s T > ( c t r 性 s ) e r u e を L e d o e u o d e u t i か p I i m n 追 i I ) n E s r P d o l m r b ら { d b t 加 s d e l u f a o c ) e i u z = u = t { E e r a g c u n b t o = t = e = l m f c e u m { t u e n e e e n e e a e ( m e . t ( e l c ( l ` e t m n c E s e n c e " I . o " . [ r h e t e l u n t r ( n d g r d g P ( i n ) E e r t . e " " を e r a e a " s t l m f . c a n , 取 t e t t g c . { e e a c r t " 得 A s a A e l g = m n c r e e ) e t p - t i e e t e e a E ) l t . z t $ c t d n E a t l . r r o r { k A o t & l t e e { g i e n i p " t c & e e D m e b p e b a , t u = m D o e t u l - u g r m s e o c n A t a i t e f i e z u n c u t t e c d e N u b n o r t u m ( t ( e " ( u n u t n f . m e " r " ( , " m c t . e a g e n t i c ' n } t e q E c e n t e b o # z " ] i ( u l e t t F i u r ' o ) ` o " e e E A F r - t r , n ; n d r m l t r a p e e e ( a y e e t a g b ( s I ) t S n m r g m " " p d a e t e i m e ) n " ) ) " { - l . n b e n ; " ) ; ; " z e c t u n t ) ; ; o c l . t t ( ) n t o h e ( ) ; e o s a ( ) , - r e s " , i ( s A s d ` t t a " t ( t m ) e " r e ; i t i A - e b s z i u " o - t ) n s e ) e u ( ; [ r " i f s d a a = c m " e e $ " A { ) s z ; " o ) n ) e I { d } " ] ` ) ; 2. Mirador でのページ遷移処理 pb タグをクリックした際に、TEI/XML ファイルから Canvas の URI を取得し、Mirador のページ遷移を実行します。 ...

2025年3月14日 · 6 分 · Nakamura

WordファイルをTEI XMLに変換する方法:TEIgarage APIの活用ガイ

この記事は、AIが作成し、一部を人が修正したものです。 はじめに デジタル人文学の世界では、文書をTEI(Text Encoding Initiative)形式で保存することが一般的になっています。TEIは学術的なテキストを構造化するための標準規格です。今回は、Microsoft Wordで作成した文書をTEI XML形式に変換する方法を、Pythonを使って解説します。 TEIgarageとは? TEIgarageは、さまざまな形式の文書をTEI XMLに変換するためのオンラインサービスです。このサービスはAPIを提供しており、プログラムから直接利用することができます。今回はこのAPIをPythonから呼び出して、Wordファイルを変換してみましょう。 必要なもの Python 3.6以上 requestsライブラリ(APIリクエスト用) インターネット接続 変換したいWordファイル(.docx形式) 手順 1. 必要なライブラリをインストールする まず、必要なライブラリをインストールしましょう。コマンドプロンプトやターミナルで以下のコマンドを実行します。 p i p i n s t a l l r e q u e s t s 2. Pythonスクリプトを作成する 次に、以下のPythonコードをword_to_tei.pyなどの名前で保存します。 i i i f d # i m m m r e f p p p o f メ o o o m イ r r r c # i o T # w # i e ン _ # w # o t e t t t i o n u E i f l 処 n o u r x o n O p t I . t 変 s 理 a 変 r 出 t y c r o z v x u p G d h 換 r e m 換 d 力 p : e e s i i e G t u A o f r 結 e # w : p e し _ フ u # c p p q p m r a _ t R c o i e 果 s i r _ た f ァ t o t r u f p t r d _ A x p l s を p z t i _ い i イ _ W n i e i o _ a o d G e e p フ o i h n W l ル f o v E n s l r d g c o E フ n s o ァ n p # f e t = o e の i r e x t t e t o e u c _ ァ ( n イ s フ z o l ( = r パ l d r c ( s c の m u U イ f = s ル e ァ i t r s " d = ス e フ t e f B x エ e m R ル i e と . イ p e e エ " フ を ァ _ p " y _ ン n e L を l { し s ル f i m i : p ラ _ ァ " 指 = イ d t エ t t ド t n 開 e " = て t を i . e f r ー _ イ d 定 ル o i ラ e o ポ _ t = い _ f 保 a メ l x m i : m ル o " を c o ー s _ イ t _ て p i r 存 t モ e m b m n " a の c o 変 x n が I t ン y t f A a l e せ u リ . l e e z t o p b t , i パ u u 換 _ 発 O e ト p y " P t e q ず s 上 Z フ r m i e s r r ( n ス m t t a 生 i e p h I h " u に _ で i ァ b p i . i e " r _ を e p o s し _ e t に , : e 展 c 展 p イ i e _ _ r n a エ e _ 指 n u _ ま x = t 送 s 開 o 開 F ル n r r x e t k ラ s " 定 t t t e し m = p 信 " f t d i を . e m n ( ー p : s / e : た l " s r i s e l 保 z e f l a " : o / s i : ( d " : b l . e 存 i n . _ m T n s a _ f o T / " e p = ( p d e p e E t s a m x { i c E / ) } o = B _ s x a ( I e e m p m e l x I t s y r w t t t / i . p l l } e % % e a t 2 t e i r h e X . s l e ( " _ 3 3 i s ( 0 e f t a i M x t e _ w ) p A A g T 0 s . h c = _ L m a . t o a a t a f E : I n ( t x l t d e r t p e r i I O a " ( o m 変 u o i d h p x a l G ( m t m s l 換 フ s c . _ , l t g e A r e e e . _ 成 ァ _ x x f i % e : R e l i m p p 功 イ c " m i o c 3 . A s i . b a a ! ル o l l u a A t G p s x e t t t が d " e t t x e E o t m r h h e 見 e # , p i m i _ n ( l , . , i つ , u o l - U s ) " j . か こ # o t n " c R e : ) o o o x り r こ u _ % . L . : s i u m ま e を 出 t p 3 o , c . n t l せ s 実 力 p a A r o p ( p ん p 際 先 u t v g f n a o u に 。 o の を t h n / i t t s t 保 " n フ 指 _ ) d e l e h . _ 存 ) s ァ 定 f : . g e n . p p さ e イ i o e s t d a a れ . ル l p - = ) i t t ま t パ e e w f ) r h h し e ス ) n e i n . ) た x に x b l a a d 。 t 変 m s e s m i " ) 更 l e s e r ) し f r ) z ( n て o v i o a く r i p u m だ m c _ t e さ a e r p ( い t / e u o s C f t u - o : _ t o n p p f v a u f e t t i r h _ c s ) p e i ) a d o t o n h c s ) u / , m { e i m n n e t p m . u b w t e o _ r r d ) d o p c r u o m c e e n s t s _ i t n y g p m e l } . / d { o o c u u t m p e u n t t _ " d o c u m e n t _ t y p e } / " 3. スクリプトを実行する スクリプト内のword_file変数を、変換したいWordファイルの実際のパスに変更します。同様に、output_file変数も希望の出力先に変更してください。 ...

2025年3月3日 · 7 分 · Nakamura

Next.js + CETEIcean + React TEI Routerを使ったビューア開発

概要 Next.js、CETEIcean、React TEI Routerを組み合わせたTEI/XMLビューアの開発についての備忘録です。 背景 CETEIceanは、TEI/XML を HTML5 に変換する JavaScript ライブラリです。 https://github.com/TEIC/CETEIcean そして、React TEI Routerは、CETEIcean をベースに React コンポーネントで TEI/XML を構造化して表示できるライブラリです。以下のように説明されています。 https://github.com/pfefferniels/react-teirouter TEI for React using CETEIcean and routes これらを組み合わせることで、Next.js において TEI/XML をカスタマイズして表示できるビューア を作成しました。 リポジトリ 以下がサンプルリポジトリです。 https://github.com/nakamura196/next-ceteicean-router 実際に動作するデモも用意しています。 https://next-ceteicean-router.vercel.app/ 実装 Next.js のページコンポーネント (page.tsx) CETEIcean を利用して XML を変換し、カスタムコンポーネントで描画します。 i i e } m m x p p p c r o o o o e r r r n < t t t t s T / u t E < T r R R d I t / E n e e e x e < t I a n f m x x b / e > < c d a l m t o < < b x ` R t e u C l > d d / d / o t ; e r l o n y i 私 d i < < d d > n f t n s > v の i v p p / i y d r f t = 名 v > p v > e o r f e " t 前 > s s > > r m o u n h y は t t m n t t p < y y x " c t e p l l m r " t = p = e e e l e @ i : " r = = C a / o ` / o s " " o c c n < / r N c c n t o ? w i a o o t " m A x w g m l l e ; p p m w i e o o n o p l . n r r t n ( t a c : : = e ) v e l o { n e i " r g g x t { r - > r r r m s s c e e e l / i . s e e C t o o p n n o e n r = ; ; n i = g " " " t " " / # > > e ; 1 n i こ こ n . s d ん ん t 0 / 1 に ば } " 1 " ち ん . > は は e 0 田 < > n " 中 / < ; c > 太 p s o 郎 > e d < g i / n p s g e t = r y " s l U N e T a = F m " - e c 8 > o " で l ? す o > 。 r : b l u e ; " > x x x < / s e g > TEIレンダリングコンポーネント CETEIcean を使って XML を HTML5 に変換。 TEIRender + TEIRoute を使い、TEI 要素ごとにカスタムコンポーネントを適用。 import { TEIRender, TEIRoute } from "react-teirouter";を使用した上で、要素毎にコンポーネントを用意しています。 ...

2025年3月2日 · 10 分 · Nakamura

vttファイルからTEI/XMLを作成する

概要 vttファイルからTEI/XMLファイルを作成する方法の備忘録です。 さらに、IIIFマニフェストから、vttファイルおよびTEI/XMLファイルにアクセスできるようにしてみます。結果、以下のように、TEI/XMLファイルがSeeAlsoに関連づけられ、また「Annotations」タブから、vttファイルの内容にアクセスできます。 https://clover-iiif-demo.vercel.app/?manifest=https://movie-tei-demo.vercel.app/data/sdcommons_npl-02FT0102974177/sdcommons_npl-02FT0102974177_vtt.json 参考 以下の「The Ethiopian Language Archive」における取り組みを参考にしました。特に、TEI/XMLの構造化方法が特に参考になりました。 https://dev.jael.info/documentation/ 例 以下で作成したvttファイルを対象とします。 具体的には、以下の『県政ニュース 第1巻』(県立長野図書館)を使用します。 https://www.ro-da.jp/shinshu-dcommons/library/02FT0102974177 TEI/XMLの作成 作成したTEI/XMLファイルの例は以下です。 https://movie-tei-demo.vercel.app/data/sdcommons_npl-02FT0102974177/sdcommons_npl-02FT0102974177.xml 具体的には以下です。 < < < ? ? t / x x e < < t m m i t / T / e l l C e < t E < < T i - - o i f / e I t / t / E C m m r H i < < < < f i > e < < t e < t I o o o p e l t / p / n / s / i H i f / r / e x b e > r d d s u a e i < t u < < p o < n o < s l e H i < < < < f e < r i t o < < < < < < < < < < b x p e e c s d D t t i b d a / u t n o u b / o e a e l t / p / n / s / i v c e H > d t / a / a / a / a / a / a / a / a / a o t u l l h e e l i t l i v < a b e o t r i < < b u D d a e i < t u < p o < n o < s l i h v e y i < < < < < < < < < < t n < a n < a n < a n < a n < a n < a n < a n < a n < a d > s e x r s e t l i s a l v l s t e c b m / r i r e e d D t t i b p u t n o u p o e s a i a > m w w w w w w w w w w i n u n n u n n u n n u n n u n n u n n u n n u n n u n y > h h m m > c S l e c t i i a i S e s e l o < < < m e b c s r e e l i t l b e o t r u D i n s d e h h h h h h h h h h m o n o n o n o n o n o n o n o n o n > r r a l > t e S a r l c i c t > S D S n t a / i / o f l e c > r s e t l i l s t e c r e o g i e l e e e e e e e e e e e t s o t s o t s o t s o t s o t s o t s o t s o t s o e e t n m > t t i a e l a m 昭 t e t o i v < a m < i n S D > > c S l e c i S e s e c s n e o r i n n n n n n n n n n l a t t a t t a t t a t t a t t a t t a t t a t t a t t f f y s t 県 m i b b n a t t 和 m s r g t a l v p p m o t t e > t e S a c t S D e c D n > n i t a a t a a t a a t a a t a a t a a t a a t a a t a a = = p = > 政 t o u i c b i > 3 t c u r l i i a r u p g a r s m > t t a m t e D > e w D e a a a a a a a a a a n i r t i r t i r t i r t i r t i r t i r t i r t i r t " " e " ニ > n t l e i o 0 > > c > e l c i i b r r r u c t 県 m i t t m s e s h e b b b b b b b b b b e o t i o t i o t i o t i o t i o t i o t i o t i o t i h h n h ュ S o i l n 年 t > a e l n l i > g c > > 政 t o i > t c s c e s u s s s s s s s s s s > n = o n = o n = o n = o n = o n = o n = o n = o n = o t t s t ー t r t t i S に > 県 b n a t i n e t ニ > n o > > c > n c n o o o o o o o o o o B " n B " n B " n B " n B " n B " n B " n B " n B " n t t = t ス m > y a t t 長 政 i c b > s t t > ュ S n > = > i l l l l l l l l l l l # B l # B l # B l # B l # B l # B l # B l # B l # B p p " p t 中 > r y m 野 ニ l e i h > = ー t S " t u u u u u u u u u u o t l o t l o t l o t l o t l o t l o t l o t l o t l : : h : 第 > 村 g > t 県 ュ i l e " ス m t 2 = t t t t t t t t t t c 1 o c 2 o c 3 o c 4 o c 5 o c 6 o c 7 o c 8 o c 9 o / t / 1 覚 e > が ー t t i r h t m 0 " e e e e e e e e e e k " c k " c k " c k " c k " c k " c k " c k " c k " c / t / 巻 < t 制 ス y a t > t 第 > t 2 m = = = = = = = = = = k k k k k k k k k w w p w < / = 作 > r y 信 t 1 > 5 s " " " " " " " " " " x e > x e > x e > x e > x e > x e > x e > x e > x e > w w : w / d " し 第 g > 州 p 巻 - " 0 0 0 0 0 0 0 0 0 0 m n m n m n m n m n m n m n m n m n w w w t i h た 1 e デ s < 0 > 0 0 0 0 0 0 0 0 0 0 l d l d l d l d l d l d l d l d l d . . / . i s t 記 巻 t ジ : / 2 : : : : : : : : : : : = : = : = : = : = : = : = : = : = t t p t t t t 録 < = タ / t - 0 0 0 0 0 0 0 0 0 0 i " i " i " i " i " i " i " i " i " e e u e l r p 映 / " ル / i 1 0 0 0 0 0 1 1 1 1 1 d # d # d # d # d # d # d # d # d # i i r i e i : 像 t h コ w t 8 : : : : : : : : : : = t = t = t = t = t = t = t = t = t - - l - > b / 。 i t モ w l " 0 2 3 5 5 0 0 1 2 3 " 2 " 3 " 4 " 5 " 6 " 7 " 8 " 9 " 1 c c . c u / 次 t t ン w e > 0 5 8 0 5 3 8 8 3 3 a " a " a " a " a " a " a " a " a 0 . . o . t c の l p ズ . > . . . . . . . . . . b > b > b > b > b > b > b > b > b " o o c o o r 8 e s r 作 0 5 5 5 5 5 5 5 5 5 1 ♪ 2 今 3 男 4 ♪ 5 か 6 ♪ 7 そ 8 そ 9 > r r l r r e タ > : 県 o 成 0 0 0 0 0 0 0 0 0 0 " ♪ " 年 " 女 " 〜 " く " " の " の " ま g g c g > a イ / 立 - 0 0 0 0 0 0 0 0 0 0 > ♪ > は > 青 > < > て > ♪ > 日 > 結 > た / / . t ト / 長 d " " " " " " " " " " < 選 年 / 県 < 午 果 こ r r n i ル c 野 a / / 挙 や u 下 / 後 、 れ e e r s v を r 図 . c x x x x x x x x x x u の 婦 > に u 8 長 と l l g e 収 e 書 j h m m m m m m m m m m > 当 人 お > 時 野 同 e e 1 c 録 a 館 p a l l l l l l l l l l た 層 け 県 時 a a d . o す t 所 / n : : : : : : : : : : り は る き 知 に s s s 0 m る i 蔵 s g i i i i i i i i i i 年 も 投 っ 事 、 e e d " m 。 v 資 h e d d d d d d d d d d 。 ち 票 か に 県 / / l > o 「 e 料 i > = = = = = = = = = = 2 ろ 率 り は 議 x x / n 地 c < n " " " " " " " " " " 月 ん 、 、 、 会 m m s s 方 o / s t t t t t t t t t t の の 全 県 前 議 l l c . 選 m p h 1 2 3 4 5 6 7 8 9 1 総 こ 国 下 知 員 / / h o 挙 m u u " " " " " " " " " 0 選 と の 一 事 6 t t e r 終 o b - " 挙 、 上 斉 の 1 e e m g る n l d に こ 位 に 林 名 i i a / 」 s i c 引 の を 即 寅 の / / t l 、 . s o き 老 占 日 氏 当 c c r i 「 o h m 続 人 め 開 が 選 u u o c 地 r e m い も る 票 当 も s s n e 方 g r o て 今 立 が 選 決 t t " n 選 / > n 、 年 派 行 。 定 o o ? s 挙 p s 4 8 な わ < し m m > e 後 u / 月 8 成 れ / ま / / s 初 b l の を 績 ま u し s s / の l i 県 迎 を し > た c c b 県 i b 市 え 収 た 。 h h y 議 c r 町 た め 。 < e e / 会 d a 村 と ま < / m m 4 開 o r と は し / u a a . か m y 八 い た u > / / 0 る a / 木 え 。 > r r / 」 i 0 早 、 < e e " 、 n 2 の そ / l l > 「 / F 選 の u a a h 三 z T 挙 慎 > x x t 十 e 0 で 重 n n t 年 r 1 、 な g g p 度 o 0 長 投 / / : を / 2 野 票 t t / 賄 1 9 県 ぶ e e / う . 7 1 り i i c 県 0 4 1 が _ _ r の / 1 6 老 a a e お " 7 万 い l l a 台 > 7 有 の l l t 所 c " 権 表 . . i 」 c > 者 に r r v 、 0 信 の 一 n n e 「 < 州 関 徹 g g c す / デ 心 さ " " o す l ジ は を m む i タ 非 伺 t t m 土 c ル 常 わ y y o 木 e コ な せ p p n 建 n モ 高 て e e s 設 c ン ま い = = . 」 e ズ り ま " " o 、 > よ す a a r 「 県 う 。 p p g 明 立 で < p p / る 長 す / l l l く 野 。 u i i i 正 図 < > c c c し 書 / a a e く 館 u t t n 健 所 > i i s や 蔵 o o e か 資 n n s に 料 / / / 」 < x x b 、 / m m y 「 r l l / 幕 e " " 4 を f . と > s 0 じ c / た h < 善 e / 光 m l 寺 a i の t c 御 y e 開 p n 帳 e c 」 n e 、 s > 「 = 勇 " ま h し t い t 水 p 防 : 訓 / 練 / 」 r 、 e 「 l お a 国 x じ n ま g ん . 民 o 謡 r 大 g 会 / 」 n < s / / n s o t t r e u > c t u r e / 1 . 0 " ? > IIIFマニフェストファイルの作成 上述したTEI/XMLファイルをseeAlsoに持つIIIFマニフェストファイルを作成しました。 ...

2025年2月21日 · 32 分 · Nakamura

IIIFマニフェストファイルからOCR結果を含むTEI_XMLファイルを作成するプログラム

概要 IIIFマニフェストファイルからOCR結果を含むTEI_XMLファイルを作成するプログラムを作成しました。このプログラムの使用方法について説明します。 仕組み IIIFマニフェストファイルのURLを指定して、NDL古典籍OCR-LiteによるOCR結果を含むTEI/XMLファイルを作成します。 https://github.com/ndl-lab/ndlkotenocr-lite 使い方 以下のノートブックにアクセスしてください。 https://colab.research.google.com/github/nakamura196/000_tools/blob/main/IIIFマニフェストファイルからTEI_XMLファイルを作成するプログラム.ipynb そして、一つ目の再生ボタンを押します。 完了したら、「実行」という部分のmanifest_urlとoutput_dirの値を更新して、セルを実行します。 output_dirに、OCR結果を含むTEI/XMLファイルが出力されます。 出力例 以下のように、ページおよび行ごとのOCR結果を含むファイルが作成されます。 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < ? ? T t f t t / p p d / s b p / / / / t b a l s l s l s / a l s l s l s l s l s l s l s l s l s l s l s l s l x x E e i i i t u u a p o i t b s f t e o b b e b e b e a b b e b e b e b e b e b e b e b e b e b e b e b e b m m I i l t t i b b t u u b r i o i e x d / g / g / g b / g / g / g / g / g / g / g / g / g / g / g / g / l l H e l l t l l e b r l b u l i t y n > > > > n > > > > > > > > > > > > > - - x e D e e l i i > l c > t l r e H > > = t t t = t t t t t t t t t t t t m m m a e S > e c s 2 i e a > c D e " y y y " y y y y y y y y y y y y o o l d s t O S a h 0 c D r e e a 1 p p p 2 p p p p p p p p p p p p d d n e c m C t t e 2 a e g D s d " e e e " e e e e e e e e e e e e e e s r > t R m i r 5 t s e e c e = = = = = = = = = = = = = = = l l = > > 結 t o > - i c t s > r t " " " t " " " " " " " " " " " " " 果 > n N 0 o > = c > y 本 本 本 y 本 本 本 本 本 本 本 本 本 本 本 本 h h h : S D 1 n " > p 文 文 文 p 文 文 文 文 文 文 文 文 文 文 文 文 r r t t L - S h e " " " e " " " " " " " " " " " " e e t h m 古 2 t t = = f f p t t 典 9 m t " n n n " n n n n n n n n n n n n = = : t > O < t p p = = = p = = = = = = = = = = = = " " / p C / > s a " " " a " " " " " " " " " " " " h h / s R d : g 1 3 4 g 1 2 3 4 5 6 7 8 9 1 1 1 t t w : < a / e " " " e " " " " " " " " " 0 1 2 t t w / / t / " " " " " p p w / p e i c c c c c c c c c c c c : : . i u > i f o o o f o o o o o o o o o c c c / t i b i a r r r a r r r r r r r r r o o o / e i l f c r r r c r r r r r r r r r r r r w w i f i . s e e e s e e e e e e e e e r r r w w - . s d = s s s = s s s s s s s s s e e e w w c d h l " p p p " p p p p p p p p p s s s . . . l e . h = = = h = = = = = = = = = p p p t t o . r i t " " " t " " " " " " " " " = = = e e r i > t t # # # t # # # # # # # # # " " " i i g t c p z z z p z z z z z z z z z # # # - - / c . s o o o s o o o o o o o o o z z z c c n . u : n n n : n n n n n n n n n o o o . . s u - / e e e / e e e e e e e e e n n n o o / - t / - - - / - - - - - - - - - e e e r r 1 t o i 1 3 4 i 1 2 3 4 5 6 7 8 9 - - - g g . o k i " " " i " " " " " " " " " 1 1 1 / 0 k y i > > > i > > > > > > > > > 0 1 2 r r " y o f 国 空 ゆ f あ ・ 中 住 ね に は は な " " " e e > o . . 外 せ ふ . つ ・ 川 ぬ ら く じ つ り > > > l l . a d < み か d た ・ ノ < れ ま め か ぬ こ お ほ e e a c l / 二 ほ l い ・ 中 / 給 れ て し れ ぼ ぼ ど a a c . . s < < . < ・ 川 s は て う う な し す が s s . j i e / / i / ・ 宿 e ぬ も し て ど て て み e e j p t g s s t s ・ に g ま な と な の ふ さ の / / p / c > e e c e ・ て > ゝ ら 世 が 給 し ぐ い x x / r . g g . g ・ 之 に は を ら へ た り と m m r e u > > u > ・ 源 。 ぬ 思 ふ ば り の な l l e p - - ・ 氏 わ を ひ ま 。 。 ほ が / / p o t t ・ 十 れ 。 知 じ な い そ か t t o / o o ・ 六 は こ ぬ く み ど く ら e e / i k k ・ 才 か よ れ こ た ら ち ざ i i i i y y ・ < く ひ ば そ を う い り / / i i o o ・ / 人 な < 思 さ た さ し c c i f . . ・ s に ん / ひ へ し き け u u f / a a ・ e < < s < < と < < s s / 0 c c ・ g / / e / / < / / t t 0 f . . ・ > s s g s s / s s o o f 1 j j ・ e e > e e s e e m m 1 1 p p ・ g g g g e g g / / 1 a / / ・ > > > > g > > s s a 3 i i ・ > c c 3 e i i ・ h h e d i i ・ e e d - f f ・ m m - 1 / / ・ a a 1 8 s s ・ / / 8 c o o ・ r r c 2 t t ・ e e 2 - o o ・ l l - 7 _ _ ・ a a 7 3 o o ・ x x 3 2 g g ・ n n 2 2 a a ・ g g 2 - i i ・ / / - 6 _ _ ・ t t 6 3 2 2 ・ e e 3 4 0 0 ・ i i 4 0 2 2 ・ _ _ 0 - 3 3 ・ a a - 1 1 1 ・ l l 1 9 0 0 ・ l l 9 e / / ・ . . e d A A ・ r r d 3 0 0 ・ n n 3 f 5 5 < g g f 0 _ _ / " " 0 d 4 4 s d 9 / / e t t 9 6 0 0 g y y 6 6 0 0 > p p 6 e 2 2 e e e / / / = = / m A A " " m a 0 0 a a a n 5 5 p p n i _ _ p p i f 4 4 l l f e _ _ i i e s 0 0 c c s t 0 0 a a t " 2 2 t t < / _ _ i i / > 0 0 o o t 0 0 n n i 0 0 / / t 1 2 x x l . . m m e t t l l > i i " " f f / / s s f f c c u u h h l l e e l l m m / / a a f f t t u u y y l l p p l l e e / / n n 0 0 s s / / = = d d " " e e h h f f t t a a t t u u p p l l : : t t / . . / j j r p p p e u g g l r " " a l > > x . n o g c . l o c r . g r n g s d s s t d r l u / c s t c u h r e e m / a 1 t . r 0 o " n ? " > ? > まとめ 不完全な点もあるかと思いますが、参考になりましたら幸いです。 ...

2025年1月30日 · 10 分 · Nakamura

校異源氏物語に対する類似テキスト検索アプリを作成しました。

概要 校異源氏物語に対する類似テキスト検索アプリを作成しました。以下のURLからお試しいただけます。 https://huggingface.co/spaces/nakamura196/genji_predict 本アプリの使用方法などについて紹介します。 データ 以下の校異源氏物語DBで公開されているテキストデータを使用します。 https://kouigenjimonogatari.github.io/ アプリの内容 仕組みは単純で、校異源氏物語の巻毎・ページ毎のテキストを用意しておき、入力された文字列との編集距離を算出し、類似度が高いテキスト(+巻とページ)を返却します。 ソースコードは以下です。 https://huggingface.co/spaces/nakamura196/genji_predict/tree/main 応用例 例えば、以下の「[源氏物語] [4](東京大学総合図書館所蔵)」では、1つのIIIFマニフェスト内に複数の巻が含まれており、何コマ目から何コマ目までが何巻に属するのか、素人には判断が難しい場合があります。 https://da.dl.itc.u-tokyo.ac.jp/portal/assets/b90bbddc-509d-7c12-0fb9-af409a90a487 そこで、上記に資料に対してコマ毎のOCRテキストを取得し、今回作成したアプリに問い合わせることで、ページ毎に推定される巻数が提示され、巻の変わり目を知る手助けを行うことができます。 OCR OCRにあたっては、NDL古典籍OCR-Liteを使用します。 https://github.com/ndl-lab/ndlkotenocr-lite OCR結果を修正して、以下のようなTEI/XMLを作成しました。 < < < < ? ? ? T x x x E < < m m m I t / t l l l e < t e < - - x i f / e x b v m m m H i < < < f i t o < < < e o o l e l t / p / s / i H > d a / a / a r d d n a e i < t u < < p o < s l e y b < < < < < < < < a b < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < a b < < < < < < < < < < < < s e e s d D t t i b p d u u b / o e a > l s l s l s l s b l s l s l s l s l s l s l s l s l s l s l s l s l s l s l s l s l s l s l s b l s l s l s l s l s l s i l l = e e l i t l u a b r i < b u D d n b e b e b e b e > n b e b e b e b e b e b e b e b e b e b e b e b e b e b e b e b e b e b e b e > n b e b e b e b e b e b e o " r s e t l i b t l c b p i r e e = / g / g / g / g = / g / g / g / g / g / g / g / g / g / g / g / g / g / g / g / g / g / g / g = / g / g / g / g / g / g n h h h > c S l e c l e i e l t b c s r " > > > > " > > > > > > > > > > > > > > > > > > > " > > > > > > = r r t > t e S a i > c D > r l e c > 1 t t t t 2 t t t t t t t t t t t t t t t t t t t 3 t t t t t t " e e t m > t t s 2 a e > D > " y y y y " y y y y y y y y y y y y y y y y y y y " y y y y y y 1 f f p t O m i h 0 t s t e p p p p p p p p p p p p p p p p p p p p p p p p p p p p p . = = : > C t o e 2 i c a s t e e e e t e e e e e e e e e e e e e e e e e e e t e e e e e e 0 " " / R > n r 5 o > r c y = = = = y = = = = = = = = = = = = = = = = = = = y = = = = = = " h h / 結 S > - n g > p " " " " p " " " " " " " " " " " " " " " " " " " p " " " " " " t t w 果 t N 0 S e e 本 本 本 本 e 本 本 本 本 本 本 本 本 本 本 本 本 本 本 本 本 本 本 本 e 本 本 本 本 本 本 e t t w : m D 1 t t = 文 文 文 文 = 文 文 文 文 文 文 文 文 文 文 文 文 文 文 文 文 文 文 文 = 文 文 文 文 文 文 n p p w t L - m = " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " c : : . h > 古 2 t " p p p o / t t 典 9 > h a n n n n a n n n n n n n n n n n n n n n n n n n a n n n n n n d / e t 籍 < t g = = = = g = = = = = = = = = = = = = = = = = = = g = = = = = = i w w i p O / t e " " " " e " " " " " " " " " " " " " " " " " " " e " " " " " " n w w - s C d p " 1 3 4 5 " 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1 1 1 1 " 1 2 3 4 5 6 g w w c : R a s " " " " " " " " " " " " " 0 1 2 3 4 5 6 7 8 9 " " " " " " = . . . / - t : f f " " " " " " " " " " f " t t o / L e / a c c c c a c c c c c c c c c a c c c c c c U e e r i i > / c o o o o c o o o o o o o o o c c c c c c c c c c c o o o o o o T i i g i t i s r r r r s r r r r r r r r r o o o o o o o o o o s r r r r r r F - - / i e i = r r r r = r r r r r r r r r r r r r r r r r r r = r r r r r r - c c n f < i " e e e e " e e e e e e e e e r r r r r r r r r r " e e e e e e 8 . . s . / f h s s s s h s s s s s s s s s e e e e e e e e e e h s s s s s s " o o / d p . t p p p p t p p p p p p p p p s s s s s s s s s s t p p p p p p ? r r 1 l u d t = = = = t = = = = = = = = = p p p p p p p p p p t = = = = = = > g g . . b l p " " " " p " " " " " " " " " = = = = = = = = = = p " " " " " " / 0 i l . s # # # # s # # # # # # # # # " " " " " " " " " " s # # # # # # r r " t i i : z z z z : z z z z z z z z z # # # # # # # # # # : z z z z z z e e > c s t / o o o o / o o o o o o o o o z z z z z z z z z z / o o o o o o l l . h c / n n n n / n n n n n n n n n o o o o o o o o o o / n n n n n n e e u e . i e e e e i e e e e e e e e e n n n n n n n n n n i e e e e e e a a - r u i - - - - i - - - - - - - - - e e e e e e e e e e i - - - - - - s s t > - i 1 1 1 1 i 2 2 2 2 2 2 2 2 2 - - - - - - - - - - i 3 3 3 3 3 3 e e o t f - - - - f - - - - - - - - - 2 2 2 2 2 2 2 2 2 2 f - - - - - - / / k o . 1 3 4 5 . 1 2 3 4 5 6 7 8 9 - - - - - - - - - - . 1 2 3 4 5 6 x x y k d " " " " d " " " " " " " " " 1 1 1 1 1 1 1 1 1 1 d " " " " " " m m o y l > > > > l > > > > > > > > > 0 1 2 3 4 5 6 7 8 9 l > > > > > > l l . o . 国 紅 は あ . O □ 源 / あ ろ か が を " " " " " " " " " " . ろ 上 詠 ち か ひ / / a . i 外 葉 な ふ i O □ 氏 朱 ま か た り あ > > > > > > > > > > i く 達 は と ほ か t t c a t < の の ひ t O □ 十 雀 り る 〴 給 か 前 青 火 と み に お し 詠 一 t 哀 部 て り の る e e . c c / か え < c < □ 七 院 な べ 〵 。 ず に 海 と な や さ も ぶ な 後 c な み ゝ た 色 と i i j . . s < ん / . / □ 才 の り き 物 う お て 波 の る ま し し み ど 順 . る こ 初 る あ 見 / / p j u e / < s u s □ ノ 行 。 た 見 へ ぼ せ を ゝ を ば た ろ お し 伽 u に た う が ひ え c c / p - g s / e - e □ 十 幸 よ び 給 も さ さ ぞ 頭 。 な る き も 給 の - 。 ち ち く ま 給 u u r / t > e s g t g □ 月 ば の の は な る せ ま 中 立 り に ほ ゝ へ こ t み も な の さ 。 s s e r o g e > o > < よ 。 つ こ ぬ つ れ 給 ひ 将 な 。 。 ど ち る ゑ o か み を に り 春 t t p e k > g k / り 神 ね と こ ぼ ば ふ 給 が ら 入 が に 。 は な k と な し ぎ て 宮 o o o p y > y s 四 無 な 成 と の 。 。 け た び が く 。 よ こ ら y 泪 な 給 は つ の m m / o o o e 年 月 ら け を 。 誠 源 る ち て た の お に れ ん o お き へ ゝ ね 女 / / i / . . g の の ず れ 口 み 楽 氏 。 よ は の こ な 見 や と . と 給 る し よ 御 s s i i a a > 十 十 。 ば お 給 を の か う 。 日 ゑ じ え 仏 聞 a し ぬ に き り 。 c c i i c c 月 日 お 。 し は 御 中 た い 花 か ま ま ぬ の ゆ c 給 < ま に も か h h f i . . 迄 < も 御 < ざ < 将 て 人 の げ さ ひ さ 御 。 . 。 / < < < く e e / f j j 有 / し < / ら / は に に か さ り の ま 迦 お j < s / / / < m m b / p p < s < / s ん s 。 は こ た や 。 あ な < も p / e s s s / a a 9 b / / / e / s e < e < 。 < は か 物 < り / し / s g e e e s / / 0 9 i i s g s e g / g / < / ら < の / 。 s < i e > g g g e r r b 0 i i e > e g > s > s / s の / < s < e / i g > > > g e e b b i i g g > e e s e < s / e / g s i > > l l d b f f > > g g e g / e s g s > e f a a d d / / > > g > s g e > e g / x x c d s s > e > g g > s n n - c o o g > > o g g 5 - t t > t / / 0 5 o o o t t 9 0 _ _ _ e e d 9 o o o i i - d g g g _ _ 7 - a a a a a c 7 i i i l l 1 c _ _ _ l l 2 1 2 2 2 . . - 2 0 0 0 r r 0 - 2 2 2 n n f 0 3 3 3 g g b f 1 1 1 " " 9 b 0 0 0 - 9 / / / t t a - A A A y y f a 0 0 0 p p 4 f 5 5 5 e e 0 4 _ _ _ = = 9 0 4 4 4 " " a 9 / / / a a 9 a 0 0 0 p p 0 9 0 0 0 p p a 0 4 4 4 l l 4 a / / / i i 8 4 A A A c c 7 8 0 0 0 a a / 7 5 5 5 t t m / _ _ _ i i a m 4 4 4 o o n a _ _ _ n n i n 0 0 0 / / f i 0 0 0 x x e f 4 4 4 m m s e _ _ _ l l t s 0 0 0 " " < t 0 0 0 / " 0 0 0 s s t / 1 2 3 c c i > . . . h h t t t t e e l i i i m m e f f f a a > / / / t t f f f y y u u u p p l l l e e l l l n n / / / s s f f f = = u u u " " l l l h h l l l t t / / / t t 0 0 0 p p / / / : : d d d / e e e / f f f r p a a a e u u u u l r l l l a l t t t x . . . . n o j j j g c p p p . l g g g o c " " " r . > > > g r n g s d s s t d r l u / c s t c u h r e e m / a 1 t . r 0 o " n ? " > ? > 推定 上記のXMLファイルを入力として、先に紹介したGradioアプリのAPIを利用します。 ...

2025年1月29日 · 25 分 · Nakamura

XSLTを使いながらTEI/XMLファイルを編集する

概要 XSLTを使いながらTEI/XMLファイルを編集する方法の一例を紹介します。 関連 以下の記事で、VSCodeの拡張機能を使いながら、XSLTの結果をプレビューする方法を紹介しました。 本記事では、上記の拡張機能を使用せず、より単純にXSLTを使いながらTEI/XMLファイルを編集する方法を紹介します。 拡張機能のインストール VSCodeで以下の拡張機能をインストールします。 Live Server https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer Scholarly XML https://marketplace.visualstudio.com/items?itemName=raffazizzi.sxml Auto Close Tag https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag 加えて、以下の2つの拡張機能が、Scholarly XMLにおいて推奨されています。ただ、私の使い方では不便になってしまう場面もあったので、とりあえず任意とします。 Auto Rename Tag https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag Close HTML/XML tag https://marketplace.visualstudio.com/items?itemName=Compulim.compulim-vscode-closetag ファイルのダウンロードなど 以下のサンプルリポジトリを対象にします。 https://github.com/nakamura196/tei-xml-xslt-vscode 以下により、ファイルをダウンロードします。そして、VSCodeで開きます。 g c i o t d e c l t o e n i e - x h m t l t - p x s s : l / t / - g v i s t c h o u d b e . c o m / n a k a m u r a 1 9 6 / t e i - x m l - x s l t - v s c o d e そして、画面右下のGo Liveをクリックします。 ...

2025年1月23日 · 1 分 · Nakamura