TEI Garage APIを使って、DOCX → TEI/XML 変換ツールをブラウザだけで作った

はじめに TEI (Text Encoding Initiative) は、人文学分野のテキストをデジタルで構造化するための国際標準です。図書館・博物館・学術研究などで利用されていますが、TEI/XML を直接書くにはマークアップの知識が必要で、導入のハードルが高いのが実情です。 そこで活用されるのが、Microsoft Word (.docx) から TEI/XML への変換ツールです。代表的なものに TEI Garage(旧 OxGarage)がありますが、多機能ゆえに UI がやや複雑です。今回、DOCX → TEI/XML の変換に特化した、シンプルなブラウザベースのツールを作成しました。 https://github.com/nakamura196/tei-converter デモサイト: https://tei-converter.pages.dev/ 仕組み TEI Garage は REST API を公開しており、以下のエンドポイントに DOCX ファイルを POST するだけで TEI/XML が返ってきます。 P O S d T T o E c I h x : t : t t a e p p x s p t : l : / i x / c m t a l e t / i i g o a n r : a v g n e d . . t o e p i e - n c x . m o l r f g r e m g a e t - s w - e o b f s f e i r c v e i d c o e c / u C m o e n n v t e . r w s o i r o d n p s r / o c e s s i n g m l . d o c u m e n t / 本ツールはこの API を呼び出すフロントエンドです。変換処理自体は TEI Consortium が運営するサーバ上で行われます。 ...

2026年3月1日 · 2 分 · Nakamura

Hypothes.is APIでWebアノテーションをエクスポートしてTEI/XMLに変換する

はじめに Hypothes.isは、Webページ上にハイライトやコメントを付けられるオープンソースのアノテーションツールです。ブラウザ拡張やJavaScriptの埋め込みで手軽に使えますが、蓄積したアノテーションをバックアップしたい、あるいはTEI/XMLなど別の形式で活用したいケースもあります。 本記事では、Hypothes.is APIを使ってアノテーションをエクスポートし、TEI/XMLに変換する方法を紹介します。 APIキーの取得 Hypothes.isにログイン Developer settings にアクセス 「Generate your API token」でAPIキーを生成 取得したキーを.envファイルに保存します。 c # p . . e e n n v v . を e 編 x 集 a し m て p A l P e I キ . ー e を n 設 v 定 H Y P O T H E S I S _ A P I _ K E Y = x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x アノテーションのエクスポート APIの基本 Hypothes.is APIのベースURLは https://api.hypothes.is/api です。認証はAuthorization: Bearer <API_KEY>ヘッダーで行います。 ...

2026年2月28日 · 14 分 · Nakamura

OpenITI mARkdownからTEI XMLへの自動変換ツール「oitei」を試す

はじめに イスラーム圏の歴史テキストを扱う OpenITI(Open Islamicate Texts Initiative) プロジェクトでは、TEI/XMLの代わりに mARkdown という軽量記法でテキストをタグ付けできます。 TEI/XMLは構造化の国際規格として強力ですが、特にアラビア語のような右から左に書く言語(RTL)では、XMLタグとの混在でエディタ上の表示が乱れるという問題があります。mARkdownはこの課題を解決する記法です。 本記事では、mARkdownで書かれたテキストを TEI XMLに自動変換 するPythonツール oitei を実際に動かしてみます。 oiteiとは OpenITI mARkdown → TEI XML の変換ライブラリ(Python) OpenITI TEI Schema に準拠したXMLを出力 PyPIで公開されており pip install で導入可能 依存ライブラリ: oimdp(mARkdownパーサー)、lxml https://github.com/OpenITI/oitei インストール p i p i n s t a l l o i t e i Python 3.8以上が必要です。oimdp(OpenITI mARkdown Parser)と lxml が依存関係として自動インストールされます。 OpenITI mARkdownの記法 mARkdownファイルは以下の3部構成です。 マジックバリュー (1行目): ######OpenITI# メタデータ : #META# で始まる行 本文 : #META#Header#End# の後に記述 主なタグ 記法 意味 `### ` `### ### $ 伝記エントリ # 段落の開始 @P02 名前 人物名(後続2語を含む) @T11 地名 地名(後続1語を含む) @YB732 誕生年(ヒジュラ暦732年) @YD808 没年(ヒジュラ暦808年) %~% 詩行(hemistich)の区切り 固有表現タグ(@P, @T 等)の後ろの 2桁の数字 は、1桁目がエンティティ番号、2桁目が「後続する何単語を名前に含むか」を指定します。例えば @P02 Ibn Khaldun は「後続2語(Ibn Khaldun)を人名として含む」という意味です。 ...

2026年2月28日 · 15 分 · Nakamura

ODD編集Tips:その1

要素の属性を特定のものだけに制限する TEIのデフォルトでは、要素は多くの属性クラス(att.global、att.datableなど)を継承しており、多数の属性が使用可能です。特定の属性のみを許可したい場合は、以下のように設定します。 例: persNameでxml:idとcorrespのみを許可 < e / l < < e e c / a / l m l < < < < < < < c t < < a e e a ! m m m m m m l t a / a / t m n s - e e e e e e a L t < < a t < < a t e t s - m m m m m m s i t d d / t t d d / t L n S e b b b b b b s s D e a < d t D e a < d t i t p s 属 e e e e e e e t e s t d a D e s t d a D s S e 性 r r r r r r s > f c a a t e f c a a t e t p c m ク O O O O O O > > t t a f > t t a f > e o ラ f f f f f f i 要 y a t > i 関 y a t > c i d ス d 素 p R y d 連 p R y > d e を k k k k k k e の e e p e す e e p e = 削 e e e e e e n 一 > f e n る > f e n " 除 y y y y y y t 意 > t 人 > t c ( = = = = = = = な n = 物 k = h モ " " " " " " " 識 a " 情 e " a デ a a a a a a x 別 m c 報 y p n ル t t t t t t m 子 e o へ = e g ク t t t t t t l < = r の " r e ラ . . . . . . : / " r リ t s " ス g c d e p t i d I e ン e N > は l m a d e y d e D s ク i a 維 o c t i r p " s " p < d m 持 b " a t s e c / " / a e ) a b L o d m > > d t " l m l i n " o m e a " o e k a d o s . m d " e l m e d c p o m e " " o = e > o d o = m d " = i e d " o m m e a " n = e d d o o = d a t " = e e d d " d d e c " l = e e d " d r h d e " = = e " " a e t d " " l u / n l e e d d e s u > g e " l e e t a s e t / e l l e g a " e > t e e " e g > " e t t / = e / " e e > " = > / " " o " > / / p o > > t p " t > " > ポイント <classes mode="change">を使用: mode="replace"で空にすると、モデルクラスも削除され要素自体が使えなくなる 属性クラスを個別に削除 : <memberOf key="att.xxx" mode="delete"/>で不要な属性クラスを削除 必要な属性を追加 : <attDef ident="xxx" mode="add">で許可したい属性を定義 注意点 要素がどの属性クラスに属しているかは、TEI Guidelinesで確認できる att.globalを削除するとxml:id、xml:langなども使えなくなるため、必要に応じて個別に追加する 要素に属性を追加する 既存の属性クラスを維持したまま、新しい属性を追加する場合: ...

2026年1月27日 · 4 分 · Nakamura

TEI ODDによるIIIF対応ファクシミリ記述の制約設計

はじめに TEI(Text Encoding Initiative)でデジタル画像のメタデータを記述する際、facsimile要素を使用します。特にIIIF(International Image Interoperability Framework)対応のデジタルアーカイブでは、マニフェストやキャンバス、Image APIへの参照を適切に記述することが重要です。 本記事では、ODD(One Document Does it all)を使用して、ファクシミリ記述に必要な制約をスキーマとして定義する方法を紹介します。 準拠するガイドライン 本ODDは、日本語TEIガイドラインで紹介されている「IIIF画像とのリンク」仕様をベースにしています: IIIF画像とのリンク(2024年度版)- TEI-EAJ このガイドラインに準拠したデータを作成することで、TEI Viewer for EAJでの画像表示が可能になります。TEI Viewerは、TEIテキストとIIIF画像を連携して表示できるビューアであり、facsimile要素の情報を利用してテキストと画像の対応付けを行います。 設計目標 以下の要件を満たすスキーマを設計しました: 必須情報の明確化 : 画像の座標情報や識別子など、最低限必要な情報を必須属性として定義 IIIF対応 : マニフェスト、キャンバス、Image APIへの参照をオプショナルに記述可能 再利用性 : 独立したODDファイルとして、複数プロジェクトで共有可能 ビューア互換性 : TEI Viewer for EAJでの表示に必要な情報を確実に記録 最小限の記述例 < f / a f c a s < c i s / s m u s i i r u m l f < r i e a g f l c r a e s e a c > a p e m u h > e l i A x c s = = " s " 0 a h " m t e t u A p l s s y = : = " / " h / 0 t e " t x p a l s m r : p x / l = / e " e . 5 x o 6 a r 0 m g 0 p / " l i e i l . i r o f y r / = g m " / a 4 i n 0 m i 0 a f 0 g e " e s / t x 0 . m 0 j l 1 s : . o i t n d i " = f > " " p / 1 > " > 完全な記述例(IIIF参照を含む) < f / a f c a s < c i s / s m u s i i r u m l f < r i e a g f l c r a e s e a c > a p e m u s h > e l a i A x m c s = e = " A u s " 0 s r a h " = l m t " = e t u h " A p l t h s s y t t = : = p t " / " s p h / 0 : s t e " / : t x / / p a l e / s m r x e : p x a x / l = m a / e " p m e . 5 l p x o 6 e l a r 0 . e m g 0 o . p / " r o l i g r e i l / g . i r c o f y a i r / = n m g m " v a / a 4 a g i n 0 s e m i 0 / / a f 0 p 0 g e " 1 0 e s " 1 t . 0 . x t 0 j m i 1 s l f . o : t n i f i " d u f > = l " " l p 1 f " u > l l / 0 / d e f a u l t . j p g " ODD定義の解説 1. facsimile要素 < e / l < < < < e e d c c / a / l m e l o < c t < a e e s a n e o t a / t m n c s t l n L t < < a t e t > s e e t i t d d / t L n S フ e n m e s D e a < d t i t p ァ s t e n t e s t d a D s S e ク > n t f c a a t e t p c シ m t > m > t t a f > e ミ o R o i I y a t > c i リ d e d d I p R y > d 画 e f e e I e e p e 像 = = n F > f e n 情 " k " t マ > t 報 r e r = ニ k = 。 e y e " フ e " I p = p s ェ y f I l " l a ス = a I a s a m ト " c F c u c e へ t s マ e r e A の e i ニ " f " s 参 i m フ / a > " 照 d i ェ > c U a l ス e m R t e ト " o L a " へ d < . の m e / p m 参 i = d o o 照 n " e i d を O r s n e 含 c e c t = む c p > e " 。 u l r c < r a " h / s c / a d = e > n e " " g s 1 e c " u " > s > m a a g x e O = c " c o u p r t s " = > " u n b o u n d e d " / > ポイント : ...

2025年12月10日 · 12 分 · Nakamura

ODD Chain チュートリアル

TEI ODDの「チェーン」機能を使ってスキーマをカスタマイズする方法を学ぶチュートリアルです。 ODD Chainとは ODD chainには2つの方式があります: 1. 継承型(縦のチェーン) source属性で親ODDを参照し、カスタマイズを継承します。 T E I _ a l l → ベ ー ス O D D → 派 生 O D D → さ ら な る 派 生 . . . 2. 組み合わせ型(横のチェーン) specGrpとspecGrpRefを使って、複数のODDを統合します。 ヘ 本 ッ 文 ダ 用 ー O 用 D O D D D ─ ─ ─ ─ ┬ ─ ─ ─ → ┘ 統 合 さ れ た ス キ ー マ フォルダ構成 t ├ │ │ ├ │ │ │ │ ├ │ │ │ │ │ │ │ │ │ │ │ ├ └ u ─ ─ ─ ─ ─ t ─ ─ ─ ─ ─ o r 0 ├ └ 0 ├ ├ ├ └ o ├ ├ ├ ├ ├ ├ └ b R i 1 ─ ─ 2 ─ ─ ─ ─ u ─ ─ ─ ─ ─ ─ ─ u E a - ─ ─ - ─ ─ ─ ─ t ─ ─ ─ ─ ─ ─ ─ i A l i c p l D s n b d h h t m m u b b d d c c i ├ ├ ├ └ d M / h a e a e e a e t a a e e o o n ─ ─ ─ ─ . E e s r i a x i r / s s r r m m t ─ ─ ─ ─ s . r e i n d t n g e e i i b b e h m i . v / e - . e . . v v i i r b d c c d t o e r s o - r h e e n n m a e o o a d d - p d s n t d d e e e s r m m n d . s e d p g m . . d d d e i b b c o p c e l r h . . i . v i i e d e s c n t r h a c e n n / d c . s g m n t t o d e e s o . l g m e m . d d . d x l / p c . . o d s i o m c d l l m e o d e p r m # # # # # d i g p # # . l e i 継 ベ b 組 生 o e d l ビ こ 承 ー a み 成 d d . e ル の 型 ス s 合 # # # # さ # # # # # # # d . o d ド フ の と e わ れ o d . ス ァ 例 な . せ ヘ 本 統 s た 0 同 0 同 0 同 中 d d o ク イ る o 型 ッ 文 合 p フ 1 上 1 上 2 上 間 d d リ ル O d の ダ 関 用 e ァ の の の の の の フ d プ D d 例 ー 連 メ c イ ベ H 派 H 統 H ァ ト D を 関 の イ G ル ー T 生 T 合 T イ 継 連 カ ン r ス M O M O M ル 承 の ス O p O L D L D L す カ タ D R D ド D ド D ド る ス マ D e D キ か キ か キ 派 タ イ f か ュ ら ュ ら ュ 生 マ ズ を ら メ 生 メ 生 メ O イ 展 生 ン 成 ン 成 ン D ズ 開 成 ト ト ト D す る X S L T 前提条件 Saxon(XSLT 2.0プロセッサ) TEI Stylesheets(../scripts/Stylesheetsにインストール済み) ビルド方法 c d / b t u u i t l o d r . i s a h l s 生成されるファイル ソースODD RNG HTML 01-inheritance/base.odd output/base.rng output/base.html 01-inheritance/derived.odd output/derived.rng output/derived.html 02-chain/main.odd(統合後) output/combined.rng output/combined.html 各ファイルの説明 01-inheritance(継承型) base.odd ベースとなるODD。最小限のモジュールと基本的なカスタマイズを含む。 ...

2025年12月9日 · 10 分 · Nakamura

TEI古典籍ビューワをカスタマイズして判読不能箇所(gap)を表示する

はじめに 東アジアの古典籍をデジタル化する際、TEI(Text Encoding Initiative)ガイドラインに準拠したXMLでマークアップすることが一般的になっています。一般財団法人人文情報学研究所が開発した「TEI古典籍ビューワ」は、このようなTEI/XMLファイルをブラウザで簡単に表示できる便利なツールです。 公式サイト: https://tei.dhii.jp/teiviewer4eaj Web版: https://candra.dhii.jp/nagasaki/tei/tei_viewer/ 今回、このビューワをカスタマイズして、判読不能箇所を示す<gap>タグの表示に対応しました。本記事では、そのカスタマイズ方法を紹介します。 デモ: https://nakamura196.github.io/custom-tei-viewer/?file=sample_gap.xml&height=1800 課題:gapタグが表示されない 古典籍のデジタル化において、虫損や破損などにより判読できない箇所は<gap>タグでマークアップします。 < g a p r e a s o n = " i l l e g i b l e " q u a n t i t y = " 2 " u n i t = " c h a r a c t e r " / > しかし、標準のTEI古典籍ビューワでは、このタグが適切に表示されません。そこで、判読不能な文字数分の黒四角(■)を表示し、マウスホバーで理由を確認できるようにカスタマイズしました。 ...

2025年12月9日 · 11 分 · Nakamura

TEI Processing Modelで実現する宣言的なマルチフォーマット変換

はじめに TEI (Text Encoding Initiative) は人文学テキストのデジタル化において広く使われている標準規格です。本記事では、TEI P5で導入された Processing Model という機能を使って、TEI XMLから複数のフォーマット(HTML、LaTeX/PDF、EPUB3)への変換を実現した事例を紹介します。 https://www.tei-c.org/Vault/P5/3.0.0/doc/tei-p5-doc/en/html/TD.html#TDPM 対象プロジェクトは「校異源氏物語」で公開されているテキストを例とします。 https://kouigenjimonogatari.github.io/ 背景 これまで、以下の記事で紹介したように、変換処理を個別に行ってきました。 ODD/RNGファイルのカスタマイズによる、使用するタグの限定 XSLTを用いたHTMLへの変換 XSLTを用いたTeX/PDFへの変換 EPUBへの変換 それぞれの取り組みにおいて、個別の変換ルールなどを記載したファイルを作成する必要があり、その煩雑さが課題となっていました。 Processing Modelとは Processing Modelは、TEI要素の変換ルールを宣言的 に記述する仕組みです。従来は各出力フォーマット用に個別のXSLTを書く必要がありましたが、Processing Modelを使うことで: ODDファイル内で変換ルールを定義 できる 複数の出力フォーマット に対応可能(web、latex、epubなど) スキーマと変換ルールを一元管理 できる Processing Modelの構造 < e / l < < e e d m / l m e o < < < < < < m e e s d ! m / ! m / ! m / o m n c e - o < m - o < m - o < m d e t > l - d m / o - d m / o - d m / o e n S P > e o < m d e o < m d e o < m d l t p e H l d o d o e E l d o d o e L l d o d o e > S e r T S e u e d l P S e u e d l a S e u e d l p c s M e l t s e S U e l t s e S T e l t s e S e o L q p c l e B q p c l e e q p c l e c i n u b u > > q 3 u b u > > q X u b u > > q > d a o e e t I u e e t I u e e t C u e l u n h R n e o n h R n e o n h R u e n t c a e l n u c a e l n u c a e s n t n p e v n i c t e v n i c t e v n t c = a u i d n e p i d n e p i d o e " m t o o i e > u o o i e > u o o i m > p e u u t t u u t t u u t e < t r i s t r i s t r i L r / p = o p p = o p p = o a s d u " n a u " n a u " n T N e t i > n t i > n t i > e a s = n s = n s = n \ X m c " l p f " l p f " l p e > w i a o e i a o l i e c " e n n r p n n r a n r o b e < u e < t e s m m " " / p b " / p e " o m o > > o e " > o e x > n a d u r > u r " < n e t s t s > / d = p o p o o " u n u n u f c t t t o h R n R n p r a e a e a u n n m n m t p g d e d e R e e i < i e r " t / t i n s > i d i n d o o e o i n n s n E t > c > P i n > U o a B n m 3 > e < s / < d / e d s e c s > c > 主な要素: ...

2025年10月8日 · 16 分 · Nakamura

TEI/XMLファイルをGitHubで公開する手順書

はじめに この記事では、TEI(Text Encoding Initiative)形式のXMLファイルをGitHubにアップロードし、誰でも参照できるURLを作成する手順を説明します。 TEI/XMLは、歴史文献や文学作品などのテキストを構造的に記述するための国際標準形式です。GitHubを使うことで、あなたの研究データを世界中の研究者と共有できるようになります。 必要なもの パソコン(Windows、Mac、Linuxのいずれか) インターネット接続 TEI/XMLファイル(すでにお持ちのもの) メールアドレス(GitHubアカウント作成用) サンプルファイルについて TEI/XMLファイルをお持ちでない方は、以下の『校異源氏物語』のTEI/XMLファイルを練習用として使用できます: サンプルファイルURL : h t t p s : / / r a w . g i t h u b u s e r c o n t e n t . c o m / k o u i g e n j i m o n o g a t a r i / k o u i g e n j i m o n o g a t a r i . g i t h u b . i o / m a s t e r / t e i / 0 1 . x m l このファイルをダウンロードする方法: ...

2025年9月6日 · 3 分 · Nakamura

TEI ODDファイルのカスタマイゼーション:NDL古典籍OCRの事例

はじめに TEI (Text Encoding Initiative) は、人文学研究におけるテキストのデジタル化と共有のための国際標準です。本記事では、NDL古典籍OCR-Liteアプリケーションの出力形式に合わせてTEI ODDファイルをカスタマイズした過程を紹介します。 ODD (One Document Does it all) は、TEIスキーマをカスタマイズするための仕組みで、必要な要素と属性だけを含む独自のスキーマを定義できます。 背景:NDL古典籍OCR-Liteアプリケーションの開発 NDL古典籍OCR-Liteの出力結果をTEI/XMLで出力するアプリケーションを作成しています。このアプリケーションは、日本の古典籍をOCR処理し、その結果を標準的なTEI形式で出力することを目的としています。 出力されるTEI XMLには以下の情報を含めることにしました: テキスト情報 : OCRで認識した文字列 レイアウト情報 : 各行の座標情報(バウンディングボックス) 画像参照 : IIIF (International Image Interoperability Framework) 対応の画像URL メタデータ : 文書タイトル、処理情報など このアプリケーションで使用するスキーマをODDで記述してみました。以下、そのカスタマイゼーション過程を紹介します。 カスタマイゼーションのアプローチ 1. 初期アプローチ:標準モジュールの利用 最初は、TEIの標準モジュールを利用してODDを作成しました: < s / c < < < < < s h m m m m m c e o o o o o h m d d d d d e a u u u u u m S l l l l l a p e e e e e S e R R R R R p c e e e e e e f f f f f c i > d k k k k k e e e e e e n y y y y y t = = = = = = " " " " " " t h c t t n e e o e r d i a r x a l " d e t n _ / e " s s k > r t c o " i r r t n u " e i c c n n l t i _ c u u n o l d r c c u e e l r d = " u " e " d = p i e s " n = t t t c " a e i l f r i t u a t H l d c = e e e s " a = i T d n " m E e a T i I r m E l " e I e f p i r t s r l e e u e e s x r f D p t f i e a x s r b c = c e o e " s d t t p y z e i S " i t t n _ l m e " e t " > S / t l > m b t p p b u b g l r i a c p a h t i i c o " n / S > t m t s o u r c e D e s c " / > include属性の重要性 moduleRef要素のinclude属性は、モジュールから特定の要素のみを選択的に含める重要な機能です: ...

2025年9月5日 · 18 分 · Nakamura

TEI GarageのAPIを使用したODDからRNG/HTMLへの変換

はじめに TEI(Text Encoding Initiative)のODD(One Document Does it all)ファイルから、スキーマ(RNG)やドキュメント(HTML)を生成する作業は、TEIプロジェクトにおいて重要な工程です。本記事では、Roma(TEIのODDエディタ)が内部で使用しているTEI Garage APIの仕組みを解析し、スクリプトから直接APIを呼び出してODDを変換する方法を紹介します。 TEI Garageとは TEI Garageは、TEIコミュニティが提供するWebサービスで、様々なフォーマット間の変換を行うことができます。特にODDファイルの処理において、以下の機能を提供しています: ODD → Compiled ODD への変換 Compiled ODD → RELAX NG スキーマへの変換 ODD → HTML ドキュメントへの変換 その他多数のフォーマット変換 Romaの内部動作を解析 Romaのネットワークトラフィックを観察すると、以下のような変換チェーンを使用していることがわかりました: HTMLドキュメント生成の場合 O D D → O D D C ( C o m p i l e d O D D ) → T E I → x H T M L 実際のAPIエンドポイント: ...

2025年9月3日 · 31 分 · Nakamura

RELAX NGとSchematronを組み合わせたTEI XMLスキーマの実装ガイド

! 人手で検証を行った後、AIが記事を執筆しました。 はじめに TEI(Text Encoding Initiative)XMLを編集する際、要素や属性の構造検証だけでなく、より複雑なビジネスルールの検証が必要になることがあります。本記事では、RELAX NG(RNG)とSchematronを組み合わせて、構造検証と内容検証の両方を実現する方法を、実際のプロジェクトで直面した課題を例に解説します。 解決したい課題 日本の古典文学テキストをTEI XMLで校訂する際、以下のような要求がありました: ID参照の動的検証 : corresp属性で参照するIDが、実際に文書内のwitness要素に存在することを検証したい Oxygen XML Editorでの補完機能 : 編集時にIDの候補を自動表示したい 複数ID参照のサポート : スペース区切りで複数のIDを指定可能にしたい 特定要素のみ参照を許可 : witness要素のIDのみを参照可能とし、person要素のIDが含まれる場合はエラーにしたい なぜRNG + Schematronなのか? RELAX NGの得意分野 要素・属性の構造定義 データ型の指定 基本的な内容モデルの定義 Schematronの得意分野 XPathベースの複雑な検証ルール 文書内の相互参照チェック カスタムエラーメッセージの提供 この2つを組み合わせることで、構造と内容の両面から厳密な検証が可能になります。 実装例 1. 基本的なRNGスキーマ構造 < < ? g / x r < < < < < g m a ! s ! s / ! r l m - c - t < s - a m - h - a r t - m v a : r e a m e r S n こ t f r R a r c s こ > t N r s x x x d n h に n > G > i m m m a s e p S a に o l l l t = m r c m よ n n n n a " a e h e る = s s s t h t f e = 構 " = : : y t r i m " 造 1 " a s p t o x a T 定 . h = c e p n = t E 義 0 t " h L : 名 " r I " t h = i / 前 t o " p t " b / 空 e n / e : t h r w 間 i ル > n / p t a w 宣 " ー c : t r w 言 ル r / p y . u を d e / : = t r 埋 i l r / " e i め n a e / h i = 込 g x l p t - " む = n a u t c h " g x r p . t U . n l : t T o g . r p F r . / g : - g c w / / 8 r l w n / " n g c w s w ? s . . / w > n o w 1 w s s r 3 . . t / g . 0 t r c o " e u d r > i c m s g - t p d / c u a l 2 . r t / 0 o e i s 0 r / b c 1 g 1 i h / / . l e X n 0 i m M s " t a L / y t S 1 / r c . a o h 0 n n e " n " m / o a > t - a d t a i t o a n t s y / p 1 e . s 0 " " 2. ID定義とanyURI型の活用 Oxygen XML Editorで自動補完を実現するために、anyURI型を使用します: ...

2025年8月9日 · 17 分 · Nakamura

生成AIを用いてプロジェクトに特化したrngファイルを作成する

概要 TEI/XMLファイルを編集する際、検証に使用するrngファイルを変更することで、使用するタグや属性を限定することができます。これにより、作業者が使用するタグに混乱しない、作成されるTEI/XMLのばらつきが軽減する、といった利点が考えられます。 rngファイルを編集する方法として、以下の記事で紹介したように、Romaを使用する方法が一般的です。 この方法はトップダウン的に使用するタグや属性を限定していく方法ですが、今回は、すでに作成済みのTEI/XMLから、生成AIを用いて、ボトムアップ的にrngファイルを作成してみます。 対象データ 校異源氏物語テキストDBで公開されている以下のXMLファイルを対象とします。 https://kouigenjimonogatari.github.io/tei/01.xml このファイルでは、以下のtei_all.rngを使用しています。 http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng そのため、以下のように、挿入可能な多くのタグがサジェストされることがわかります。 生成AIによるrngファイルの作成 以下のようなプロンプトにより、対象とするXMLファイルのタグの使用状況などに応じて、rngファイルを作成します。 # # - - # - # 1 2 3 4 # - - # 1 2 # # # . . . . # # . . X 作 作 フ 不 必 M 目 業 業 提 ァ 要 制 要 須 期 カ 簡 L 的 効 者 供 イ 望 * * * * 約 な 属 待 ス 潔 フ 率 が す ル 現 最 入 コ ・ 要 性 す タ な ァ 向 タ る 名 在 小 力 メ 方 素 を る ム 使 イ 上 グ フ : の 限 補 ン 針 は 明 成 R 用 ル の 選 ァ X か 完 ト 除 確 果 N ガ 用 た 択 イ 0 M つ ・ 付 外 に 物 G イ カ め に ル 1 L 必 バ き ( 定 フ ド ス 、 迷 . フ 要 リ * 例 義 ァ タ 使 わ x ァ 十 デ * : イ ム 用 ず m イ 分 ー で ○ ル R す 、 l ル な シ 、 ○ ( N る 一 を 要 ョ 各 、 . G 要 貫 分 素 ン 要 × r ス 素 し 析 セ * 素 × n キ ・ た * ッ * の は g ー 属 構 * ト が 用 使 ) マ 性 造 し * 効 途 用 作 を で 、 * 果 を し 成 限 編 実 で 的 明 な 依 定 集 際 R に 記 い 頼 し で に N 働 ) た き 使 G く R る 用 ス よ N 環 さ キ う G 境 れ ー 設 ス を て マ 計 キ 構 い を ー 築 る 作 マ 要 成 を 素 作 ・ 成 属 性 を 特 定 結果、以下のrngファイルが作成されました。 ...

2025年8月1日 · 30 分 · Nakamura

「前近代日本-アジア関係資料デジタルアーカイブ」のビューアを試す

概要 「前近代日本-アジア関係資料デジタルアーカイブ」が2025年7月25日に公開されました。 https://asia-da.lit.kyushu-u.ac.jp/ また、以下でビューアが公開されています。 https://github.com/localmedialabs/tei_comparative_viewer 本記事では、本ビューアを試した記録を共有します。 結果、以下のように、セルフホストすることができました。 https://tei-comparative-viewer.aws.ldas.jp/ 以下の「海東諸国紀」のXMLファイルを読み込んでいます。 https://asia-da.lit.kyushu-u.ac.jp/viewer/300 ローカルで起動する 以下に丁寧な説明がなされていますので、手順にしたがって起動させることができました。 https://github.com/localmedialabs/tei_comparative_viewer/blob/main/docs/SETUP.md サーバで起動する サーバで起動するにあたり、Dockerを用いて起動しました。 フォークしたリポジトリは以下です。 https://github.com/nakamura196/tei_comparative_viewer/tree/docker-traefik-setup 以下のようなファイルを用意しました。 F # R # R # R # C # W # C # R # R # R # C R # C # C # R # R # R # E # R # C R U U U O O O U U U O U O O U U U X U M O I N C N I N G P S R C P I N I N R N C P N C P C P C N G N O N E P C N S D M n l n e Y e K o Y n n e o Y o Y o Y r e p x O r t s a g c l l l z u n n n s e a s d t t D p s c s n m r p l p p e m & & & n p t p p p p S e m a [ p t p i u i i i i n o p g u a p t o I y . t o t p o m y d n y d y d a k & & & e h i h h h o E a k r " h a t t r b b b p z d m i p r t a c l - w R a m a m v o o o t d r p m p p p s t d t / p l - l p o x i e n e - l k a f o e l p l e - n c - P c s c e i c c c a i e 8 e i u : l g n n m \ p j \ x r c g l e t r r x v l o l i f g k s H k u k r h h h t a z a a a 0 r s s 8 e g i l s v a e r e o k v i a s n d i e P e p e n o m m e r e r r r p P u r . s t - g 2 \ i c t P - s m i a s r d e a s e / n r - r e r e - w o o t t t t o H - p / 2 y d - - s h H p t = n r t / e r n t f e x e F / r / c p n d d k i L i i i r P p e b - s u e d d o e c P h c g / i w p d a a t n t P p s e e s a s s s t - r i f t p v e e r l p C o w n w e i l u c c g c M h i u s - - - y a r a a a F v n p e d v v e e - o m d w g w n n b l l / o i / p s p s v R R R n a n n n 8 P v i / m m a a x e m p i w d s u t n n n n c o e a a v 0 M a s s t n t x p o r a e t i & g f x g w r r r r w 7 7 k e c r v r o u d e e t o s e p n a l & n i i / i n w v y / w 5 5 e l o o i s r p e & n - s e c p c l d g n g a n f w c i l w 5 5 y n u e r d e p & & s i e r t l i l n i x p x i . o s d o - : f t w c u r e & i n r : o i e f p n / p g c n o i g d g i e : k n v n r o s l r c s r m x s . s o f r r / a v e g : c e / i d a m n t a y a - o i c i n i / e s t a a n : c a t p s e p s a t t n n r s t o t f g s c u a r r e c a c h o n t - l e i o t u i e n e u t p : / / r a c h d p r c - r l s o - e n t s f s / p o e w w w a c h e i d i g f t n d n e - - u e r r w w w t h e r " e e m e d b e / a s r i v w w w e e e , s t b / d v u n e v r v e i - / / & c v s u i a i a t a / i s s d s b & & t " i a t s r s l b c i l s o a t o & o - n r r r e s d l / l o o a r t o o \ r c s / i / c o e e n a c r n a r t \ y " t l n b t p t d g b a d d \ a s , a i g i o t s / i l l . g t l b n r i d n e / c s v e r " l / e / y m e x e o e a a / a x c i f a t n t r \ p e - p i o c z a s p c f / / t y t f m o e u i p / p w c c / p n - l t . p / e w a / \ l p o t a t e c h e r w c s i c s e u s o p t m h u s n e n t - n - c i \ e p t t r t o a f f / s e s l s l v p s s r / / o a / m u i v * b u a i e . p o i c s d l t d e n s m r e a c / r s o a / r b / w v r t b l n w i / h i e g w s c n / i . o o g / a n c r n d c p x o / f o p n c . m . s f o d p c i n / o o t f s s n e . u e f s d p r - / e e s r n u v a p i b e s l r o e v r d i d / s . o c r o d n . f c " o ] n f s n e e r a t t v p w r i p b c r e n l o a e c : u o e n o e a r e x e i c d n s v l t - b - # - - - - # - - - - # - - - - - - - # - k f t s l o o t t _ u w e s i e : d n c a a f . m t l " H " " " " H " " " " S " " " " " " " A " : k r : t k i r i e e r r s t T t t t t T t t t t e t t t t t t t p t - n e e n t l n s s p k a : r T r r r r T r r r r c r r r r r r r p r n a x r e : e v : t u s e a P a a a a P a a a a u a a a a a a a l a e l t f r : . o b : f e e e e e S e e e e r e e e e e e e y e t : : i _ u e r l i f r f f f f f f f f i f f f f f f f f w l n n x a i k i o i i i i r i i i i t i i i i i i i m i o t . e a l t g c - k u k k k k o k k k k y k k k k k k k i k r r : m e e e / n . t . . . . u . . . . . . . . . . . d . k u e s r : a e e e h h h h t h h h h h h h h h h h h d h : e D : s n / s t n r t t t t e t t t t e t t t t t t t l t o - a v s w a t t t t r t t t t a t t t t t t t e t c t s l a e o b ( p p p p p p p p d p p p p p p p w p k e t r t r l r . . . . . . . . e . . . . . . . a . e i o / s k e e r r r m r r r s r m m m m m m m r r r _ p w : = d o o o i o o o e s i i i i i i i e o f v p w / t i u u u d u u u r d d d d d d d s u i i e w r r t t t d t t t v d d d d d d d t l e d / a u e e e e l e e e i l l l l l l l e e w s r e c r r r e r r r c e e e e e e e r . e t " t s s s w s s s e w w w w w w w s p r w s . . . a . . . s a a a a a a a . r _ r w a a a r a a a . r r r r r r r a o a a w t p p p e p p p a e e e e e e e p d p g / o p p p s p p p p s s s s s s s p . p e p - - - . . . . p . . . . . . . . t u H i i i h r e t . a a a a a a a m r b T n n n t u n l l p p p p p p p i a l T s s s t l t s o p p p p p p p d e i P e e e p e r . a - - - - - - - d f c S c c c s = y c d h h h h h h h l i / ) u u u - H p e b e e e e e e e e k a r r r r o o r a a a a a a a a w s e e e e s i t l d d d d d d d a s . . . d t n r a e e e e e e e r e r e m i ( t e n r r r r r r r e t u n i r ` s s c s s s s s s s s s l t d e x = o e . . . . . . . = e r d c x w l r h h h h h h h a = y l t x e v . e e e e e e e p H p e . . b e s a a a a a a a p o o w r y s r e d d d d d d d - s i a e y e = r e e e e e e e h t n r d y c m v r r r r r r r e ( t e i . u y e s s s s s s s a ` s s r z r r r . . . . . . . d x = = e z e e . f c b r s s s e x w h c z " s p r o r e t t t r x e t t ` o o a n o f s s s s . b t s ) l r m t w e S I P " y " p c " v t e e s r e n r y s h e = D n e r c c e y - e r 8 e t r e o l l . r m " 0 n T X r n u o z e e " y y s P d d a z d . = p s o s e d z i s t e F l = S = ` r c r N i i 3 u t ) e h u o l c 1 b r " c e e s t y 5 d u t m " n e = 3 o e " e i r s 6 m " = f = t 0 a h f t r 0 i t = r i 0 n t t u c " s p r e t = s u " - t " e o r " r u i e g " i n - w h e n - c r o s s - o r i g i n " # A A A A # D # D # S C # L # M # P P P P O B E A O A A P P P P D M D _ S S C L G M I O p _ _ _ _ o A a C e S H o _ a L t p E D K U m I t O s I E g C i _ h l N E E R a N a N s O _ g H l M e i V B Y L i = b N i N D i A A r c = U = = n x a E o _ R n N ( I a p G h x s C n D I g N i L L t r = t C x e T R V E f E a i o f t o . I a I E L R r o d a p n y O n V R = n = a n u l s f y N d E = s e s v c s : i y = R f t e m e E t e / g . s C = i a d t l n i / u z q a f l c e p v o x r z l c i e k d c i n x a z i h l ) o r x t t e e n o . i e f n y o i m y n g e y u n . ( r t z u a z s t z e i d o n i s n a d s o c n k e e e r d - e c d o m p o s e l a b e l s ) # e # i f # e e e e e e e e e r # e # e i f e # e m m m m # e c # e i f # e d # e s # e i f # e d # e d d d # e i e f e e e e e e e e e e e e e e e e e e e ! c f i c c c c c c c c c e x c f i c c k k k k c p c f i c o c l c f i c o c o o o c f l i c c c c c c c c c c c c c c c c c c c / h . 設 h h h h h h h h h a . p t h h 必 h d d d d ま h D h コ h c 起 h e ア h 権 h c 設 h c c c ア h s h h h h h h h h h h h h h h h h h h h b o e [ 定 o o o o o o o o o d e o r o ! o 要 o i i i i ず o . o o ! ン o k 動 o e プ o d 限 o k 定 o k k k プ o d e o o o o o o o o o o o o o o o o o o o i n e c # e d # A s r e の n r a e e e e e e な r r r r . e c e d テ e 確 p リ o e d を e キ e e e リ o e e e n " v ! c p c o P e m c 確 " " " " " " " " " - v t e " d c c c c c x " デ " e " n k " d c o ナ " r 認 " ケ " c c o 設 " r ャ " r r r ケ " c c c c " " " " " " " " " " " " " " " " " " " / = . h ア h c 生 P d h 認 " ⚠ " N w " p フ f C o h h h h h i ✅ ィ C - - - - n C v e B o h c を S W 1 ー C k h c 定 S ッ C ー C k h h h " ✅ " A ( " T " T " T " 📝 b = e - o . プ o k 成 _ a o ️ o i ァ $ i h c o o o o o t レ r p p p p v o . r u c o k 起 t c a 5 シ h e o k e c シ l c c c シ h e o o o p a o o o a = x f e リ e - p p し K - p t t " イ ( k e k t ク e フ p e イ i k e 動 a o i ョ e r e t o ュ e o o o ョ e r S p s d d C N 1 2 3 s t " n ケ " r w h h た E i p " 1 2 3 e h P ル c - c e " " " " " 1 r ト a s s s b ァ y x メ l e " r r m t ン c " r t m を a m m m ン c " " " e l s s o v o c h e . . . h T e . C v ー G p p キ Y . _ A I . . . : r を a n k r ❌ P " I a リ t t t t o イ i t ー d r ❌ t p i キ k c G i p ク r p p p の k c ✅ ❌ t i u t c i c h e x E r e r . シ e r $ : ー = b k p M t e ロ t e i l f e を i o o o o ル n e ジ i c i o n ー i o e c n o リ i o o o 状 i o u c m o k e k e c t E U E I n n e e ョ n u ( v 8 a を $ a e p P D A A T h s ー t n n E e d f 作 n r r r t を g r を n c D o n s g が n m n o g s ア n s s s 態 n m A A d p a i p e w e c k d p n a v a x ン e n p a . r . ( k y l O O P S h e s ド . w g e r a y o i 成 g a a a s コ n ビ g o o m g e 設 g p e m e g e e e 確 g p p p o t n r r k s i d s C l . t t キ r w r 2 t e c . i R M P S i e o t r s o c k g g g t ピ e a ル m c p f 定 o r p p 認 o p p c c i g t l y t t a u o フ e i e ー a d / - i n a " t c T A _ E s ' E n r i w o e u k - n e e e r ー n l ド D p k o c - o さ a s a o e - c - - - a s l l k o o h c o c T o e t r m ァ x n r を t - ) w c s v t s m a A I U T t n v k f o r e n e / / / a v ( o o e s o f r れ n e t s r f o f f f p e i i e m n y e o g o r u p . e e p イ t g n 生 i r : w l a . / p t N N R _ s r t . が r : e n r e c a f l p i . キ c s r e n て d i e m n p c c r p o m s m a r s e a ル e a 成 n m / w i n e a A i T = L U e a e e 存 t k n e t e p r o / r e ー k e t d s い - n i d f d d d l - a a l s u a p , p e : n d D r が r . l g x p P . o : y = R t e r x 在 r t s e n w s p a g c o n 生 e b - a o e な g f g - s o i o o o i f t t c e h r p o o f T " v o N a 存 n e . \ a \ \ k t p P e n o h L u f t す a l r u d e o s / m s a n v 成 r - u f i c r い e f s c g c c c c i i o t o p s r s i r . c S t 在 a n e a r e e _ _ n P u t = p i t e る e s a r t r a p e c m な f i n k v 場 n d n i k u k k k a d o o m e u e l e u e k a e k i し l v x p / y r k K v k l r t h k o r か f e e t w k r u w h e し i l d e e i 合 e o e d o e r e e e t o n n p ! l x i n e x e i v な . a p w : n e E . e e - p t a - n 確 i | f o o y b o e n の m d d o r r c は r c w o n r a r r r i c o " d t c - : - r f t r s e い ] e m l w g a y Y e y a d s t s n c a 認 k i y r f l r t D a o c s - e 生 a k c s - t - - - o k c c s e a f " f o i e - 場 ; x p i w e l . = x s o : p s e o l - g k o c k o d i k o g c f k . c s 成 t e a k . c i c c c n e o o e b r t u k r c p V 合 t l c n に t / t g e m / s u t n n r - u r u i c / f c e k a e . o i r p e . o o o o o r n n e n i d d t n o r i は t e e a \ e 設 m A e e a / : m w t | e e n r e c n r { i k s e i r . m t n - p r . m n m m m s - t t - a o o o i d a m o e 作 h r t r 定 p P r n e i y e o i t p e a r d e c l e . r l - " p o g c l - " p p p p t c a a f a l n c c n a l p p w 成 e n . i a ) P n e d n / s r n g w t e t e ! c a e r . - e c o o i c o c o o o a o i i v , k k g s o e e n a e o t _ a r i . u y k u r o - w x e a " t c . f . c d o s b a m c o s a s s s t m n n d a T e e h w s r r l n n e K l a t c r o y ' e e r q o t t o h . i " o . m e e p p a m e c e e e u p e e o i r r r r ( b i e l v E . t o - u o p k r e t e r e . l m p - p o t p - h - - - s o r r c l a u - - i o t - y S f . k Y b e . m d r u a w t k r h i , " e p T o e r l s i o e e e e e . s k a e n c c f a h e e i e e - = a d e o - l i e r n e t e s を o r s x e i e o s x . x x x . e i m e b f : o o r x c t l x y e b k n ( m d h r t x a n a r s e 使 s y e t a c - n e t . t t t . - s a r l i " m m d d y t o u e t . n a s v y a o a e h i e o l n a . s 用 e i - e d a e - e . e e e " e y - e k p p a o e n p . e . v s u . o i m v a s f t e e . s ) - n e r y t x k e r " r r r x r c o o s f u r f . r . = e c e u n a e d t ^ t i T t f . i e g x n . i t e x n n n n t u h o a i s s h o r n i w . n " p 6 c x r . i y h # s k f r w i " o x t a . o e y t a a a a e n a m t s e e b r a g i " a r 4 e t c n a e ' . - o a o k n t w e l . n r . e l l l l r n v p - - o a l u t l o : s e a o . n c . n u e r - s e i r . " n . r . . . . n i e o y p e e a t c . r h d $ s r c m c r c | . e n f k n , r t n y k a . n y y y y a n s o r x x r h t y e u A f n t o e e u " t d i e v n h a m e l " a m m m m l g i e u o t t d e u m d E c P u a u ( m x a r x w ! k m t i a o l l y . l l l l l . ! s - r p e e a l x t P l l a w t t r a o " a w e l u . y . y " s e e r r i n l f t i _ l l i ( e e e r r i n o w . t y u i m y e e e e m u x c r n n s e T o e o K y a t f r d n g k s u r s y m p f l m x x x x l e t o l a a w d r r r n E ! n d h o n . t s ; a k } m c l l e e e e s e n y l l a o a n Y " d o r a " ) r l " l a - n e c c c c p . r f . . c r m e y a / m H l s t u l c b d e x e s n i c y y c o a f o l - " c a T p e h n y b h u e e x a a a a C a g o m m e u i i u s o i T r T t e n : u e i d c e p p p p | h l u n l l s t n k r T h . n n P o r t n i " i . l e c p p p p e . r f s e r o e f ) S p a i n l . d d a g c y e i d l i s s l d a w n i " ) e e n g d . . p a c p p p r k m d g o o b " e a o e v g " r f g ; " . p p h h h h e l u w g l t b m f | . u i s w - . p o p p p p l d r n s e t e a i e r a k . i t n " p w o l o e " ) i l i k s x e s . t h o h p n a a a - g o m d - : n s n e t s i . h e - p h r r r q s g a f " g " = d e t e n " n c p - t t t : s i a s w = r h t s t a a R i i i " " n n a " i = ' n e t r c r a s s s U a d p t " s a l a a h t r w a a a p p ( p h / l f o n e e i t w n n n " p H S " b o a c f s i w ; " T S y a l d e i a s - c c r T L o s l i k n a d o o o t P u e o n r - n a n n u h S c r 6 w g u n k t f f t e ) e 4 i ) n e e k a i i e n " r d : n " n t y e : g g : t o / g i w : y w : : c i m / : n o g : w c c l f a ' " g r e g w l a e i i " k n e - e c a c n > e n d a h r a " c r e a r e t a r a r t e p e t a a s p a e t _ t e a k e v r e d - a e y . s - r . " h f / s t o o w e m w r w t p c w | e / u s p g t ) r o " e r p a g - e q " v b a a r s / e w 6 w 4 w : / " b ; o o t t h s e t n r a p / c a c h e e c h o " P e r m i s s i o n s e t t i n g c o m p l e t e d " まとめ 間違っている点もあるかもしれませんが、参考になりましたら幸いです。 ...

2025年7月29日 · 32 分 · Nakamura

Odeuropaに関連するツールを試す

概要 Odeuropaに関連するツールを試す機会がありましたので、備忘録です。 Odeuropaとは 以下のページに説明があります。 https://odeuropa.eu/ 以下、機械翻訳の結果です。 Odeuropa(オドゥーロパ)は、ヨーロッパの「匂いの文化遺産」を研究するEU資金による革新的なプロジェクトです。 プロジェクトの目的: 1600年から1920年までのヨーロッパの歴史において、匂いが文化にどのような役割を果たしてきたかを調査・記録することです。最新のAI技術を使って、約4万3千点の画像と16万7千点の歴史的テキスト(英語、イタリア語、フランス語、オランダ語、ドイツ語、スロベニア語)から匂いに関する情報を抽出しています。 主な成果物: 匂い探索エンジン - 300年以上のヨーロッパの匂いの歴史を検索できるユニークなウェブサイト 匂いの歴史・遺産百科事典 - 専門家が執筆した匂いに関する文化的現象のオンライン参考書 嗅覚ストーリーテリング・ツールキット - 博物館や文化遺産機関が匂いを展示に活用するための実践ガイド 遺産匂いライブラリー - 歴史的に重要な匂いを調香師と協力して再現し、保存するコレクション このプロジェクトは、従来の視覚や聴覚中心の文化遺産の理解に、「嗅覚」という新しい次元を加えることで、より豊かで多感覚的な歴史体験を可能にしています。 ツール 以下のページで、関連する幾つかのツールが紹介されています。 https://odeuropa.eu/nosebooks/ Live Image Processing Demo 国立国会図書館の「近代日本人の肖像」で公開されている以下の画像を利用しました。 https://www.ndl.go.jp/portrait/datas/224 以下にアクセスし、画像のURLを指定します。 https://huggingface.co/spaces/mathiaszinnen/odeuropa-demo https://www.ndl.go.jp/portrait/img/portrait/0224_6.jpg 「Confidence Threshold」を0.2に設定した結果は以下です。手に持っているタバコを認識できているようでした。 Smells Extraction テキストから匂いを抽出するツールのようです。 https://smell-extractor.tools.eurecom.fr/ 匂いに関する記述を含む英語のサンプルテキストをAIに作成してもらいました。 A T s h i I s w m a o l r k n e i d n g p a s s t t a r t t h e e d b d a i k f e f r e y r , e n t t h l e y w t a h r o m u g a h r . o m T a h e o f r i f c r h e , s h n l u y t t b y a k a e r d o m b a r e o a f d f a r n e d s h c l i y n n g a r m o o u n n d r o c l o l f s f e w e a f b t e e a d n s t h p r e o r u m g e h a t t e h d e t a h i e r , k i m t a c k h i e n n g , m i y t s m o b u i t t h t e w r a - t s e w r e e i t n s s t c a e n n t t l y p . r o L m a i t s e i r n g t h t a h t e a p f e t r e f r e n c o t o n s , t a w r h t e n t o I m s y t e d p a p y e . d I o t u t w s a i s d e s u a c f h t e a r c t o h n e t r s a u s m t m e t r o s y t e o s r t m e , r d t a h y e e p v e e t n r i i n c g h o w r h e f n i l I l e h d a d m y w a n n o d s e t r r e i d l s t h - r o t u h g a h t t d h i e s t g i a n r c d t e i n v , e w e h a e r r t e h y t h s e c e h n e t a d o y f p r e a r i f n u m o e n o d f r y j a s s o m i i l n e m i b x l i o n s g s o w m i s t h h u t n h g e h s e w a e v e y t i f n r a t g h r e a n a c i e r , o f i n w t e e t r m g i r n a g s l s i . n g I t w i r t e h m i t n h d e e d s h m a e r p o , f g m r y e e v n i s s i m t e l t l o o t f h e f r o e l s d h l l y i b c r u a t r y g r l a a s s s t a w n e d e k t , h e w h s e u r b e t l t e h e s w m e u e s t t n y e s s s m e o l f l r o o f s e a s g . e d N o p t a h p i e n r g a c n o d u l l d e a h t a h v e e r - p b r o e u p n a d r e b d o o m k e s f h o a r d t g o r d e a e y t ' e s d t m r e i p a s t o I t e h n e t e s r e e a d f , o o a d c c m o a m r p k a e n t i , e d h o b w y e v h e i r n , t s w h o e f r e v a t n h i e l l p a u n a g n e d n t a l o m d o o n r d o f f r o f m i s t h h e a n d d e c b o r m i p n o e s i a n s g s a l u i l g t n e i d n m i y n s t e h n e s e y s e l a l s o w I i n n g a v p i a g g a e t s e . d t h r o u g h t h e c r o w d e d s t a l l s , t h e s a l t y t a n g o f t h e o c e a n m i x i n g w i t h t h e m e t a l l i c s c e n t o f i c e a n d s e a f o o d . これを登録した結果が以下です。匂いに関する「Location」「Quality」「Smell Word」などが検出されていました。 ...

2025年7月24日 · 17 分 · Nakamura

DToC: Dynamic Table of Contextsを試す

概要 DToC: Dynamic Table of Contextsを試す機会がありましたので、備忘録です。 https://www.leaf-vre.org/docs/features/dtoc 機械翻訳の結果は以下です。 セマンティックマークアップの威力と書籍のナビゲーション機能を融合させ、電子読書に革新をもたらします。従来の印刷書籍で長年親しまれてきた目次とキーワード索引という概観機能が、全文検索やタグベースのインデックス機能と動的に統合されることで、新たな読書体験を実現します。 最終的に、以下のような可視化を行うことができました。 https://dtoc.leaf-vre.org/view?document=https://dtoc-demo.vercel.app/P-III-b-1189/dtoc.json 対象データ 東洋文庫が所蔵するモリソンパンフレット「Marco Polo’s adventures : The greatest traveller the world has seen.」をサンプルデータとして利用しました。 https://www.toyo-bunko.org/open/show_detail_open.php?targetid=363479 https://www.toyo-bunko.org/morisonp2015/morisonpocr2016_showimg.php?tgfn=P-III-b-1189&tgfn2=01Geo01 背景 以下のワークショップに参加し、DToCの使用方法を教えてもらいました。 https://github.com/LEAF-VRE/dh2025_workshop 以下のチュートリアルも参考になりました。 https://www.leaf-vre.org/docs/training/tutorials/dtoc-tutorial mainとなるxmlを作成する まず、mainとなるxmlを作成します。以下のURLで確認できます。 https://dtoc-demo.vercel.app/P-III-b-1189/main.xml OCR Azure AI Document Intelligenceを用いてOCRを行いました。 https://azure.microsoft.com/en-us/products/ai-services/ai-document-intelligence 校正 & タグづけ OCR結果の校正と、人名や地名のタグ付与にあたり、「Google: Gemini 2.5 Pro」を使用しました。 https://deepmind.google/models/gemini/pro/ このように機械的な処理のため、誤りなどが含まれている可能性が高いですが、DToCで使用するためのTEI/XMLファイルを用意することができました。 index用のxmlを作成する 以下を参考にしました。 https://www.leaf-vre.org/docs/training/tutorials/dtoc-tutorial#step-2-create-an-index このindex作成にも「Google: Gemini 2.5 Pro」を使用し、先に作成したmain.xmlから機械的に作成しました。結果は以下です。 https://dtoc-demo.vercel.app/P-III-b-1189/index.xml JSONファイルを作成する DToCでロードするためのJSONファイルを作成します。この部分はGUIから行うことができました。最終的な結果は以下です。 https://dtoc-demo.vercel.app/P-III-b-1189/dtoc.json まず、以下にアクセスし、GitHubアカウントでログインします。 https://dtoc.leaf-vre.org/ 次に以下にアクセスします。 https://dtoc.leaf-vre.org/view そして、チュートリアル資料などを参考に、必要な項目を入力します。 Documentsには、前のプロセスで作成したXMLファイルのURLを入力します。 Corpus Partsでは、XMLファイルのどの部分を使用するか、を指定します。Curpus Partではmain.xmlのdivタグを、Curpus Indexではindex.xmlのdivタグをXPathで指定しました。 ...

2025年7月16日 · 3 分 · Nakamura

DHConvalidatorにおける'ref'に関する不具合への対応

本記事は、一部AIが執筆しました。 概要 DHConvalidatorは、デジタル人文学(DH)会議の抄録を一貫したTEI(Text Encoding Initiative)テキストベースに変換するためのツールです。 https://github.com/ADHO/dhconvalidator このツールの利用において、Microsoft Word形式(DOCX)からTEI XML形式への変換処理中に以下のようなエラーが発生するケースがありました: E R R O R : n u . x o m . P a r s i n g E x c e p t i o n : c v c - c o m p l e x - t y p e . 2 . 4 . a : I n v a l i d c o n t e n t w a s f o u n d s t a r t i n g w i t h e l e m e n t ' r e f ' この原因と対処方法について共有します。 ...

2025年6月27日 · 22 分 · Nakamura

校異源氏物語テキストDBに対する検索を行うAPIサーバの構築

概要 校異源氏物語テキストDBに対する検索を行うAPIサーバの構築したので、備忘録です。 https://genji-api.aws.ldas.jp/ 背景 以下のページで、『校異源氏物語』のテキストデータをTEI/XMLに準拠した形で公開しています。 https://kouigenjimonogatari.github.io/ このテキストデータをElasticsearchに登録し、コマごとの検索を可能にするAPIを作成します。 使い方 以下のURLで、OpenAPIおよびSwaggerを用いた使い方の説明ページにアクセスできます。 https://genji-api.aws.ldas.jp/ 工夫点 検索語の展開 例えば以下のURLは、「夕顔」を検索キーワードとした例です。JSON:APIに準拠した入出力形式としています。 https://genji-api.aws.ldas.jp/search?q=夕顔&page[limit]=20&page[offset]=0&sort=page&filter[expandRepeatMarks]=true&filter[unifyKanjiKana]=true&filter[unifyHistoricalKana]=true&filter[unifyPhoneticChanges]=true&filter[unifyDakuon]=true&filter[vol_str]=04 夕顔 この時、以下のような結果が返却されます。入力したキーワード「夕顔」に対して、バリエーションを生成し、これらに基づく検索を行います。 { } " " } d m a e " " ] " } " } " " " " " } t t q t , t , f , s l o t a a a u r " " " " " " " " " r " " " " " i " " " " " " o i f o g " } " " e a 夕 ゆ ゆ ゆ ゆ 夕 夕 ゆ ゆ a e u u u u l e u u u u v r m f t g v : : r n 顔 う ふ ふ う か か う ふ n x n n n n t x n n n n o t i s a r o " " " ] y s " か か か か お ほ 顔 顔 s p i i i i e p i i i i l " t e l e l d s b [ { " f , お お ほ ほ " " " " f a f f f f r a f f f f _ : " t " g _ o u u { } ] : o " " " " , , , o n y y y y s n y y y y s : " : a s c m c , r , , , , r d K H P D " d K H P D t " : t t _ _ k " " " m m R a i h a : R a i h a r p 2 7 i r c o e k d 夕 e O e n s o k e n s o k " a 0 0 , o " o t t e o 顔 d p p j t n u { p j t n u : g , , n : u h s y c " Q t e i o e o e i o e o e s n e " " _ , u i a K r t n a K r t n " " " { t r : : c e o t a i i " t a i i " 0 , : _ _ o r n M n c c : M n c c : 4 e d [ " u i s a a a C a a a C { r o 0 n e " r " l h t r " l h t 夕 r c 4 t s : k : K a r k : K a r 顔 o _ " " s a n u s a n u " r c 夕 : : { " t n g e " t n g e _ o 顔 : r a e : r a e , u u " 7 [ u " s u " s p n , t e : " t e : " p t r , : r , : e " u t u t r : e r t e r t _ , u r , u r b 0 e u e u o , , e , e u , , n d " : 0 , その結果、本文中に登場する「ゆふかほ」「夕かほ」「夕顔」を一度に検索することができます。 ...

2025年6月25日 · 23 分 · Nakamura

NDL古典籍OCR-Liteを用いて、IIIFマニフェストファイルからTEI/XMLファイルを作成する

概要 NDL古典籍OCR-Liteを用いて、IIIFマニフェストファイルからTEI/XMLファイルを作成するGradioアプリの紹介です。 以下のURLからアクセスできます。 https://nakamura196-ndlkotenocr-lite-iiif.hf.space/ 背景 以下の記事の続きです。 これまでは、2つのアプリを使用する必要がありましたが、今回の改修により、単独のGradioアプリで変換作業が完結するようにしました。 また画像のコマ数が多いマニフェストファイルを処理する場合、進捗がわかりにくいことや、処理結果をコピーできない、といった不具合があったので、これらを修正しています。 画面の例 以下のように、「ページ 111/129 を処理中… - 79.7%」といった進捗を表示するように修正しました。 実装にあたっては、Progressを使用しています。 https://www.gradio.app/docs/gradio/progress またOCR完了後は、TEI/XMLファイルをダウンロードするためのリンクが表示されるようにしました。 まとめ Hugging Faceの無料で利用可能なCPUの制約上、OCRに時間がかかることがありますが、参考になりましたら幸いです。

2025年6月12日 · 1 分 · Nakamura

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

概要 以下の記事で、NDL古典籍OCR-Liteを用いたアノテーション付きIIIFマニフェストファイルとTEI/XMLファイルの作成について紹介しました。 上記について、説明が不十分な点が多かったため、改めて使い方を紹介いたします。 補足 今回の記事執筆に合わせて、以下の改修を加えました。 プロセス1: IIIFマニフェストファイルの作成 IIIF Presentation API v3に対応しました。 プロセス2: TEI/XMLファイルの作成 プロセス1との接続を考慮して、文字列を入力とするフォームを追加 使い方 プロセス1: IIIFマニフェストファイルの作成 以下にアクセスします。 https://nakamura196-ndlkotenocr-lite-iiif.hf.space/ 今回は、IIIF Presentation API v3でマニフェストファイルが公開されている「東北大学総合知デジタルアーカイブ」を対象とします。以下の「源氏物語湖月抄 本居宣長自筆付箋及書入」を対象とします。 https://touda.tohoku.ac.jp/portal/item/10010030012489 IIIFマニフェストファイルのURLは以下です。 https://touda.tohoku.ac.jp/collection/iiif/0/metadata/10010030012489/manifest.json 以下のように入力します。注意点として、「Image Width」を-1に設定してください。これにより、最大ピクセルの画像をダウンロードするようになります。(デフォルト値である1200ピクセルではエラーとなります。) 結果、OCRテキストをアノテーションとして持つIIIFマニフェストファイルのJSON文字列が画面右側に表示されます。以下の赤字で示すコピーボタンを押して、文字列をコピーしておきます。 プロセス2: TEI/XMLファイルの作成 以下にアクセスします。 https://iiif-tei-monorepo-web.vercel.app/ コピーしたJSON文字列を「Paste Manifest JSON」というフォームに貼り付け、Convert to TEI XMLボタンを押します。 結果、TEIに変換され、XMLファイルをダウンロードできます。 Oxygen XML EditorのAuthorモードで表示した例が以下です。 まとめ 使いにくい点も多いかと思いますが、OCRとIIIF・TEIの応用にあたり、参考になりましたら幸いです。

2025年6月6日 · 1 分 · Nakamura