プログラムで記事を生成してみよう
(2025.04.08)
(2025.04.08)
マルコフ連鎖を利用してGoogleサイト内の記事(自分が書いたもの)から新しい記事を生成するwebアプリを作った。
マルコフ連鎖を応用してみたいなと思ったから。
Google Apps Script(GAS)
トップページから記事のリンクをすべて取得し、それらの内容からマルコフ連鎖で文章を生成、記事風に加工する
マルコフ連鎖を行うにあたって実装開始前に文章の分割を行うライブラリを探す必要があるわけだが(途中で変に止まりたくはない)、今回はGASで動かすという特性上、一般的な辞書を利用した形態素解析ではなく機械学習によって分割を行うTinySegmenterを使用
汎用性を考慮して、コードをGASファイルにコピーしライブラリとして使用する形にした
※形態素解析では文章を辞書などに従って分割するので、実行結果には分割された語だけでなくその意味や活用などの情報も含まれている
TinySegmenterのコード
ライブラリとしてデプロイして、
IDを見るために「プロジェクトの設定」を開く
「ID」の内容をコピー
新しいプロジェクトを作って、「ライブラリ」から先ほどのIDを入力することで作成(→デプロイ)したライブラリを追加できる(自作以外でもIDさえあれば可)
split関数に文章を渡せば分割された結果が配列で返ってくる(挙動はTinySegmenterの仕様と同様)
呼び出し
結果
元となる文章をトップページ上のリンクから取得する
片っ端からアクセスしてHTMLを取得するのだが、そのままではHTMLタグというものが入っているため記事の文章生成には向かない
そこで半角の英数字や記号(タグを構成する文字)を除去することにした(もうちょっと奇麗な抽出方法なかったのか?)
以前紹介したマルコフ連鎖文章生成プログラム の仕様やコードをもとに、GAS上での利用に適したライブラリを作成
・コード内で先ほどの分割ライブラリを呼び出して元データを用意
こちらもIDをコピーして追加可能にしておく
generate関数に元となる文章をすべて格納した配列を渡せば、生成結果が文章で返ってくる
実際のコード
呼び出し(テスト文章:『坊ちゃん』冒頭)
結果
とりあえず記事内容から一文生成してみた
上の文章(複数行)はサイト記事からの取得結果
今回生成するのはあくまで記事風の文章なので、元データをそれっぽく加工しておく必要がある
文章の間に挟まったHTMLタグの数によってデータを大まかに段落分けしてから生成することで「段落っぽい文章」を複数個用意する
見出しは毎回の実行結果からランダムに決定してタグを追加しておく
タグ付きのテキストをHTMLのテンプレートにはめ込んで、アプリに表示させれば完成!
テスト実行 いい感じ(段落ごとに表示されてる)
公開!
今回開発時に作成したライブラリのID。これを入力すればライブラリが追加できる。
TinySegmenterGAS(文章の分解)
1s61vZNBU4UIKcxtYiKmeuTpEE2Ceiai2KFOww-bTBPxSgEHFWSS3-gSq
MarcovGAS(マルコフ連鎖で文章を生成)
1WRNNxuMnQqYYIbFPQb0-0626E3l-ec0tT3iW3mcAOnRDGc8tEwsXitCy
tag:GAS,マルコフ連鎖,記事