0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Obsidianの関連リンクをベクトル検索諦めて全文検索で自動付与

Posted at

経緯

こちらの続きです。

  • ChatGPTログを加工して、Obsidianの拡張機能のSmart Connectionでノート同士の関連を自動で出してもらったものの、無料の学習済みモデル?でベクトル検索するのは、あまり実用的ではなさそうだった
  • 無料版のベクトル検索は進化待ち状態なので、全文検索で関連度出す

結果

graph.png

  • Obsidianのグラフにたくさん関連ついた

relate.png

  • アンパンマンのノートに関連リンクを自動付与した結果です
  • タイトルだけみると微妙な結果に見えますが、結構精度高いです。最後に詳しく書きます

やること

  • Obsidianのノートをelasticsearchに投入する用のjsonに変換する
  • elasticsearchにたくさんmore_like_thisクエリを送る
  • more_like_thisクエリの結果をつけてObsidianノートにもどす

環境

  • Windows 11
  • Obsidian
  • Docker Desktop
  • python 3.11 

Obsidianのノートをelasticsearchに投入する用のjsonに変換する

  • 自前ツールつかいます。Obsidianの非公認プラグインです

  • {valutディレクトリ}.obsidian\plugins\obsidian-md2json ここにmain.jsとmanifest.jsonを配置します

  • Obsidianの設定画面→コミュニティプラグインより、Markdown to Json を有効にします
    cfg.png

  • Obsidianを再起動します

  • 次のコマンドを実行すると、valutにある全てのマークダウンを対象に処理しますので気を付けてください

  • CTL + P でコマンドパレットを開き、Markdown to JSON : Convert all files to JSON を実行します

  • cmd.png

  • 出力が終わるのを待ちます 終わったら右上のほうにConvertedと出ます

jsonout.png

  • json-output に変換したファイルがでてきます
  • CTL + P でコマンドパレットを開き、Markdown to JSON : Create Elasticsearch bulk file を実行します
    blk.png
  • bulk-json-output に変換したファイルがでてきます

elasticsearchをdockerで立ち上げる

dke.png

  • Docker desktop を立ち上げ、elasticsearchと検索して一番上にでてくるイメージを取得します
    9200.png
  • Imageからelasticsearchを起動します。起動オプションでコンテナの9200とホスト9200のポートマッピングが必須です

image.png

  • ContainerのLogsから起動確認します
bin/elasticsearch-reset-password -u elastic -i
  • ContainerのExecからパスワード設定します。パスワードはelasticにします
curl -u elastic:elastic -k -X GET "https://localhost:9200"
  • ホストのコマンドラインからこのコマンドが成功するか確認します
for %f in (*.json) do curl -u elastic:elastic -k -X POST "https://localhost:9200/_bulk" -H "Content-Type: application/x-ndjson" --data-binary @%f
  • bulk-json-outputでコマンドプロンプトを立ち上げこのコマンドを実行します

elasticsearchにたくさんmore_like_thisクエリを送る

  • 自前ツールつかいます

pip install requests
  • 依存ライブラリインストールです
python elasticsearch_relate_calc.py
  • elasitcsearchにmore_like_thisクエリを送り、結果をrelated_linkとしてelasitcsearchに保存するスクリプトです
python es_to_markdown.py
  • elasitcsearchのデータからObsidian用マークダウンを作ります。実行場所にobsidian_notesというディレクトリを作成、配下にファイル出力します。related_linkがObsidianのリンクになります

  • つくったファイルをObsidianのvaultに配置します

感想

  • アンパンマンで"幼児"というキーワードをつかっているので、子供に関するノートがヒットしているようです
  • 他のノートで"幼児"というキーワードを直接使用しているわけではないのですが、特にチューニングしなくてもシノニムにちゃんと反応しました
  • ディズニーは"子供"というキーワードつかってたのでたぶんそのせい
  • スターウォーズはアナキンが少年のころみたいな解説があったのでたぶんそのせい
  • 山本太郎はタイトルと関係なく幼稚園の話題で子供というキーワードつかってたのでたぶんそのせい
  • アンパンマンのノートでタイトルと関係ない離婚について話しているので、それ系記事がリンクになっているようです
  • 関係ないけどアナキンでぐぐるとダースベイダーがでてきてひどい。シノニムになっているのかな
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?