Archiveによる機械学習とAPIの拡張機能によって、デジタル化資料のなかから、視覚的に関心のあるページ領域を簡単に抽出できるようになりました。画像を見つける画像をダウンロードするこの後のステップ概要もし本の中の挿絵だけ見たかったら、どうすればいいだろう?この疑問は、小さい子供も大人の研究者も思いつくものです。本が電子図書館から入手可能だと分かっているとすれば、挿絵のあるページだけをダウンロードして他のページを無視できるとありがたいでしょう。以下は、HathiTrustで識別子osu.32435078698222を持つ資料のページサムネイルです。このレッスンプロセスの後、挿絵のあるページのみ(合計31ページ)がJPEGファイルとしてフォルダにダウンロードできました。America)』(1827年初版)の1845年改訂版全148ページのサムネイルと比較してみるとよいでしょう。(IA)が公開しているパブリックドメインの書籍から、このようなページの抽出とダウンロードを行うための手法を紹介します。page)の歴史を知るために画像コーパスを作りたい人にとっては、興味あるものとなるでしょう。EBBAとAIDAの先駆的取り組みにつづいて、デジタル書誌学への視覚的アプローチが人気を集めています。最近完了した、あるいは、研究資金を得た2つのプロジェクトの例を挙げると、脚注の特定や傍注の追跡の方法を開発するものもあります。私自身の研究は、19世紀の医学書や教育書の挿絵の頻度や様式の変化に関して経験的な問題に答えようとするものです。これには、本ごとの挿絵の数を集計し、これらの挿絵を作るのにどのような印刷工程が行われたのかを推察する必要があります。挿絵のページ抽出のおそらくより的確なユースケースは、同じ本の異なる版での挿絵の対照調査です。今後の研究では、抽出した画像の視覚的な特徴や「意味」(色、大きさ、テーマ、ジャンル、挿絵の数など)を有益に調査することになるでしょう。関心のある領域のなかからさらに絞り込んで情報を抜き出すには、かなりの機械学習を必要とする過程なので、このレッスンの範囲を超えています。挿絵がある(あるいはない)ページのYes/No分類は、対象コレクションのそれぞれの本の「すべての」ページ、という膨大なスペースを狭めるうえでの最初の実用的なステップであり、それにより挿絵の絞り込み(localization)を可能とするものです。参考として、19世紀の医学書では(平均して)ページの1~3%に挿絵があります。仮に前提知識がない電子図書館コーパス内の挿絵を研究しようとすると、コーパスの90%以上のページには挿絵が「ない」と仮定できるのです。Archiveは、光学的文字認識ソフトウェア(OCRは紙の本をスキャンした後に施され、しばしばノイズの多いテキストデータが作られます)を使って生成されたデータを解析することで、挿絵のあるなしの問題に答えることが可能です。ArchiveとFlickrとの共同研究で最初に提案したものでした。Archiveの画像ファイル形式を活用します。HTとIAはOCRで抽出した情報を少し異なる方式で公開しているため、各ライブラリの「視覚的な特徴」の詳細については、それぞれの節で述べることとします。目標このレッスンの後、あなたはAnacondaの「最小限」のPythonディストリビューション(Miniconda)をセットアップして、環境を構築できるようになります検索によって生成されたHTまたはIAの書籍IDのリストを保存し、反復処理を行うことができます。HTとIAデータのアプリケーション・プログラマ・インターフェイス(API)にPythonのライブラリを通じてアクセスできるようになります。ページレベルでの見た目の特性を見つけることができるようになります。プログラミングによってページのJPEGファイルをダウンロードができるようになります。大きな目標は、歴史的な挿絵のコーパスを作成することで、データ収集と探索スキルを高めることにあります。画像データと書籍メタデータを合わせることで、時間を通じて視覚的な変化を考察するという意義のある研究課題を立てることが可能になるでしょう。必要な要件このレッスンのソフトウェア要件は最小限のもので、標準的なOSが動作するコンピュータとウェブブラウザです。Minicondaは、Windows、macOS、Linuxのそれぞれ32ビット、64ビット版で利用可能です。3が現在の安定版であり、無期限でサポートされています。このチュートリアルは、コマンドラインとPythonの基礎知識を前提としています。シェルベースチュートリアルにおけるコメントとコマンドの規則の理解が必要です。Bakerによる「Bashコマンドライン入門」をお勧めします。セットアップ依存関係より経験豊富な読者は、単に依存関係をインストールし、選択した環境でノートブックを実行したいかもしれません。私のMinicondaのセットアップ(およびWindowsとUnix系の違い)についての追加情報を提供します。[作成者はpipenvでのインストールを推奨しています。pipについてはPyPIを参照。]レッスンファイルこちらの圧縮フォルダをダウンロードしてください。Notebookを含んだものです。フォルダには、HathiTrustのコレクションを記述したJSONメタデータのサンプルも含まれています。internetarchive.ipynb.以下の全てのコマンドは、レッスンファイルを格納したフォルダがカレントディレクトリとなっていることを想定したものです。以下は、両方のノートブックのすべてのセルが実行されると作成される、デフォルトのディレクトリです(提供されているままのものです)。ある本の中のどのページに挿絵が含まれているかのリストを取得した後、HTとIAのダウンロード機能はこれらのページをJPEG(ファイル名はページ番号)としてダウンロードして、それらをサブディレクトリ(名前は資料ID)に保存します。異なる書籍リストを用いたり、出力先out_dirをitems以外のものに変えたりすることも可能です。filesダウンロード機能はいい加減(lazy)で、上記のようにitemsのディレクトリを表示した状態でノートブックを再度実行すると、すでに自分のサブフォルダを持っているアイテムはすべてスキップされます。itemsディレクトリが上記のような場合にノートブックを再び実行すると、すでにサブフォルダがあるアイテムの処理はスキップされます。Anaconda(オプション)Anacondaとは、科学計算用のPythonディストリビューションとして主要なものです。このパッケージマネージャcondaで、numpyやtensorflowなどのライブラリを簡単にインストールすることが可能にになります。「Miniconda」バージョンには余計なパッケージがプリインストールされていないので、基本環境をクリーンに保ち、プロジェクトに必要なものだけを名前のついた環境にインストールすることができます。Minicondaをダウンロードしてインストールします。3の最新の安定版を選択します。複数のパッケージマネージャを同時に使用する際の複雑さをコントロールするのに特に役立ちます。すべてのPythonライブラリがcondaを通じてインストールできるわけではありません。いくつかのケースでは、Pythonの標準パッケージマネージャであるpip(あるいはpipenvのような代替品)を頼ることになるでしょう。する場合は、condaによりインストールされたpipを使用します。これにより、プロジェクトに必要なすべてのパッケージを同じ仮想サンドボックスに入れておくことが出来ます。あなたの現在の環境は、前のアスタリスクで示されています。3を使うように設定して、開始します。deactivateを、Windowsではdeactivateを実行してください。レッスン中はextract-pages環境にいることを確認してください!▶︎Condaパッケージのインストール最初のいくつかのパッケージはcondaを使ってインストールできます。他の必要なパッケージ(gzip、json、os、sys、time)はPython標準ライブラリの一部です。チャンネルを指定する必要があることに注意してください。Cloudでパッケージを検索することができます。requestsJupyterには多くの依存関係(必要とする他のパッケージ)があるため、このステップには数分かかる場合があります。([y]/n)?という表示をだしたら、yまたはyesと入力してからEnterキーを押して、パッケージブランを受け入れることを覚えておいてください。裏では、condaは必要なパッケージと依存関係がすべて互換性のある方法でインストールされることを確認するために動いています。▶︎Pipパッケージのインストールcondaa環境を使用している場合は、ローカルバージョンのpipを使用するのがベストです。以下のコマンドで、/Miniconda/envs/extract-pages/Scripts/pipのような絶対パスを含むプログラムを出力していることを確認してください。pip上の出力に2つのバージョンのpipがある場合、APIラッパーライブラリをインストールする際に「ローカル」環境のバージョンへのフルパスを入力してください。Reader)は、開発やデータ探索のためのノートブックの利点を説明しています。このページには、セルを効果的に実行する方法についても有益な情報が掲載されています。私たちは、Anacondaの最小限のバージョンをインストールしたので、コマンドラインからJupyterを起動する必要があります。notebookを実行してください。ホームページでデフォルトのブラウザを起動すると。ホームページには、現在の作業ディレクトリにあるすべてのファイルが表示されます。ディレクトリにcdで移動していることを確認すること。hathitrust.ipynbとinternetarchive.ipynbのノートブックをクリックして、新しいブラウザタブを開きます。ここからは、シェルのコマンドを実行する必要はありません。ノートブックのおかげで、Pythonのコードを実行でき、コンピュータのファイルシステムへフルアクセスができるようになりました。終了したら、Jupyterホームページの「Quit」をクリックするか、シェルでctrl+cを実行することで、ノートブックサーバを停止することができます。HathiTrustAPIアクセスデータAPIを使う前に、HathiTrustに登録する必要があります。登録ポータルで、名前、組織名、メールアドレスを入力してアクセスキーをリクエストしてください。数分でメールの返信が届きます。リンクをクリックすると、2つのキーが表示されたワンタイムのページにアクセスします。hathitrust.ipynbノートブックで、最初のセル(下記)を調べてください。指示通りにAPIトークンを入力します。ノートブックのナビゲーションバーで「Run」をクリックすることでセルを実行します。接続オブジェクトのインスタンスを作成します。公開レポで公開しないでください。誰でも検索できるようになってしまいます。プロジェクトでの良い方法は、トークンを環境変数として保存するか、バージョン管理されていないファイルに保存することです。資料リストの作成HTでは、ログインしていなくても、誰でも資料コレクションを作ることができます!ただし、資料リストを保存したい場合は、アカウント登録をする必要があります。指示に従って、いくつか全文検索を行い、選択した結果をコレクションに追加します。現在、HathiTrustでは、プログラムで書籍を取得するための検索用APIが公開されていないため、ウェブインターフェイスで検索する必要があります。コレクションを更新すると、HTはコレクション内の各資料に関するメタデータを追跡します。レッスンファイルには、JSON形式のサンプルレッスンのメタデータが含まれています。あなた自身のHTコレクションのファイルを使いたい場合は、コレクションページに移動して、左側にあるメタデータのリンクの上にカーソルを置くと、下のスクリーンショットにあるようにJSON形式でダウンロードするオプションが表示されます。Notebookを配置したディレクトリに移動するだけです。HTノートブック内のJSONファイルの名前を、コレクションのファイル名に置き換えてください。このノートブックでは、リスト内包表記を使い、コレクションの全情報を含むgathersオブジェクト内にある全てのhtitem_id文字列を得る方法を示しています。ここでコレクションのメタデータファイルを指定することができます。data['gathers']]他のチュートリアルでは、1つのアイテムをどのように処理するかを示すものがしばしばです(サイズは小規模のものや複雑なものが多いです)。教育的には便利ですが、これでは複数のアイテムにコードを適用する方法が身につきません。このノートブックでは、1つのアイテムに適用する変換方法を、アイテムのコレクションのループ内で呼び出すことができる「関数」にカプセル化する方法を見ていきます。視覚的な特徴:IMAGE_ON_PAGE資料リストがあると、ページレベルでどのような視覚的な特徴があるのかを探ってみたくなるだろう。(HTの)データAPIの最新ドキュメント(2015)では、9~10ページ目にhtd:pfeatと呼ばれるメタデータオブジェクトについて記述されています。htd:pfeatは「HathiTrustデータAPI:ページの特徴」の略です。TITLEhathitrust-apiラッパーが行うのは、HT資料の全メタデータをPythonオブジェクトとして利用できるようにすることです。資料の識別子があれば、そのメタデータをリクエストして、ページシーケンスからページレベルまで情報を掘り下げることができます。htd:pfeatの「リスト」は本の各ページに対応しており、理論的にはそのページに当てはまる全ての特徴を含んでいます。実際には、上に挙げた8つの特徴タグよりもかなり多くのタグがあります。私達が扱うことになるのは、IMAGE_ON_PAGEと呼ばれるもので、CHAPTER_STARTのような構造タグよりも抽象的で視覚的なものになります。Burton-Westは、HathiTrustとHathiTrust研究センター(HTRC)と緊密に連携をしています。Tomは私に、HathiTrustが2008年のHT設立以来、密接に連携しているGoogleから、htd:pfeatの情報を提供されているとメールで教えてくれました。Googleの担当者はTomに以下の情報を共有する許可を与えてくれました。これらのタグは、ヒューリスティック、機械学習、人間によるタグ付けの組み合わせで作成されたものです。ヒューリスティックの例としては、資料のページシーケンスの最初の要素がほぼ常にFRONT_COVERだと考えられます。機械学習は、例えば洋書の散文や彫刻に彫られる典型的な数行と画像データとを識別するためのモデルを訓練するために使用することができます。人によるタグ付けは、手動で画像にラベルを割り当てることです。EEBOやECCOなどのデータベースで挿絵が見られるのは、人間によるタグ付けの例です。Googleが「機械学習」を使ったというのは少し不思議な感じがします。Googleがその手法公開するまで、すべての詳細を知ることは不可能です。Archiveの節で説明します)。その後、さらなるフィルタリングが適用されているのかもしれません。▶︎画像を見つけるここまで、書籍リストを作成する方法と、データAPIを使ってページレベルの経験的な特徴を含むメタデータオブジェクトを取得する方法を見てきました。out_dir=None)というシグネチャがあります。ユニークな識別子とオプションの保存先ディレクトリを与えると、この関数はまずAPIから書籍メタデータを取得し、JSON形式に変換します。次にページシーケンスをループし、(もしあれば)IMAGE_ON_PAGEタグがhtd:pfeatリストにあるかどうかを確認します。continueトップレベルのオブジェクトから数段階掘り下げないと、反復処理を行えるhtd:seqオブジェクトに辿り着けないことに注意してください。捕まえたい2つの例外は、ページにページレベルの特徴がない場合に起こるKeyErrorと、何らかの理由でページのpseqの値が非数値型のためにint型に変換できない場合に起こるTypeErrorです。ページでなにかおかしなことが起こった場合には、次のページにcontinueするだけです。考え方としては、できる限りの良いデータを取得することにあります。アイテムのメタデータの不整合やギャップをきれいにするためではありません。▶︎画像をダウンロードするimg_pagesにIMAGE_ON_PAGEでタグ付けされたページの完全なリストが含まれていれば、それらのページをダウンロードできます。ht_picture_download()にout_dirが指定さてれない場合、この関数は単にimg_pagesのリストを返し、なにもダウンロードしないことに注意せよ。APIコールgetpageimage()は、デフォルトでJPEGを返します。通常の方法で、単にJPEGのバイト配列をファイルに書き出すだけです。(out_dir内の)資料サブフォルダ内では、1ページ目は1.jpgというように名前を付けられます。考慮すべきは、APIの使用率です。1分間に何百ものリクエストをしてアクセスを悪用することは避けたいものです。安全のために、特に大きなジョブを実行する場合は、各ページのリクエストを行う前に2秒待ちます。これは短期的にはイライラするかもしれませんが、APIのスロットルや使用停止を回避することに役立ちます。ない場合にのみループは実行されます。APIライブラリに接続します。これについては、クイックスタートガイドで説明しています。Card”)」に登録してください。internetarchive.ipynbノートブックの最初のセルに、指示されたとおりに、資格情報を入力します。APIへの認証を行うためにセルを実行します。資料リストの作成IAのPythonライブラリを使用してクエリ文字列を送信すると、”identifier”(識別子)という単語がキーで実際の識別子がデータ値となる、キーと値のペアのリストを受け取ることができます。クエリの構文については、IAの高度検索ページで説明しています。”date”(日付)、”mediatype”(メディアタイプ)のようなキーワードの後にコロンを続け、そのパラメータに割り当てたい値を指定します。私は(動画などではなく)「テキスト」の結果だけを表示したいです。使用しようとするパラメータとオプションがIAの検索機能でサポートされていることを確認してください。しないと、欠けていたりや奇妙な結果が得られ、また、その理由が分からなくなる可能性があります。ノートブックでは、私はIAのIDリストを生成しています。Archiveはページレベルの特徴は一切公開していません。その代わりに、デジタル化の過程で得られた多くの生のファイルをユーザーが利用できるようにしています。Abbyy社はロシアの企業で、FineReaderというソフトウェアはOCR市場を席巻しています。FineReaderの最近のバージョンはすべて、スキャンした文書の各ページに、異なる「ブロック」を関連付けるXML文書を生成しています。一般的なブロックはTextですが、Pictureブロックもあります。XMLファイルから取り出したブロックの例を示します。左上(「t」と「l」)と右下(「b」と「r」)の隅で、十分長方形のブロック領域を特定できます。XMLファイルを解析し、各ページの反復処理をすることです。そのページに1つでもPictureブロックがあれば、そのページは画像が含まれている可能性があるというフラグが立てられます。HTのIMAGE_ON_PAGEの特徴では画像の「位置」についての情報は含まれていないが、XMLファイルのPictureブロックはページ上の長方形の領域に関連付けられている。FineReaderは西洋の文字セットからの文字を認識することに特化しているので、画像の領域を特定する精度ははるかに低い。Leetaruのプロジェクト(「概要」を参照)では、座標を使って挿絵をトリミングしていましたが、このレッスンでは単にページ全体をダウンロードすることにしました。このレッスンの知的な楽しみの一つは、ノイズの多いデータセット(つまり、OCRのブロックタグ)を、単語ではなく挿絵を認識するために利用するという、意図されていない目的のために使うことにあります。将来的には、書籍内の全てのページ画像にディープラーニングモデルを実行し、希望するタイプの挿絵を選び出すことがコンピュータで可能になるでしょう。ほとんどの資料のほとんどのページには挿絵がないため、これは計算コストのかかる作業です。今のところは、OCRの認識過程から得られた既存データを活用する方が理に適っています。ScanTailor」を参照してください。エラーは、ゆがみや人為的な影響など多くの問題によって生じえます。これらのエラーは、結果的に「Picture」ブロックの信頼性と精度に影響を与えることになります。多くの場合、Abbyyは空白ページや変色したページを挿絵(画像領域)だと推定します。これらの不正確なブロックタグは望ましくないものですが、再訓練させた畳み込みニューラルネットワークによって処理することができます。このレッスンでダウンロードするページ画像は、クリーンで利用可能な歴史的な挿絵データセットを得るための長いプロセスの最初の段階と考えるようにしてください。out_dir=None)です。これはファイルの入出力を伴うので、img_pagesリストを得るにはHTの場合より複雑です。(ライブラリと共にインストールされる)コマンドラインユーティリティのiaを使うと、資料に関する利用可能なメタデータファイルを知ることができます。GZ」のファイルが利用できるはずです。これらのファイルは、たとえ圧縮されていたとしても、簡単に数百メガバイトのサイズになることがあります。ボリュームにAbbyyファイルがあれば、その名前を取得してダウンロードします。ia.download()コールでは、ファイルが既に存在する場合はリクエストを無視し、存在しない場合は入れ子になったディレクトリを作らずにダウンロードするための便利なパラメータを使用しています。ファイルを削除しています。利用可能なメタデータフォーマットを確認するため、コマンドラインクライアントを使用します。このレッスンではAbbyyファイルだけが必要です。no_directory=True)ファイルを取得したら、Pythonの標準ライブラリを使ってXMLを解析する必要があります。圧縮ファイルをgzipライブラリで直接開けられることを利用します。Abbyyファイルは0オリジン(zero-indexed)のため、スキャンシークエンスの最初のページのインデックスは0となっています。0ではIAからリクエストできないため、0を除去しなければなりません。IAが0インデックスを除外することは、どこにも書かれておらず、私はこれを試行錯誤で発見しました。あなたが説明しにくいエラーメッセージが表示されたら、ソースを探し出して、似た経験のある人や組織自体に助けを求めることを恐れないでください。OCRファイルは巨大なので、ページリストができたら削除してください。os.remove(abbyy_file)▶︎画像をダウンロードするIAのPythonラッパーは、複数ページのダウンロードのみが可能で、単一ページのダウンロード機能は提供していません。APIを使って特定のページを取得することになります。必要なページごとのURLを構築します。requestsライブラリを使ってHTTPのGETリクエストを送り、うまくいけば(つまりレスポンスでコード200が返ってくるなどすれば)、レスポンスの内容をJPEGファイルに書き出します。Framework)に準拠した画像のトリミングとサイズ変更のためのAPIのアルファ版に取り組んできました。ほとんどサポートされていない形式で、JP2ファイルのダウンロードを必要としていた単一ページダウンロードの古い方法と比べ、IIIFは大きな改善をもたらしました。今では、シングルページのJPEGを取得するのは非常に簡単です。All」をしたりして、挿絵ページが入ってくるのを自由に見てみましょう。これらのスクリプトや関数は、あなた自身の研究課題に合わせて活用することをお勧めします。印刷メディアの間の相互作用について研究をしています。ライセンスの下に提供されています。