TEIテキストの作成支援ツール「FairCopy」の紹介

概要 研究仲間に、「FairCopy」というTEIテキストの作成支援ツールを教えていただきました。本ツールはGUIを介してTEIテキストを作成可能なツールで、とても便利なものに感じました。 有料のツールですが、2週間は無料で試用できるため、この調査結果を共有します。 インストール 以下のSign Up画面から情報を送信することで、トライアルのコードとアプリケーションのダウンロードリンクが表示されます。 https://faircopyeditor.com/sign_up ダウンロード後にアプリケーションを起動すると、以下のようなプロジェクトの選択画面が表示されます。 プロジェクトの作成 プロジェクトを作成します。今回は、以下のような情報を入力しました。 その後、以下のような画面が表示されます。 作成するデータ 今回は、すでに公開されている校異源氏物語テキストDBで公開されている「きりつぼ」のTEIデータについて、本ツールを使って再現することを試みます。 https://kouigenjimonogatari.github.io/tei/01.xml 国立国会図書館で公開されているIIIF画像と、プロジェクトで翻刻したテキストデータを対応づけたTEI/XMLファイルです。 新規リソースの作成 「NEW RESOURCE」をクリックすると、以下のような登録フォームが表示されます。適当なNameとIDを与えます。 また「Resource Type」については、複数の選択肢が表示されますが、TEI Header付きのTEIとIIIFを組み合わせたXMLファイルを作成したい場合には、「TEI Document」を選択するのがよさそうです。 結果、以下のように、「校異源氏物語・きりつぼ」フォルダの中に、「TEI Header」というファイルが作成されます。 IIIFのインポート まず、IIIF画像のインポートを試みます。「IMPORT IIIF」ボタンを押し、以下のようなIIIFマニフェストのインポート画面において、URLを入力します。 今回は、以下のマニフェストのURLを入力しました。 https://www.dl.ndl.go.jp/api/iiif/3437686/manifest.json すると、以下のように画像が追加されます。 その行をクリックすと、以下のように、マニフェストファイル内の画像が取り込まれます。ID列で、各画像にIDが与えられていることが確認できます。テキストと画像の紐付けにおいて、後ほど使用します。 画面右上の画像アイコンをクリックすると、画像を表示することもできます。 参考までに、「校異源氏物語・きりつぼ」に戻り、以下のように、画像の行のチェックボックスを選択して、「ACTIONS」 > 「Export」を押すと、XMLファイルが出力されます。 以下のように、facsimile要素を持つXMLファイルが作成されます。 <?xml version="1.0" encoding="UTF-8"?> <TEI xmlns="http://www.tei-c.org/ns/1.0"> <facsimile sameAs="https://www.dl.ndl.go.jp/api/iiif/3437686/manifest.json"> <surface xml:id="f000" ulx="0" uly="0" lrx="6890" lry="4706" sameAs="https://www.dl.ndl.go.jp/api/iiif/3437686/canvas/1"> <label>1</label> <graphic mimeType="application/json" url="https://www.dl.ndl.go.jp/api/iiif/3437686/R0000001"/> </surface> <surface xml:id="f001" ulx="0" uly="0" lrx="6890" lry="4706" sameAs="https://www.dl.ndl.go.jp/api/iiif/3437686/canvas/2"> <label>2</label> <graphic mimeType="application/json" url="https://www.dl.ndl.go.jp/api/iiif/3437686/R0000002"/> </surface> ... </facsimile> </TEI> 後ほど、TEI Headerとtext - bodyを組み合わせたTEI/XMLをエクスポートしますが、上記のように、画像やテキスト、TEI Headerなど、それぞれの要素のTEI/XMLをエクスポートする機能が提供されています。 テキストのインポート 次に、テキストのインポートを行います。とりあえず、以下のようなサンプルのテキストファイルを登録します。 ...

2022年11月11日 · 1 分 · Nakamura

テキストマークアップツール「CATMA」の使い方

概要 テキストマークアップツールの一つである「CATMA」の入門的な使い方を紹介します。 https://catma.de/ アノテーションの結果はTEIフォーマットでエクスポートできるため、他のシステムでも活用可能な相互運用性の高いデータを作成できると思われます。また実験的な段階とのことですが、JSON APIも提供されています。これを使うことで、アノテーションはCATMAで行い、その結果をAPIを経由して、他のシステムで利用する、という構成も考えられます。 上記は未検証の内容を含む、一部発展的な取組みになりますが、本記事では、CATMAの基本的な使い方を備忘録として残します。 使い方 以下にアクセスして、「Sign Up」を行います。Googleのアカウントでログインするとスムーズかと思います。 https://app.catma.de/catma/ ログイン後の画面は以下です。 プロジェクトの作成 「Create New Project」から新しいプロジェクトを作成します。 ドキュメントの登録 以下のように、「+」ボタンを押して、「Add Document」を行います。 今回は以下のような単純なtxtファイルを試します。 私の名前は中村覚です。 その後の選択肢は基本的にそのままでOKですが、以下のように、言語は「Japanisch」にしておくとよいかもしれません。 以下のように、exampleというドキュメントと、example Default Annotaitonsというアノテーションを保存するためのコレクションが作成されます。 タグセットの作成 次に、タグセットを作成します。左のメニューから「Tags」を選択して、画面右上の「+」ボタン、「Add Tagset」を選択します。 今回は「はじめてのタグセット」という名前をタグセットを作成しました。さらに、画面右上の「+」ボタンから、「Add Tag」を選択します。 そして、以下のように、タグの追加対象となるタグセットを選択して、今回は、「persName」というタグを追加してみます。「プロパティ」などを追加設定できますが、今回はスキップします。 アノテーション 左のメニューから、「Annotate」に移動して、以下のように、アノテーション対象のドキュメントとして「example」、タグセットとして「はじめてのタグセット」を選択します。 アノテーション付与対象の選択し、画面右から付与対象のタグを選択します。先のタグの追加画面で設定した色の下線が引かれます。 エクスポート 左のメニューから、「Project」に戻り、「example Default Annotations」を選択して、メニューアイコンから「Export Documents & Collections」を選択します。 zipファイルがダウンロードされ、元テキストであるtxtファイルと、アノテーション結果を格納したxmlファイルが展開されます。 xmlファイルは以下のようなTEIのフォーマットで出力されます。<encodingDesc>に使用したタグ、具体的にはpersNameが示されます。 また、<body>以下に、何文字目から何文字目に対して、どのタグが付与されているか、という情報が格納されます。 <TEI xmlns="http://www.tei-c.org/ns/1.0" xml:lang="en"> <teiHeader> <fileDesc> ... </fileDesc> <encodingDesc> <fsdDecl xml:id="T_876E9B9F-B41D-4DD7-B54A-A225A75A8F50" n="はじめてのタグセット b51b9866b96ff38f059b7b5b38b8383dfc53f27c"> <fsDecl xml:id="CATMA_BDA41946-07EF-403E-BDE9-D2E60C48D093" n="2022-11-10T02:05:19.000+0100" type="CATMA_BDA41946-07EF-403E-BDE9-D2E60C48D093"> <fsDescr>persName</fsDescr> ... </fsDecl> </fsdDecl> </encodingDesc> </teiHeader> <text> <body> <ab type="catma"> <ptr target="D_FB58A2B3-EC15-42B8-8DAC-E9A28B3D1FDC#char=0,5" type="inclusion"/> <seg ana="#CATMA_E1AE48BF-903B-451B-8723-FAD8FD182CFE"> <ptr target="D_FB58A2B3-EC15-42B8-8DAC-E9A28B3D1FDC#char=5,8" type="inclusion"/> </seg> <ptr target="D_FB58A2B3-EC15-42B8-8DAC-E9A28B3D1FDC#char=8,13" type="inclusion"/> </ab> </body> <fs xml:id="CATMA_E1AE48BF-903B-451B-8723-FAD8FD182CFE" type="CATMA_BDA41946-07EF-403E-BDE9-D2E60C48D093"> ... </fs> </text> </TEI> 上記の構造化データを使って、さまざまな活用ができそうです。 ...

2022年11月10日 · 1 分 · Nakamura

MediaWikiのTEI拡張を試す(結果:うまくいきませんでした。)

概要 MediaWikiでTEIの編集を可能とする拡張機能が開発されています。 https://www.mediawiki.org/wiki/Extension:TEI 編集画面の例は以下です。 Omeka Sの翻刻支援モジュールであるScriptoは、Omeka SとMediaWikiを連携させることで、Omeka Sに登録された画像データ等に対する翻刻を可能にします。 https://omeka.org/s/modules/Scripto/ この環境に、上述したTEI拡張を組み合わせることで、TEIに準拠した翻刻ができないかを試しました。ただ、結果として、今回のTEI拡張をうまく動作させることができませんでした。 以下、この取り組みに関する備忘録です。 なお、オンライン上でTEIを編集できるツールとして、以下があります。こちらも参考になりましたら幸いです。 https://digital-editing.fas.harvard.edu/editor/ MediaWikiのセットアップ AWSのLightsailを用いて作成したLAMP環境に、MediaWikiをインストールしました。このインスール方法については、公式のドキュメントなど、多くの記事がすでに存在するため、そちらに説明を譲ります。 https://www.mediawiki.org/wiki/Manual:Installing_MediaWiki/ja TEI拡張のインストール 以下のページのInstallationを参考に、拡張機能を追加します。 https://www.mediawiki.org/wiki/Extension:TEI 以下、日本語訳です。 ファイルをダウンロードして、extensions/フォルダー内のディレクトリに配置します。 LocalSettings.phpの下部に次のコードを追加します。 wfLoadExtension ( 'TEI' ); 完了 – ウィキのSpecial:Versionに移動して、拡張機能が正常にインストールされたことを確認します。 上記のSpecial:Versionのページには、日本語設定の場合は、以下からアクセスできます。 /index.php?title=特別:バージョン情報 以下のような画面が表示されます。 そして、以下の記述をLocalSettings.phpにさらに追加します。 define( 'NS_TEI', 100 ); define( 'NS_TEI_TALK', 101 ); $wgExtraNamespaces[NS_TEI] = 'TEI'; $wgExtraNamespaces[NS_TEI_TALK] = 'TEI_Talk'; $wgNamespaceContentModels[NS_TEI] = 'tei'; 追加作業 上記まで行いましたが、TEIが有効になりませんでした。以下の追加作業が必要でした。 CodeMirrorの追加 以下の拡張機能が必要でした。 https://www.mediawiki.org/wiki/Extension:CodeMirror 上記をインストールの上、以下をLocalSettings.phpに追記します。 wfLoadExtension ( 'CodeMirror' ); wfLoadExtension ( 'Math' ); wfLoadExtension ( 'VisualEditor' ); 上記では、CodeMirrorに加えて、デフォルトでインストールされているMathとVisualEditorも有効化しています。 ...

2022年11月10日 · 1 分 · Nakamura

[TEI x JavaScript] Nuxt3で意図しないWhitespaceを削除する

課題 TEI/XMLファイルを読み込み、JavaScript(Vue.jsなど)で可視化を行う際、意図しないWhitespaceが入ってしまうケースがありました。 具体的には、以下のようなHTMLを書いた場合、 <template> <div> お問い合わせは <a href="#">こちらから</a> お願いします </div> </template> 以下のように表示され、「お問い合わせは こちらから お願いします」と意図しないスペースが入ってしまいました。 この課題に対して、以下のリポジトリで解決策を公開してくださっていました。 https://github.com/aokiken/vue-remove-whitespace ただ私の環境ではNuxt3ではうまく動作させることができなかったため、ソースコードを参考に、Nuxt3へ導入してみました。 以下、この備忘録です。 Nuxt3への導入 plugins/removeWhitespace.tsを作成します。 function isText(node: ChildNode) { return node.nodeType === Node.TEXT_NODE } function trimText(node: NodeListOf<ChildNode>) { Array.from(node).forEach((node) => { if (isText(node) && node.textContent) { node.textContent = node.textContent.trim() return } trimText(node.childNodes) }) } export default defineNuxtPlugin((nuxtApp) => { nuxtApp.vueApp.directive("removeWhitespace", { mounted(el: HTMLElement) { trimText(el.childNodes) }, updated(el: HTMLElement) { trimText(el.childNodes) }, }); }); そして、pages/index.vueなどで、v-remove-whitespaceディレクティブを使用します。 <template> <div v-remove-whitespace> お問い合わせは <a href="#">こちらから</a> お願いします </div> </template> その結果、以下のように、意図しないWhitespaceを削除できました。 まとめ ディレクティブの理解が不十分で誤っている点もあるかと思いますが、参考になりましたら幸いです。 以下、ソースコードとデモサイト(GitHub Pages)です。 ソースコード https://github.com/nakamura196/nuxt3-removeWhitespace デモサイト https://nakamura196.github.io/nuxt3-removeWhitespace/ なお、本題と話がそれますが、nuxt.config.tsを以下のように記述することで、baseURLを指定することができました。 export default defineNuxtConfig({ app: { baseURL: "/nuxt3-removeWhitespace", // /<reponame> }, }); Nuxt3のSSGをGitHub Pagesで公開する際の参考になりましたら幸いです。 ...

2022年10月25日 · 1 分 · Nakamura

ultralytics/yolov5でのAttributeErrorへの対応

ultralytics/yolov5を使用した際、以下のエラーが発生しました。 AttributeError: 'Detections' object has no attribute 'imgs' これは、以下のissueにあるように、apiが変更されたために発生するようです。 https://github.com/robmarkcole/yolov5-flask/issues/23 一例ですが、以下のようにプログラムを書き換えることで、エラーが解消しました。 results = model(im) # inference # new def getImage(results): output_dir = "static" if os.path.exists(output_dir): shutil.rmtree(output_dir) results.save(save_dir=f"{output_dir}/") return Image.open(f"{output_dir}/image0.jpg") # old def oldGetImage(results): results.render() return Image.fromarray(results.imgs[0]) renderedImg = getImage(results) 同様のことでお困りの方の参考になりましたら幸いです。

2022年10月18日 · 1 分 · Nakamura

Nuxt 3のserver/apiでjsonファイルを操作する方法の一例

Nuxt 3のserver/apiでjsonファイルを(インポートして)操作する方法の一例です。以下の記事を参考にしました。 https://github.com/nuxt/framework/discussions/775#discussioncomment-1470136 型定義などの改善の余地は多々ありますが、以下のような書き方で動作確認ができました。 // async/await を使用しています。 export default defineEventHandler(async (event) => { const items_: any = await import('~/assets/index.json') // .defaultをつける点に注意 const items_total: any[] = items_.default // 以下の参考リンクを参照してください。 const query = getQuery(event) const page: number = Number(query.page) || 1; const size: number = Number(query.size) || 20; const items: any[] = items_total.slice((page - 1) * size, page * size); return { "hits": { "total": { "value": items_total.length, }, "hits": items } } }); 上記により、例えば/api/items?page=2&size=40のようなクエリを用いることで、インポート元のjsonファイル(~/assets/index.json)の一部を返却することができました。パスはassets以外でも大丈夫のようですが、十分に検証できていません。 色々と改善の余地があるかと思いますが、参考になりましたら幸いです。 参考 https://v3.nuxtjs.org/guide/directory-structure/server/#handling-requests-with-query-parameters

2022年10月16日 · 1 分 · Nakamura

Nuxt3をNetlifyおよびAWSにデプロイする方法の一例

概要 Nuxt3をNetlifyおよびAWSにデプロイする方法の一例の備忘録です。 以下、構築例です。 Netlify app.vue https://nuxt3-nakamura196.netlify.app/ server/api/hello.ts https://nuxt3-nakamura196.netlify.app/api/hello AWS(Serverless) app.vue https://nuxt3.aws.ldas.jp/ server/api/hello.ts https://nuxt3.aws.ldas.jp/api/hello ソースコードは以下です。 https://github.com/nakamura196/nuxt3 以下、それぞれについて説明します。 Netlify 以下の記事を参考にすることで、BFFを含むデプロイができました。 https://blog.cloud-acct.com/posts/nuxt3-netlify-deploy/ AWS(Serverless) Lambda Functions URLを使用する方法は以下の記事が参考になりました。 https://qiita.com/P3117/items/e2893804c3161a161a49 一方、今回はAPI Gatewayを使用する方法を示します。以下の記事が参考になりました。 https://stackoverflow.com/questions/73862456/nuxt-3-in-aws-lambda-with-serverless-framework 上記を参考にすることで、以下のようにデプロイすることができました。 https://9f4jl2wn81.execute-api.us-east-1.amazonaws.com/ こちらについて、カスタムドメインの設定を行います。以下、API Gatewayのみを使用する場合と、CloudFrontを用いる場合のそれぞれについて説明します。 API Gatewayのみ API Gatewayの「カスタムドメイン名」から、ドメイン名を作成します。 その後、APIマッピングから、上述のAPIを選択します。 そして、Route 53でレコードを追加します。 これにより、以下のように、カスタムドメインを用いて公開することができます。 https://nuxt3-apigateway.aws.ldas.jp/ CloudFrontを用いる場合 CloudFrontのディストリビューションの作成において、オリジンドメインにAPI GatewayのURLを入力します。 「デフォルトのキャッシュビヘイビア」の「ビューワー」では、「Redirect HTTP to HTTPS」を選択しました。 「設定」において、代替ドメイン名およびカスタムSSL証明書を指定します。 最後に、Route 53でCloudFrontのドメイン名を用いたレコード追加を行います。 これにより、以下のように、カスタムドメインを用いた公開を行うことができました。 https://nuxt3.aws.ldas.jp/ まとめ 他にもより良い方法があるかと思いますが、Nuxt3のデプロイに関して参考になりましたら幸いです。 またSPAやSSGとしてデプロイする場合には、GitHub Pagesを利用する方法もあるかと思います。 用途に応じて使い分けていきたいと思います。

2022年10月11日 · 1 分 · Nakamura

TEI/XMLファイルを縦書きPDFに変換する方法の1例

概要 TEI/XMLファイルを縦書きPDFに変換する方法について、その1例を備忘録として残します。 以下のノートブックで、「校異源氏物語」を対象としたプログラムをお試しいただけます。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/TEI_XMLファイルを縦書きPDFに変換する.ipynb 変換の流れ 今回は、Quartoを使用しています。 https://quarto.org/ インストールの方法は以下を参考にしてください。 https://quarto.org/docs/get-started/ TEI/XML -> qmd まずTEI/XMLファイルの内容をqmdファイルに変換します。以下は、変換スクリプトのサンプルです。 from bs4 import BeautifulSoup soup = BeautifulSoup(open(file,'r'), "xml") elements = soup.findChildren(text=True, recursive=True) import os id = os.path.splitext(os.path.basename(file))[0] title = soup.find("title").text author = soup.find("author").text elements = soup.find("body").find("p").findChildren() text = "" for e in elements: if e.name == "pb": text += "\n" if e.name == "seg": text += e.text + " \n" opath = f"data/{id}.qmd" os.makedirs(os.path.dirname(opath), exist_ok=True) text = f"""--- title: "{title}" author: "{author}" format: docx: reference-doc: /content/kouigenjimonogatari/tools/genji-doc-style.docx --- {text.strip()} """ with open(opath, "w") as f: f.write(text) 以下がqmdファイルの例です。 --- title: "校異源氏物語・きりつぼ" author: "池田亀鑑" format: docx: reference-doc: /content/kouigenjimonogatari/tools/genji-doc-style.docx --- いつれの御時にか女御更衣あまたさふらひ給けるなかにいとやむことなきゝは にはあらぬかすくれて時めき給ありけりはしめより我はと思あかり給へる御方 〱めさましきものにおとしめそねみ給おなしほとそれより下らうの更衣たち はましてやすからすあさゆふの宮つかへにつけても人の心をのみうこかしうら みをおふつもりにやありけむいとあつしくなりゆきもの心ほそけにさとかちな るをいよ〱あかすあはれなる物におもほして人のそしりをもえはゝからせ給 はす世のためしにもなりぬへき御もてなし也かんたちめうへ人なともあいなく めをそはめつゝいとまはゆき人の御おほえなりもろこしにもかゝることのおこ りにこそ世もみたれあしかりけれとやう〱あめのしたにもあちきなう人のも てなやみくさになりて楊貴妃のためしもひきいてつへくなりゆくにいとはした なきことおほかれとかたしけなき御心はへのたくひなきをたのみにてましらひ 給ちゝの大納言はなくなりてはゝ北の方なんいにしへの人のよしあるにておや うちくしさしあたりて世のおほえはなやかなる御方〱にもいたうおとらすな にことのきしきをももてなしたまひけれととりたてゝはか〱しきうしろみし なけれは事ある時はなをより所なく心ほそけ也さきの世にも御ちきりやふかか qmd -> Word(docx) 次に、qmdファイルをwordファイルに変換します。この時、事前に用意した縦書きのwordテンプレートを参照することで、マークダウン形式のテキストを縦書きのwordファイルに変換します。 ...

2022年10月3日 · 1 分 · Nakamura

選択したテキストに対するポップアップを表示するnpmパッケージを試作しました。

ウェブサイトで選択したテキストに対するポップアップを表示するnpmパッケージを試作しました。 npm https://www.npmjs.com/package/@nakamura196/text-popup ソースコード https://github.com/nakamura196/text-popup デモページ https://nakamura196.github.io/text-popup/ 開発にあたっては、以下の記事を参考にしています。 https://zenn.dev/nino_cast/articles/98a0a87f58026f ウェブサイトに以下の2行を追加することでお試しいただけます。 <script src="https://cdn.jsdelivr.net/npm/@nakamura196/text-popup/dist/main.min.js"></script> <script>textPopup();</script> npmライブラリの開発および公開の参考になりましたら幸いです。

2022年10月1日 · 1 分 · Nakamura

IIIFアイコンのドラッグ&ドロップ対応について

背景 IIIF(International Image Interoperability Framework )のアイコン(具体的には、IIIFのマニフェストURL)は、多くのIIIF対応ビューアにおいて、ドラッグ&ドロップによるロードに対応しています。 ただし、以下のモジュールによって表示するIIIFアイコンについては、ドラッグ&ドロップができない、というフィードバックをいただきました。 https://github.com/omeka-j/Omeka-S-module-IiifViewers この原因について、以下のページなどを参考に調査しました。 https://zimeon.github.io/iiif-dragndrop/ その結果、以下のようなHTMLの記述が必要なことがわかりました。 <a href="default_target?manifest=manifest_URI&canvas=canvas_URI"> <img src="iiif-dragndrop-100px.png" alt="IIIF Drag-n-drop"/> </a> 上記のパターンに合致していないことが、上述したモジュールでドラッグ&ドロップができない不具合の原因でした。 この記事では、この対応方法について記述します。 対応方法 具体的には、以下のマニフェストURLを例とします。 マニフェストURLの例: https://omekas.aws.ldas.jp/sandbox/iiif/2/2/manifest そして、これまでは以下のように、aタグのhref属性に、IIIFマニフェストのURLのみを与えていました。 <a href="https://omekas.aws.ldas.jp/sandbox/iiif/2/2/manifest" title="IIIFマニフェスト" target="_blank"> <img style="height: 24px" src="https://omekas.aws.ldas.jp/sandbox/files/asset/iiifviewers632bf7d736e3b.svg"> </a> 上記を以下のように修正する必要がありました。 <a href="https://omekas.aws.ldas.jp/sandbox/iiif/2/2/manifest?manifest=https://omekas.aws.ldas.jp/sandbox/iiif/2/2/manifest" title="IIIFマニフェスト" target="_blank"> <img style="height: 24px" src="https://omekas.aws.ldas.jp/sandbox/files/asset/iiifviewers632bf7d736e3b.svg"> </a> アイコンをクリックした際に、マニフェストをダウンロードできる挙動は同じですが、後者では、他のIIIF対応ビューアへのドラッグ&ドロップに対応できます。 href属性にマニフェストURLを2回記述する点が少し冗長ですが、Universal ViewerやIIIF Curation Viewerでも同様の記述がなされていました。 このように?manifest=manifest_URIの部分がロードに使用されることが多いことから、その前のdefault_targetの部分は影響しないことが多いこともわかりました。 そのため、IIIFアイコンだけでなく、以下のようなURLが付与されることが多いUniversal ViewerやIIIF Curation ViewerのURLおよびアイコンについても、他のIIIFビューアにドラッグ&ドロップできることが確認できました。(恥ずかしながら、これまではdefault_targetの部分がIIIFマニフェストのURLである必要があると思っていました。) UV: https://universalviewer.io/examples/uv/uv.html#?manifest=https://omekas.aws.ldas.jp/sandbox/iiif/2/2/manifest ICV: http://codh.rois.ac.jp/software/iiif-curation-viewer/demo/?manifest=https://omekas.aws.ldas.jp/sandbox/iiif/2/2/manifest まとめ IIIFアイコン(IIIFのマニフェストURL)をサイトに設置する際の、ドラッグ&ドロップへの対応のお役に立てば幸いです。

2022年9月22日 · 1 分 · Nakamura

[備忘録] maptilerのlightおよびdarkテーマ

シンプルな地図を探していたところ、maptilerにたどり着きました。 https://www.maptiler.com/ 具体的には、以下のBasic Lightや、 https://www.maptiler.com/maps/#784b0675-dce5-4a4f-b16c-0d8e06442314//vector/3/-122.45/37.79 以下のBasic Darkがよさそうでした。 https://www.maptiler.com/maps/#74f0e2cf-0dc3-46ba-98ed-c2395d4c71e2//vector/3/-122.45/37.79 ただ、上記の地図をMy Cloudのページからの使用を試みたところ、なかなか見つけることができませんでした。 結果的には、それぞれ以下のURLからたどり着くことができました。 テーマ URL Basic Light https://cloud.maptiler.com/maps/positron/ Basic Dark https://cloud.maptiler.com/maps/darkmatter/ 同様のことでお困りの方の参考になりましたら幸いです。

2022年9月12日 · 1 分 · Nakamura

Swagger UIのデモで初期表示するspecificationをgetパラメータで指定する

Swagger UIのデモが以下で公開されています。 https://petstore.swagger.io/ 上記のURLに対して、?url=(jsonやyamlファイルへのURL)を指定することで、初期表示するspecificationを指定することができました。 ここでは、以下の公開されている例を対象とします。 https://github.com/OAI/OpenAPI-Specification 例えば、以下のように指定することができます。 https://petstore.swagger.io/?url=https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/examples/v3.0/api-with-examples.yaml specificationを他者と共有する際の参考になりましたら幸いです。

2022年9月9日 · 1 分 · Nakamura

Omeka S IIIF ServerのIIIFマニフェスト(version 2)の出力内容

概要 Omeka SでIIIFマニフェストを配信するためのモジュールとして、IIIF Serverがあります。 https://github.com/Daniel-KM/Omeka-S-module-IiifServer 本記事では、このIIIFマニフェスト(特に、IIIF Presentation API version 2)の出力内容について確認します。 例 以下、https://shared.ldas.jp/omeka-sというURLで公開しているOmeka Sにおいて、IDtest-111のアイテムに関するIIIFマニフェストの例です。 { "@context": "http://iiif.io/api/presentation/2/context.json", "@id": "https://shared.ldas.jp/omeka-s/iiif/test-111/manifest", "@type": "sc:Manifest", "label": "Sample Item", "thumbnail": { "@id": "https://iiif.dl.itc.u-tokyo.ac.jp/iiif/kunshujou/A00_6010/001/001_0001.tif/full/!200,200/0/default.jpg", "@type": "dctypes:Image", "format": "image/jpeg", "width": 200, "height": 200 }, "license": "https://shared.ldas.jp/omeka-s/s/test/page/reuse", "attribution": "サンプル機関", "related": { "@id": "https://shared.ldas.jp/omeka-s", "format": "text/html" }, "seeAlso": { "@id": "https://shared.ldas.jp/omeka-s/api/items/1270", "format": "application/ld+json" }, "metadata": [ { "label": "Title", "value": "Sample Item" }, { "label": "Identifier", "value": "test-111" } ], "sequences": [ { "@id": "https://shared.ldas.jp/omeka-s/iiif/test-111/sequence/normal", "@type": "sc:Sequence", "label": "Current Page Order", "viewingDirection": "left-to-right", "canvases": [ { "@id": "https://shared.ldas.jp/omeka-s/iiif/test-111/canvas/p1", "@type": "sc:Canvas", "label": "1", "thumbnail": { "@id": "https://iiif.dl.itc.u-tokyo.ac.jp/iiif/kunshujou/A00_6010/001/001_0001.tif/full/!200,200/0/default.jpg", "@type": "dctypes:Image", "format": "image/jpeg", "width": 200, "height": 200 }, "width": 6401, "height": 4810, "images": [ { "@id": "https://shared.ldas.jp/omeka-s/iiif/test-111/annotation/p0001-image", "@type": "oa:Annotation", "motivation": "sc:painting", "resource": { "@id": "https://iiif.dl.itc.u-tokyo.ac.jp/iiif/kunshujou/A00_6010/001/001_0001.tif/full/full/0/default.jpg", "@type": "dctypes:Image", "format": "image/jpeg", "width": 6401, "height": 4810, "service": { "@context": "http://iiif.io/api/image/2/context.json", "@id": "https://iiif.dl.itc.u-tokyo.ac.jp/iiif/kunshujou/A00_6010/001/001_0001.tif", "profile": "http://iiif.io/api/image/2/level1.json" } }, "on": "https://shared.ldas.jp/omeka-s/iiif/test-111/canvas/p1" } ] }, { "@id": "https://shared.ldas.jp/omeka-s/iiif/test-111/canvas/p2", "@type": "sc:Canvas", "label": "2枚目", "thumbnail": { "@id": "https://iiif.dl.itc.u-tokyo.ac.jp/iiif/kunshujou/A00_6010/001/001_0002.tif/full/!200,200/0/default.jpg", "@type": "dctypes:Image", "format": "image/jpeg", "width": 200, "height": 200 }, "width": 6401, "height": 4810, "images": [ { "@id": "https://shared.ldas.jp/omeka-s/iiif/test-111/annotation/p0002-image", "@type": "oa:Annotation", "motivation": "sc:painting", "resource": { "@id": "https://iiif.dl.itc.u-tokyo.ac.jp/iiif/kunshujou/A00_6010/001/001_0002.tif/full/full/0/default.jpg", "@type": "dctypes:Image", "format": "image/jpeg", "width": 6401, "height": 4810, "service": { "@context": "http://iiif.io/api/image/2/context.json", "@id": "https://iiif.dl.itc.u-tokyo.ac.jp/iiif/kunshujou/A00_6010/001/001_0002.tif", "profile": "http://iiif.io/api/image/2/level1.json" } }, "on": "https://shared.ldas.jp/omeka-s/iiif/test-111/canvas/p2" } ], "metadata": [ { "label": "Title", "value": "2枚目" } ] } ] } ] } 以下、それぞれのタイプについて説明します。 ...

2022年9月1日 · 2 分 · Nakamura

BeautifulSoupでxml:id属性を与える方法

BeautifulSoupでxml:id属性を与える方法の備忘録です。 以下の方法ではエラーが発生してしまいます。 from bs4 import BeautifulSoup soup = BeautifulSoup(features="xml") soup.append(soup.new_tag("p", abc="xyz", xml:id="abc")) print(soup) 以下のように記述すると正しく実行できました。 from bs4 import BeautifulSoup soup = BeautifulSoup(features="xml") soup.append(soup.new_tag("p", **{"abc": "xyz", "xml:id":"aiu"})) print(soup) Google Colabの実行例は以下です。 https://github.com/nakamura196/ndl_ocr/blob/main/BeautifulSoupでxml_id属性を与える方法.ipynb 参考になりましたら幸いです。

2022年8月30日 · 1 分 · Nakamura

[Omeka S]Bulk Importの不具合対応(ソースコードからのインストール方法を含む)

概要 Omeka Sでのデータ一括登録を行うためのモジュールの一つであるBulk Importについて、2022年8月21日現在の最新版であるver.3.3.33.4において不具合が含まれるようです。 具体的には以下のissueで、mediaの一括登録時に不具合が生じます。 https://gitlab.com/Daniel-KM/Omeka-S-module-BulkImport/-/issues/11 この不具合について、以下のcommitで既に対応済みです。 https://github.com/Daniel-KM/Omeka-S-module-BulkImport/commit/7d568a97f08459e22e7c5fbaa8163b17ab4ba805 しかし、本日時点において、まだRelease版は公開されていないため、ソースコードからのインストールを行う必要があります。 ソースコードからのインストール 以下の記事も参考にしてください。 ここでは、改めてインストール方法を説明します。 ソースコードのダウンロード Omeka Sのmodulesディレクトリに移動して、ソースコードをダウンロードします。必要に応じて、ダウンロード済みのBulkImport関連ファイルおよびフォルダを削除します。 cd modules rm -rf BulkImport* git clone https://github.com/Daniel-KM/Omeka-S-module-BulkImport.git BulkImport composer 次にcomposer installを行います。 cd BulkImport composer install --no-dev 以下のように、composerが見つからない場合があります。 composer: Command not found. 簡単な対応方法として、以下を実行します。 curl -sS https://getcomposer.org/installer | php php composer.phar install --no-dev 上記により、モジュールのインストールは完了です。 Omeka Sの管理画面での操作 モジュールのアップグレード ブラウザから、管理画面のModules一覧ページにアクセスします。 http://xxx.xyz/omeka-s/admin/module この一覧からBulk Importを確認し、「Upgrade」ボタンが表示されている場合には、アップグレードしてください。 Import時の注意 基本的な操作方法に変更はありませんが、以下のStart import画面において、「Identifier to use for linked resources or update」の変更が必要な場合があります。 以下のmetada.csvおよびimage.csvを使用することを想定します。 https://gist.github.com/nakamura196/fa50591426c43eec319e71bfdb8b6460 以下、登録画面です。 ...

2022年8月21日 · 1 分 · Nakamura

コマンドラインから virtuoso を手動で再起動または停止する方法

コマンドラインから virtuoso を手動で再起動または停止する方法です。 以下の記事を参考にしています。 https://stackoverflow.com/questions/42575039/how-to-manually-restart-or-stop-virtuoso-from-commandline 以下のようにするのがよいようです。 isql {host}:{port} {UID} {PWD} EXEC=shutdown 具体例は以下です。 isql localhost:1111 dba dba EXEC=shutdown 以下のようにisqlがnot foundの場合、パスを変更して実行します。 isql localhost:1111 dba dba EXEC=shutdown bash: isql: command not found find / -name isql /usr/local/bin/isql /root/virtuoso-opensource/binsrc/tests/isql /usr/local/bin/isql localhost:1111 dba dba EXEC=shutdown 参考になりましたら幸いです。

2022年8月19日 · 1 分 · Nakamura

VGG16を用いた類似画像検索

以下の記事に関連して、VGG16を用いた類似画像検索を行うノートブックを作成しました。 ノートブックは以下です。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/[vgg16]_Image_Similarity_Search_in_PyTorch.ipynb 「ランタイム」 > 「すべてのセルを実行」 で動作を確認することができます。 参考になりましたら幸いです。

2022年8月19日 · 1 分 · Nakamura

オートエンコーダ(自己符号化器)を用いた類似画像検索

以下の記事を参考に、オートエンコーダ(自己符号化器)による類似画像検索を行うノートブックを作成しました。 https://medium.com/pytorch/image-similarity-search-in-pytorch-1a744cf3469 ノートブックは以下です。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/Image_Similarity_Search_in_PyTorch.ipynb 「ランタイム」 > 「すべてのセルを実行」 で動作を確認することができます。 参考になりましたら幸いです。

2022年8月19日 · 1 分 · Nakamura

[RDF] URIにアクセスしたらSnorqlの画面にリダイレクトさせる設定

以下の記事の続編です。 ジャパンサーチのRDFストアを参考として、https://xxx.abc/data/123などのURLにアクセスしたら、https://xxx.abc/?describe=https://xxx.abc/data/123にリダイレクトさせる設定の備忘録です。 ジャパンサーチの例 https://jpsearch.go.jp/entity/chname/葛飾北斎 -> https://jpsearch.go.jp/rdf/sparql/easy/?describe=https://jpsearch.go.jp/entity/chname/葛飾北斎 以下のようなconfファイルを作成し、適切な場所(例:/etc/httpd/conf.d/)に配置します。 RewriteEngine on RewriteCond %{HTTP_ACCEPT} .*text/html RewriteRule ^/((data|entity)/.*) https://xxx.abc/?describe=https://xxx.abc/$1 [L,R=303] その後、apacheを再起動します。 systemctl restart httpd これにより、snorqlの画面にリダイレクトさせることができます。

2022年8月19日 · 1 分 · Nakamura

Hugging Face SpacesでJSONを返却する

以前、Hugging Face SpacesとYOLOv5モデル(NDL-DocLデータセットで学習済み)を使った推論アプリの構築を行いました。 今回は上記のアプリを一部変更して、以下の差分に示すように、JSON出力を追加しました。 https://huggingface.co/spaces/nakamura196/yolov5-ndl-layout/commit/4d48b95ce080edd28d68fba2b5b33cc17b9b9ecb#d2h-120906 これにより、以下のノートブックのように、返却結果を利用した処理が可能になりました。 https://github.com/nakamura196/ndl_ocr/blob/main/GradioのAPIを用いた物体検出例.ipynb 他により良い方法があるかと思いますが、参考になりましたら幸いです。

2022年8月16日 · 1 分 · Nakamura