ChatGPTとの会話データをローカルに保存し利用する方法

ブラウザーで対話データをダウンロードし、sedでローカル表示出来ないコード部を修正する

目次
0、はじめに
1、基本的な処理の考え方
2、修正用バッチプログラム
3、変換処理サンプル
4、終わりに


0、はじめに

ChatGPT の返してくる返答は非常に有益な情報ですが、あくまでNLP(自然言語処理)が蓄積データの中から、頻繁
に利用される組合せ等のデータを基に会話のための情報(フレーズ)を生成して返している事を忘れ無い事。
言い換えれば、返ってきた情報の信頼性は考慮されていないと言う事実。 #1
でも心配しないでください。人間同士が会話して分かりあえていると思っている事も、実際は相手の言っている事を
理解しているのでは無く、受け取ったデータを自分で勝手に解釈(辻褄合わせ)しているだけでなので、ChatGPTとの
対話と大きな違いはありません。 自己が勝手に独自解釈した内容でも、社会的に問題を生じない程度の揺れである
ならば実生活に於いても支障が無い("支障ですら"を認識できない)ので、平常運転で暮らしていけます。

ただ膨大なデータと、その利用組み合わせ頻度を基に算出された、データのつながり(生成された文章)は多くの
有知識者を集めて導き出した結果に近い情報(正しい間違っているは問わない)、少なくともその時代・時点でなされる
有益と考えられる結果以上になり得る。 有知識者と言ってもカバーできる情報の範囲はたかが知れており、機械の
データ記録量とは比較にならないので、優劣は論じるにも値しない。 データーマイニングの一形体とも言える。
自分の質問に対して、異常な数の有識者が集まってブレーンストーミングし、結果をまとめて報告してくれると考えば
理解しやすいのかもしれない。(地動説を信じている世界で、天動説に起因する結果を期待しても難しいでしょう)

これだけ素晴らしいデータであるにも関わらす、簡単に再利用できないのは辛いのでローカルに保存した対話データ
を好きな時に参照できる様に修正を加える事とする。

#1: ChatGPTが知らないと言った内容に対して、説明文を作成し入力すると次からChatGPTは先ほど知らないと言った
  内容に関連する質問に尤もらしい回答を作成して返してくるが、内容の信頼性は限りなく0となる場合もある。


1、基本的な処理の考え方

対話データは、ブラウザーでローカルに保存する事は出来ます。
ところが、このファイルをブラウザーで表示させようとすると、画面が真っ白になり悲しい思いをします。
スタイルシートを無効にしても、期待する表示にはならないので、確認のためhtmlのソースを見るとやり取りは
記述されているので、表示を阻害している部分を修正すれは再利用できる事が想像できます。
そこで、ストリームエディターを使ってバッチ処理で、修正する事を考えるのですがhtml ファイルは期待する
位置に改行コードが無い事が多いので、その点にも対応した処理を考える必要が生じます。

簡単に言えば、 GNU sed で -z オプション付きて使って修正作業を行ってくださいと言う事です。

Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...

  -n, --quiet, --silent
                 suppress automatic printing of pattern space
      --debug
                 annotate program execution
  -e script, --expression=script
                 add the script to the commands to be executed
  -f script-file, --file=script-file
                 add the contents of script-file to the commands to be executed
  --follow-symlinks
                 follow symlinks when processing in place
  -i[SUFFIX], --in-place[=SUFFIX]
                 edit files in place (makes backup if SUFFIX supplied)
  -b, --binary
                 open files in binary mode (CR+LFs are not processed specially)
  -l N, --line-length=N
                 specify the desired line-wrap length for the `l' command
  --posix
                 disable all GNU extensions.
  -E, -r, --regexp-extended
                 use extended regular expressions in the script
                 (for portability use POSIX -E).
  -s, --separate
                 consider files as separate rather than as a single,
                 continuous long stream.
      --sandbox
                 operate in sandbox mode (disable e/r/w commands).
  -u, --unbuffered
                 load minimal amounts of data from the input files and flush
                 the output buffers more often
  -z, --null-data
                 separate lines by NUL characters
      --help     display this help and exit
      --version  output version information and exit

If no -e, --expression, -f, or --file option is given, then the first
non-option argument is taken as the sed script to interpret.  All
remaining arguments are names of input files; if no input files are
specified, then the standard input is read.

GNU sed home page: <https://www.gnu.org/software/sed/>.
General help using GNU software: <https://www.gnu.org/gethelp/>.


2、修正用バッチプログラム

 会話htmlファイル修正 BATサンプル
@echo off
IF @%1@ == @@ GOTO USAGE
IF NOT EXIST %1 GOTO NOT_EXIST
SET OUTPUT_NAME="%~n1_extractTheDialogue%~x1"
SET OUT_PUT_NAME=temp_file

@echo on
copy /Y "%~1" %OUT_PUT_NAME%

sed -z -i -e "s/><meta \([^<]*>\)/>\n<meta \1/gi"                  %OUT_PUT_NAME%
sed -z -i -e "s/><link \([^<]*>\)/>\n<link \1/gi"                  %OUT_PUT_NAME%
sed -z -i -e "s/><style\([ >][^<]*>\)/>\n<style\1/gi"              %OUT_PUT_NAME%
sed -z -i -e "s/><html\([ >][^<]*>\)/>\n<html\1/gi"                %OUT_PUT_NAME%
sed -z -i -e "s/><head\([ >][^<]*>\)/>\n<head\1/gi"                %OUT_PUT_NAME%
sed -z -i -e "s/><body\([ >][^<]*>\)/>\n<body\1/gi"                %OUT_PUT_NAME%
sed -z -i -e "s/><\/head\([ >][^<]*>\)/>\n<\/head\1/gi"            %OUT_PUT_NAME%
sed -z -i -e "s/><\/body\([ >][^<]*>\)/>\n<\/body\1/gi"            %OUT_PUT_NAME%

sed -z -i -e "s/<meta property\=""[^>]*https:[^>]*>//gi"           %OUT_PUT_NAME%
sed -z -i -e "s/<link [^>]*href\=""https:[^>]*>//gi"               %OUT_PUT_NAME%

sed -z -i -e "s/<script[ >][^<]*<\/script>//gi"                    %OUT_PUT_NAME%
sed -z -i -e "s/<noscript[ >][^<]*<\/noscript>//gi"                %OUT_PUT_NAME%
sed -z -i -e "s/<iframe[ >][^<]*<\/iframe>//gi"                    %OUT_PUT_NAME%

sed -z -i -e "s/flex-1 overflow-hidden""/flex-1""/gi"              %OUT_PUT_NAME%
sed -z -i -e "s/<nav[ >].*<\/nav>//gi"                             %OUT_PUT_NAME%
sed -z -i -e "s/<form[ >].*<\/form>//gi"                           %OUT_PUT_NAME%

sed -z -i -e "s/<a href\=""https:\/\/[^>]*>ChatGPT [^<]*<\/a>//gi" %OUT_PUT_NAME%
sed -z -i -e "s/<span>Free Research Preview[^<]*<\/span>//gi"      %OUT_PUT_NAME%
sed -z -i -e "s/<div class\=""px-3 pb-3[^<]*<\/div>//gi"           %OUT_PUT_NAME%
sed -z -i -e "s/<div class\=""absolute bottom-0[^<]*<\/div>//gi"   %OUT_PUT_NAME%

sed -z -i -e "s/<h2[ >][^<]*<\/h2>//gi"                            %OUT_PUT_NAME%

sed -z -i -e "s/<div class\=""scrollbar-trigger[^<]*<\/div>//gi"   %OUT_PUT_NAME%
sed -z -i -e "s/<div class\=""flex h-full min-h-0[^<]*<\/div>//gi" %OUT_PUT_NAME%
sed -z -i -e "s/<div class\=""h-full w-\[260px\][^<]*<\/div>//gi"  %OUT_PUT_NAME%
sed -z -i -e "s/<div class\=""dark flex-shrink-0[^<]*<\/div>//gi"  %OUT_PUT_NAME%

sed -z -i -e "s/overflow: hidden;/overflow: visible;/gi"           %OUT_PUT_NAME%
sed -z -i -e "s/overflow-hidden/overflow-visible;/gi"              %OUT_PUT_NAME%

move /Y %OUT_PUT_NAME% %OUTPUT_NAME%

@echo off
GOTO :eof

:USAGE
@echo;
@echo;
echo USAGE: %~n0%~x0  処理対象_ChatGPT_会話ファイル
@echo;
PAUSE
GOTO :eof

:NOT_EXIST
@echo;
@echo;
echo 処理対象のファイル "%1" は存在しません。
@echo;
PAUSE
GOTO :eof
////////////////////////////////////////////////////////////////////////////////////
//// 使用にあたっての前提条件として、windows 環境では GUN の sed が使える事
//// 行単位の処理を行わず、ファイル全体を1行と見なす(終端文字は\nでは無く0)
//// この動作検証環境には、sed (GNU sed) 4.9 がインストールされている
////
c:\>sed --version 
sed (GNU sed) 4.9 
Packaged by Cygwin (4.9-1)
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later<https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Jay Fenlason, Tom Lord, Ken Pizzini,
Paolo Bonzini, Jim Meyering, and Assaf Gordon.

This sed program was built without SELinux support.

GNU sed home page: <https://www.gnu.org/software/sed/>.
General help using GNU software:<https://www.gnu.org/gethelp/>.
E-mail bug reports to: <bug-sed@gnu.org>.


4、変換処理サンプル

例1

 html上のボタンをクリックすると、ページに記載されているサンプルの部分をクリップボードに送る仕組みを
 実装してください。  回答:会話記録(プログラム付)


例2

ChatGPT に、Pythonを学習するための、参考書の目次を生成してもらった
体系だった漏れの無い構成であり、思いのほか優れている事に驚いた。
卒論や論文でも、目次(目次の意味している内容を理解している事が前提)が出来たら
50%は完了したと思っても良い。 少なくとも1つ以上、他の言語を知っているなら、
直ぐに Python を理解できると思われる。 Kindle 等で提供するのも有りだろう。
(モジュールの関係性はあるが、4.1 ファイルの読み書き には、EXCELも加えたい)


  1. イントロダクション
    1.1 Pythonの概要
    1.2 Pythonの特徴
    1.3 Pythonのインストール

  2. プログラミングの基礎
    2.1 変数とデータ型
    2.2 演算子
    2.3 制御構造
    2.4 関数

  3. Pythonのデータ構造
    3.1 リスト
    3.2 タプル
    3.3 辞書
    3.4 集合

  4. ファイル操作
    4.1 ファイルの読み書き
    4.2 CSVファイルの処理
    4.3 テキストファイルの処理

  5. エラーハンドリング
    5.1 例外の基礎
    5.2 例外処理の方法
    5.3 デバッグの基礎

  6. モジュールとパッケージ
    6.1 モジュールのインポート
    6.2 標準ライブラリの利用
    6.3 サードパーティパッケージの利用

  7. オブジェクト指向プログラミング
    7.1 クラスとオブジェクト
    7.2 継承
    7.3 ポリモーフィズム

  8. データベースの操作
    8.1 SQLとの接続
    8.2 データのクエリと更新
    8.3 データベースのトランザクション

  9. Webスクレイピング
    9.1 HTMLの解析
    9.2 データの抽出と保存
    9.3 スクレイピングの倫理と制約

 10. GUIアプリケーション開発
    10.1 Tkinterの基礎
    10.2 イベントの処理
    10.3 レイアウトとデザインの基本

 11. データの可視化
    11.1 Matplotlibの利用
    11.2 グラフのカスタマイズ
    11.3 グラフの保存と出力

 12. 応用トピック
    12.1 マルチスレッドとマルチプロセス
    12.2 ネットワーキングとソケット
    12.3 機械学習とディープラーニングの基礎



5、終わりに

世の中は、AI(人工知能:Artificial Intelligence) と騒いでいるが、画一的な定義下で話をしているのか、
甚だ疑問であるが初めにでもふれた様に、生物体の持っている記憶力・記憶量、認識力・判断力も呆れるほど
低くそれは人間でも例外でない事は認識しておいた方が良い概念だと考える。(当然、自分自身も含まれることで、
情けないやら悲しい過ぎる)
【推論】分かっていない事を推し量ること。言い換えればこれを知能と考えるので有ろうがかなりあやふやな概念
だろう。 現行のAI技術は、既存情報を分析・分解し、情報間のリレーションをベースに、未知情報の再構成を
する技術と考える。(巨大な振り分け機)

ここでは、AIを以下の様に考える
AI5.0: スパースに存在する離散データからなる意味空間に於いて、離散データの位置と距離から空間が
       ソリッドである様に振舞わせる技術
AI7.0: スパースな意味空間の特定位置に自己生成した離散データを配置し、空間全体の整合性(滑らか
       な連結性・連続性)を検討する機能及び、自己生成したデータの正当性を検証・実験する方法を
       自身で算出し、実施(既存データも含め 追加・修正・削除を含む)する能力を有する技術


   go to TopPage