ResourceSyncのPythonライブラリを試す

概要 ResourceSyncのPythonライブラリである「py-resourcesync」を試したので、その備忘録です。 https://github.com/resourcesync/py-resourcesync セットアップ git clone https://github.com/resourcesync/py-resourcesync cd py-resourcesync python setup install 実行 resourcelist まず、出力用のresource_dirディレクトリを作成します。カレントディレクトリにex_resource_dirフォルダが作成されます。 resource_dir = "ex_resource_dir" !mkdir -p $resource_dir 次に以下を実行します。適宜generatorを変更して使用するようですが、以下ではEgGeneratorというサンプルのものを使用しています。 from resourcesync.resourcesync import ResourceSync # from my_generator import MyGenerator from resourcesync.generators.eg_generator import EgGenerator my_generator = EgGenerator() metadata_dir = "ex_metadata_dir" # 適宜変更してください。 rs = ResourceSync(strategy=0, resource_dir=resource_dir, metadata_dir=metadata_dir) rs.generator = my_generator rs.execute() 結果、ex_resource_dir/ex_metadata_dirに、.well_known、capabilitylist.xml、resourcelist_0000.xmlが作成されます。 <?xml version='1.0' encoding='UTF-8'?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:rs="http://www.openarchives.org/rs/terms/"> <rs:ln href="http://www.example.com/.well-known/resourcesync" rel="up" /> <rs:md capability="capabilitylist" /> <url> <loc>http://www.example.com/metadata_dir/resourcelist_0000.xml</loc> <rs:md capability="resourcelist" /> </url> </urlset> <?xml version='1.0' encoding='UTF-8'?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:rs="http://www.openarchives.org/rs/terms/"> <rs:ln href="http://www.example.com/metadata_dir/capabilitylist.xml" rel="up" /> <rs:md at="2022-11-21T00:13:46Z" capability="resourcelist" completed="2022-11-21T00:13:46Z" /> <url> <loc>http://www.resourcesync.org</loc> <lastmod>2016-10-01T00:00:00Z</lastmod> <rs:md hash="md5:cc9895a21e335bbe66d61f2b62ce3a8e" length="20" type="application/xml" /> </url> </urlset> changelist strategyを1に変更することでnew_changelist、2に変更することでinc_changelistを作成することができました。 Resourcedump と Changedump strategyを3に変更することでresourcedump、4に変更することでchangedumpを作成できるようですが、これらについては設定方法を十分に理解することができず、未検証です。 ...

2022年11月21日 · 更新: 2022年11月21日 · 1 分 · Nakamura

【Omeka S モジュール開発】Sitemapsへの機能追加

以下の記事で、Omeka Sにサイト毎の動的なサイトマップ XML ファイルを追加する「Sitemaps」モジュールを紹介しました。 上記のモジュールについて、簡単な機能追加を行いました。具体的には、pagesおよびitemsetsをサイトマップXMLに含めるか否かを選択できるオプションを追加しました。 以下が、フォークしたリポジトリです。 https://github.com/nakamura196/omeka-s-module-Sitemaps 改修内容は以下でご確認いただけます。 https://github.com/nakamura196/omeka-s-module-Sitemaps/commit/03325f79e4e5b83c4ff7867fd37ed210fdf8eab2 本モジュール改修の参考になりましたら幸いです。

2022年11月20日 · 更新: 2022年11月20日 · 1 分 · Nakamura

【Omeka S モジュール紹介】Sitemaps

概要 本モジュールは、Omeka Sにサイト毎の動的なサイトマップ XML ファイルを追加します。 https://omeka.org/s/modules/Sitemaps/ インストール Omeka Sの基本的な方法でインストールできます。 設定 まず、サイトマップを追加したいサイトを選択します。 そして以下のように、Site Admin > 設定と遷移します。 設定画面の下部に、以下のように動的なサイトマップを生成を有効するためのオプションがあります。 上記を有効にすると、以下のように、サイトマップが生成されます。 https://omekas.aws.ldas.jp/sandbox/s/demo/sitemap.xml まとめ Omeka Sへのサイトマップ導入にあたって、参考になりましたら幸いです。

2022年11月20日 · 更新: 2022年11月20日 · 1 分 · Nakamura

iiif auth apiを試す

概要 iiif auth apiを試すため環境として、以下のリポジトリが提供されています。 https://github.com/digirati-co-uk/iiif-auth-server 今回は、上記のリポジトリを使用して、iiif auth apiを試します。 起動 準備 git clone https://github.com/digirati-co-uk/iiif-auth-server cd iiif-auth-server python -m venv venv source venv/bin/activate pip install --upgrade pip pip install -r requirements.txt pip install -r requirements.txt時にバージョンの不具合などが発生した場合、以下のように、バージョン情報を削除して、再度試すなどしてみてください。 argparse Flask iiif2 itsdangerous Jinja2 MarkupSafe pbr Pillow six stevedore Werkzeug db作成 その後、dbを作成します。 export FLASK_APP=iiifauth export FLASK_DEBUG=true flask initdb 上記を実行後、iiif-auth-server/iiifauthにiiifauth.dbというファイルが作成されます。 dbの中身は、以下のようなツールを使って確認することができます。 https://sqlitebrowser.org/dl/ 起動 以下を実行します。 flask run その後、http://127.0.0.1:5000にアクセスすると、以下の画面が表示されます。 ビューアの準備 以下を実行して、mirador3をダウンロードして、ローカルサーバで起動してみます。 wget https://mirador.cultural.jp python -m http.server http://0.0.0.0:8000にアクセスして、以下の画面が表示されればOKです。 ビューアに読み込ませる http://127.0.0.1:5000のページの構成は、まずImagesが並び、その後Manifestsが並びます。 今回、下部のManifestsを、Mirador3で読み込んでみます。 ...

2022年11月18日 · 更新: 2022年11月18日 · 3 分 · Nakamura

【Omeka S モジュール紹介】Data Type RDF

概要 Data Type RDFは、Omeka Sにデータ型 (html、xml、ブール値) を追加するモジュールです。 以下の、Numeric Data Typesと使い方は同様です。 https://nakamura196.hatenablog.com/entry/2021/08/01/070701 以下、使い方について紹介します。 使い方 インストール 他のOmekaモジュールと同じようにインストールします。 リソーステンプレートの編集 任意のリソーステンプレートを作成します。 次に、特定のプロパティのデータタイプにおいて、Data Type RDFの値を選択します。ここでは、本モジュールで追加された3つのタイプすべてを追加します。 その結果、以下のように、データタイプが指定されます。 アイテムの編集 アイテムの編集画面に移動して、先に作成したリソーステンプレートを選択します。 すると、先に指定したプロパティ(ここでは、decterms:description)に対して、入力フォームとして、「Html」「Xml」「Boolean」の3つが登場します。 それぞれ異なる入力フォームが用意され、入力方法が簡素化されます。 また以下のように、これらのデータタイプに応じて、表示方法も変更されます。 APIでの出力例 APIによるJSON-LDの出力例は以下です。@typeにURIが指定されていることが確認できます。 EasyRdfのconverterを用いて、RDF/XMLに変換した結果は以下です。(Xmlについては、datatypeが付与されない結果となりました。) まとめ Omeka Sにデータ型 (html、xml、ブール値) を追加するモジュール「Data Type RDF」の紹介でした。参考になりましたら幸いです。

2022年11月14日 · 更新: 2022年11月14日 · 1 分 · Nakamura

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日 · 更新: 2022年11月11日 · 1 分 · Nakamura

Omeka SにICA RiC-Oの語彙を登録する

概要 Omeka SにICA Ric-Oの語彙登録を行いましたので、その備忘録です。 https://www.ica.org/standards/RiC/RiC-O_v0-2.html 方法 Omeka Sの語彙登録の画面において、以下のように情報を入力します。 結果、106のクラス、485のプロパティ、が登録されました。 以下、プロパティ一覧の画面例ですが、各プロパティのコメント等もご確認いただけます。 まとめ ICA RiC-O、および、Omeka Sの活用について、参考になりましたら幸いです。

2022年11月10日 · 更新: 2022年11月10日 · 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日 · 更新: 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日 · 更新: 2022年11月10日 · 1 分 · Nakamura

Omeka SのREST APIとやりとりするためのPythonパッケージ

概要 Omeka SのREST APIをPythonから操作可能なパッケージが開発されています。 https://github.com/wragge/omeka_s_tools さらに、上記のリポジトリをベースとして、いくつかの機能追加を行なったリポジトリを作成しています。 https://github.com/nakamura196/omeka_s_tools2 本稿では、このリポジトリについて紹介します。 使い方 以下のページを参考にしてください。 https://nakamura196.github.io/omeka_s_tools2/ 本リポジトリはnbdevを用いて開発されており、パッケージの開発とドキュメンテーションを並行して行うことができ、便利な仕組みだと感じました。 追加開発した機能 IIIF画像URLの登録機能 Omeka SではIIIF画像URLの登録機能がありますが、本モジュールではこの登録機能が未実装でした。以下のように、IIIF画像URLの登録を行うメソッドを追加しました。 https://nakamura196.github.io/omeka_s_tools2/api.html#omekaapiclient.add_iiif_to_item アイテムセットの追加機能 本モジュールではアイテムセットの登録機能が未実装でした。以下のように、アイテムセットの登録を行うメソッドを追加しました。 https://nakamura196.github.io/omeka_s_tools2/api.html#adding-item-sets まとめ 今後追加開発していく機能については、いずれ本家のリポジトリに統合できればと考えています。 また今回開発した機能の使用例について、別の記事で紹介したいと思います。 具体的には、IIIFマニフェストファイルを入力データとして、そこに含まれる画像データを本モジュールを用いてOmeka Sに機械的に登録し、さらにScriptoを用いることで、それらの画像データに対する翻刻環境を作成する、といったことが可能になります。

2022年11月7日 · 更新: 2022年11月7日 · 1 分 · Nakamura

【Omeka S モジュール紹介】Custom Vocab

概要 Omeka Sのモジュールの一つであるCustom Vocabを紹介します。 https://omeka.org/s/modules/CustomVocab 以下、公式サイトの説明文の私訳です。 カスタム語彙モジュールを使用すると、制御された語彙を作成し、それをリソーステンプレートの特定のプロパティに追加できます。アイテムにそのテンプレートを使用すると、テキスト入力ボックスではなく、制御された語彙のオプションに限定されたドロップダウンでプロパティが読み込まれます。 たとえば、キャンパス内のさまざまなコレクションに対応する機関固有の場所のリスト、または所蔵に関連する人物または場所の管理されたリストを作成することができます。これにより、タイプミスや名前のバリエーションを減らすことができ、より多くのフィールドのメタデータ参照を提供できるようになります。 使い方 カスタム語彙を作成する モジュールをインストールしてアクティブ化したら、左側のナビゲーションの[モジュール]の下にある[カスタム語彙]セクションに移動します。 ウィンドウの右上隅にある[Add a New Vocab]ボタンをクリックします。 Add Custom Vocab ページには、Label、Language、Vocab Type、Terms/Items/URI inputの4 つのフィールドがあります。 Label : リソース テンプレートに追加するときに検索に使用する語彙の名前。 言語(オプション): ISO 639-1言語コードを使用した語彙の言語。 制御された語彙用語を、入力された用語のリスト、既存の項目のリスト、またはラベル付きまたはラベルなしの外部URIのリストに設定できます。 用語: 平文の用語のリスト、1行に1つの単語またはフレーズ。これにより、プロパティがテキストとして設定されます。 アイテム: Omeka Sインストールのアイテムセットのドロップダウン。これらのいずれかを選択すると、そのアイテムセットのアイテムが入力されたカスタムボキャブが作成されます。使用すると、プロパティはテキストではなくOmeka リソースとして入力されます。 URIs : ラベル付きまたはラベルなしのURIのリスト。1行に1つのURI。ラベルを含めるには、URIの後にスペースとラベルを追加します (例: “https://youromekainstall.org/item/1119 Canada”)。使用すると、プロパティは外部リソースへのリンクとして入力されます。 「送信」をクリックして変更を保存します。 カスタム語彙の管理 少なくとも1つの語彙を作成すると、カスタム語彙モジュールタブに既存の語彙の表が表示されます。このテーブルには、ラベル、編集、削除、および情報の表示用のボタン、語彙の所有者または作成者が表示されます。 カスタム語彙を編集するときに、ラベル、言語、または用語を変更できます。 カスタム語彙の使用 カスタム語彙は、リソーステンプレートを通じて適用されます。 リソーステンプレートに移動し、新しいテンプレートを追加するか、既存のテンプレートを編集します。テンプレートを編集したら: カスタム語彙を適用するプロパティを追加します。 プロパティを編集します。 右側に開くドロワーで、[その他のオプション] セクションに移動し、[データタイプ] ドロップダウンを見つけます。 ドロップダウンをスクロールして、使用するカスタム語彙を選択します。 ドロワーの下部にある設定変更をクリックします。 必ず変更を保存してください。 リソーステンプレートのタイトルをクリックして詳細を表示すると、Custom Vocabがデータタイプテーブルの見出しに表示されます。 このリソーステンプレートがアイテムまたはアイテムセットで使用される場合、指定されたプロパティは常に、カスタムボキャブラリの値を含むドロップダウンメニューとしてロードされます。 この画像では、以前に変更されたリソーステンプレートが新しいアイテム用に読み込まれています。Spatial Coverageに「select below」メッセージと、プロパティ入力がドロップダウンメニューであることを示す矢印があることを確認します。 ...

2022年11月6日 · 更新: 2022年11月6日 · 1 分 · Nakamura

Wikidataから人物の生没年を取得する

Wikidataから人物の生没年を取得するノートブックを作成しました。 参考になりましたら幸いです。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/Wikidataから人物の生没年を取得する.ipynb

2022年10月27日 · 更新: 2022年10月27日 · 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日 · 更新: 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日 · 更新: 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日 · 更新: 2022年10月16日 · 1 分 · Nakamura

Amazon LightsailでOmeka Classicの初期設定を行うscript

Amazon LightsailでOmeka Classicの初期設定を行うscriptを作成しました。 以下の記事の「Omeka Classic版」です。 Amazon Lightsailを用いてOmeka Classicを使用する際の参考になりましたら幸いです。 # 変数 OMEKA_PATH=/home/bitnami/htdocs/omeka ## ハイフンは含めないこと DBNAME=omeka VERSION=3.0.3 ############# set -e mkdir -p $OMEKA_PATH # Omekaのダウンロード wget https://github.com/omeka/Omeka/releases/download/v$VERSION/omeka-$VERSION.zip unzip -q omeka-$VERSION.zip mv omeka-$VERSION/* $OMEKA_PATH # .htaccessの移動 mv omeka-$VERSION/.htaccess $OMEKA_PATH # 不要なフォルダの削除 rm -rf omeka-$VERSION rm omeka-$VERSION.zip # 元からあったindex.htmlを削除(もし存在すれば) if [ -e $OMEKA_PATH/index.html ]; then rm $OMEKA_PATH/index.html fi # データベースの作成 cat <<EOF > sql.cnf [client] user = root password = $(cat /home/bitnami/bitnami_application_password) host = localhost EOF mysql --defaults-extra-file=sql.cnf -e "create database $DBNAME"; # Omeka Sの設定 cat <<EOF > $OMEKA_PATH/db.ini [database] host = localhost username = root password = $(cat bitnami_application_password) dbname = $DBNAME prefix = "omeka_" charset = "utf8" EOF sudo chown -R daemon:daemon $OMEKA_PATH/files sudo apt install imagemagick -y

2022年10月13日 · 更新: 2022年10月13日 · 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日 · 更新: 2022年10月11日 · 1 分 · Nakamura

python-docxを用いた両側ルビ

python-docxを用いて、Wordで両側ルビを実現する方法の備忘録です。 以下のノートブックからお試しいただけます。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/python_docxを用いた両側ルビ.ipynb 出力例は以下です。 入力例は以下です。 <body> <p> 私は <ruby> <rb> <ruby> <rb>打</rb> <rt place="right">ダ</rt> </ruby> <ruby> <rb>球</rb> <rt place="right">キウ</rt> </ruby> 場 </rb> <rt place="left">ビリヤード</rt> </ruby> に行きました。 </p> <p> <ruby> <rb>入学試験</rb> <rt place="above">にゅうがくしけん</rt> </ruby> があります。 </p> </body> まだ不完全はプログラムではありますが、参考になりましたら幸いです。

2022年10月4日 · 更新: 2022年10月4日 · 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日 · 更新: 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日 · 更新: 2022年10月1日 · 1 分 · Nakamura