🕌

【Omeka S モジュール紹介】IIIF Searchモジュール

2022/11/24に公開約6,300字

概要

IIIF Search は、全文検索のためのIIIF Content Search APIを追加する Omeka S 用モジュールです。

特に、日本語テキストを扱うための改修を加えた以下のモジュールを対象に、その使用方法を紹介します。

https://github.com/nakamura196/Omeka-S-module-IiifSearch

インストール

githubからソースコードをcloneします。omeka-sは適宜読み替えてください。

cd omeka-s/modules
git clone https://github.com/nakamura196/Omeka-S-module-IiifSearch.git IiifSearch

githubからインストールする場合には、上記のように、フォルダ名を対象モジュール名に変更する必要がある点に注意が必要です。

インストール後、検索クエリとして使用する文字列の下限を設定するフォームが表示されます。日本語テキストを扱い場合には、1などに設定しておくことをお勧めします。

ALTO形式のxmlファイルの作成

OCR結果を記述するためのフォーマットの一つであるALTO形式のXMLファイルを作成する必要があります。

https://www.loc.gov/standards/alto/techcenter/elementSet/index.html

ALTO形式のXMLファイルの作成にあたっては、以下の記事などが参考になります。

https://zenn.dev/nakamura196/articles/d61e296fa9d86c

例えば、以下の画像ファイルを対して、

以下のようなxmlファイルが生成できます。

<?xml version="1.0" encoding="utf-8"?>
<alto xmlns="http://www.loc.gov/standards/alto/ns-v4#"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xsi:schemaLocation="http://www.loc.gov/standards/alto/ns-v3# http://www.loc.gov/standards/alto/alto.xsd">
   <Description>
      <MeasurementUnit>pixel</MeasurementUnit>
      <sourceImageInformation>
         <fileName>alto_test.png</fileName>
      </sourceImageInformation>
      <OCRProcessing ID="IdOcr">
         <ocrProcessingStep>
            <processingSoftware>
               <softwareName>tesseract 4.0.0-beta.1</softwareName>
            </processingSoftware>
         </ocrProcessingStep>
      </OCRProcessing>
   </Description>
   <Layout>
      <Page ID="page_1" PHYSICAL_IMG_NR="1" HEIGHT="841" WIDTH="595">
         <PrintSpace HEIGHT="841" WIDTH="595" VPOS="0" HPOS="0">
	    ...
            <ComposedBlock ID="block_1_4" HEIGHT="23" WIDTH="446" VPOS="205" HPOS="59">
               <TextBlock ID="par_1_4"
                          HEIGHT="23"
                          WIDTH="446"
                          VPOS="205"
                          HPOS="59"
                          LANG="jpn">
                  <TextLine ID="line_1_4" HEIGHT="23" WIDTH="446" VPOS="205" HPOS="59">
                     <String ID="word_1_11"
                             CONTENT="Google"
                             HEIGHT="20"
                             WIDTH="70"
                             VPOS="208"
                             HPOS="59"
                             WC="0.89"/>
                     <String ID="word_1_12"
                             CONTENT="Colab"
                             HEIGHT="16"
                             WIDTH="58"
                             VPOS="208"
                             HPOS="135"
                             WC="0.93"/>
                     <String ID="word_1_13"
                             CONTENT=""
                             HEIGHT="841"
                             WIDTH="595"
                             VPOS="0"
                             HPOS="0"
                             WC="0.93"/>
                     <String ID="word_1_14"
                             CONTENT="Tesseract"
                             HEIGHT="16"
                             WIDTH="117"
                             VPOS="208"
                             HPOS="195"
                             WC="0.91"/>
                     <String ID="word_1_15"
                             CONTENT=""
                             HEIGHT="19"
                             WIDTH="18"
                             VPOS="206"
                             HPOS="314"
                             WC="0.93"/>
                     <String ID="word_1_16"
                             CONTENT="動か"
                             HEIGHT="19"
                             WIDTH="41"
                             VPOS="206"
                             HPOS="335"
                             WC="0.93"/>
                     <String ID="word_1_17"
                             CONTENT=""
                             HEIGHT="19"
                             WIDTH="19"
                             VPOS="206"
                             HPOS="378"
                             WC="0.93"/>
                     <String ID="word_1_18"
                             CONTENT="(日"
                             HEIGHT="21"
                             WIDTH="25"
                             VPOS="205"
                             HPOS="413"
                             WC="0.96"/>
                     <String ID="word_1_19"
                             CONTENT=""
                             HEIGHT="20"
                             WIDTH="20"
                             VPOS="206"
                             HPOS="442"
                             WC="0.93"/>
                     <String ID="word_1_20"
                             CONTENT=""
                             HEIGHT="20"
                             WIDTH="41"
                             VPOS="206"
                             HPOS="464"
                             WC="0.92"/>
                     <String ID="word_1_21"
                             CONTENT=""
                             HEIGHT="841"
                             WIDTH="595"
                             VPOS="0"
                             HPOS="0"
                             WC="0.93"/>
                  </TextLine>
               </TextBlock>
            </ComposedBlock>
            ...
         </PrintSpace>
      </Page>
   </Layout>
</alto>

画像とxmlファイルをOmekaにアップロードする

以下のように、画像とxmlファイルをアップロードします。注意点として、画像とxmlのファイル名(拡張子を除く)を揃えて必要があります。(以下の例では、alto_test

この結果、アイテムの表示画面で、以下のように、検索フォーム付きのUniversal Viewerが表示されます。
(IIIF Server および III Viewersが導入されていることを前提としています。)

「日」という検索語を入力すると、タイトル部分の「日本語」の部分がハイライトされます。

まとめ

IIIF Content Search APIの機能を追加するモジュールについて紹介しました。

ALTO形式のXMLファイルを生成するプロセスは改善の余地があるため、ALTO形式のXMLファイルを自動的に作成するためのモジュール改修、または、ALTO形式以外のOCRファイルを登録可能にするためのモジュール改修など、今後の課題としたいと思います。

IIIF Content Search APIの挙動を確認する上での参考になりましたら幸いです。

Discussion

ログインするとコメントできます