Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

自分のはてなブックマークをChatGPTにつないだ

scrapbox.io

から派生して、

blog.sushi.money

こういうことが可能だとわかった。

はてなブックマークはAtom形式でのエクスポートが可能なので、

  1. はてブにAtomを吐き出させる
  2. AtomをJSONに変換する
  3. あとは同じ

というプロセスで、自分のはてブのコメントを知っている状態のChatGPTのモデルを作ってみた。

コード

一番元々の記事ではPythonで書かれていたコードが、 id:hitode909 のコードではRubyになり、自分のコードだとScala3になっていて面白い。

#!/usr/bin/env -S scala-cli shebang -S 3

// usage: batom2json.scala.sc ~/Downloads/Windymelt.bookmarks.atom > from_bookmark/Windymelt.json
// You need to install scala-cli from https://scala-cli.virtuslab.org/install

//> using scala "3.2.2"
//> using lib "io.circe::circe-core:0.14.5"
//> using lib "io.circe::circe-literal:0.14.5"
//> using lib "io.circe::circe-parser:0.14.5"
//> using lib "org.scala-lang.modules::scala-xml:2.1.0"

val doc = scala.xml.XML.loadFile(args.head)

val elem2titleLine: scala.xml.Node => Option[(String, String)] =
  case e: scala.xml.Elem =>
    (e \ "summary").text match
      case "" => None
      case s  => Some((e \ "title").text -> s)
  case _ => None

import io.circe.literal._

val entries = (doc \\ "feed" \\ "entry")
  .map(elem2titleLine)
  .flatten
  .map { case (t, l) =>
    json"""{"title":$t, "lines":$l}"""
  }

val result = json"""{"pages": $entries}"""

println(result.noSpaces)

github.com

ScalaのXMLやJSONのライブラリはリテラルや変換処理が充実しているのが特徴で、かなり直感的に書くことができた。

ちなみにScala-CLIについては以下の記事を読めばすべてわかります。

tanishiking24.hatenablog.com

ちなみに5000ブクマくらいしていて、うちコメントしているものは3000くらいで、学習には1時間半くらいかかった。

自分は関数型プログラミング関連のブクマをたくさんしているので「モノイドの良さは」と聞いてみたが、かなり普通だった。

ANSWER:
>>>> モノイドの良さは?
> モノイドは代数的構造の一つで、演算が結合法則を満たすことが特徴です。そのため、集合の要素に演算を適用することができ、プログラミングにおいてはリストや集合などのデータ構造を扱う際に便利です。また、モノイドは並列処理にも適しており、大規模なデータ処理において高速な処理が可能と
なります。そのため、モノイドは関数型プログラミングにおいて重要な概念の一つとなっています。

とはいえ、プログラミングの話だということは前提として理解してそうなので、ある程度成功ではないか。ブックマークだとどうしても文章量が足りなすぎて、あまり上等な感じのAIにならない。元記事の内容も学習に反映させると面白そうだが、猛烈な量のアクセスが必要になってしまう。

こうした反省から、次回はTwitterのダンプをして自分のツイートを学習させようと思う。

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?