寿司屋で天ぷら(^^♪

行きつけの寿司屋で、天ぷらを注文。
きました! アツアツです。 うまか~!
 
これで 8X0円
 通常の天ぷら専門店では、 5000 ~8000 円に対して、
なんと、庶民なんでしょう (#^.^#)
 今日は、ここ数日に、お客様より難題を頂いた(解く前)ことに、自分をほめてあげたい(有森さんより)

 
出来立ては、アツアツで グッドです。

###あとがき 備忘メモ=====

・雑多なフォルダ内のPDFファイルから、特定キーワードを持つファイルを抽出してほしい!
・抽出したら、どんな単語が何回つかわれているか! (単語の素解析分析)
・生成AIをAPIで接続し、質問スクリプトをアプリで半自動選択でつくりたい!
など python ライブラリでできそうなので、万歳!!

AI 機能付きOCR

最近、流行っている AI 機能付きのOCRを目にするので、

その一つ AI JIMY について、トライアル評価した。

https://aijimy.com/

 

1 AI JIMY 概要

 ー1 利用者のライセンス登録、利用料金は全てWebで管理、(参考 tableau の契約管理と同じ)

 ー2 AI JIMY Paperbot( OCR AI + RPA) 手書き文書読み取り機能

 ー3 AI JIMY Converter Exceファイルの便利変換機能  半角全角変換、

 

2 AI JIMY Paperbot

 ① AI機能があり、 顧客名を テキストや印鑑から 読み取れる 

 ② 実行形式ファイル(.exe) のため システムのカスタマイズができない、 

     出力結果に、追加のアプリ(Excel, Python で基幹システムへ登録)が必要

 ③ 読み取り結果は PDF (元の手描きでファイル名を注文番号 + CSV(後処理用のテキスト) 1文書に1CSV

 

3 AI JIMY Paperbot ケーススタディ

 ケース: 手描き注文書  1注文シートに 複数行の注文明細

      一つの顧客から FAXで200件の注文書があり、それを一括読み さらに、200件を基幹システムに登録する ーー を想定 

 ① 注文書のkeyを 注文番号とした場合、  FAXの再送などで 注文番号が重複する ==>重複したら CSVがエラーまたは 後優先 で欠落する

  ーー CSV登録のためには 重複しないように  注文番号+日付時刻 で重複を回避する

    この場合、 CSV 200件 読み取り後に 後処理PGで、全ての注文番号の重複チェックを行い、重複は 利用者に(両方? それとも どちらか)を選択させる

 ② 200のCSVファイルを 順番に読み込んで、 1つのテキストファイル(SAPバッチインプットの入力ファイル)を作成する

  ⇒ ①②は AI JIMY の範囲外で  小職の得意とする範囲



5 AI JIMY Converter

  評価  小職は 数式+マクロで対応できるので、利用しない。



   Webから関数をコピーして Excel, Spread に数式を入れる

   例 

ChatGPT でプログラム仕様書を作ってみた。

先日の某セミナーで、「ChatGPTで元のソースコードから仕様書を作る」と聞いたので、試してみました。

素晴らしい、自分でpy作るレベルを超えてます。

 新しいことにチャレンジしてのプログラム開発は試行錯誤的にならざるをえない。

そのため、事前に設計書・仕様書は、ホボ作らない。

 かといって、コードが完成してから仕様書をわざわざ作るのはつまらない。

 

そこで ChatGPTに頼んでしまえ! という趣旨です。

目的、説明の章立てなど、上手いものですね、感心至極です。

 

なお ソースコードも、ChatGPTで作ったものです。

 

完成した仕様書 ▼=====(見栄えだけ御覧ください)=======

目的

このスクリプトは、指定されたMarkdownテキストをもとに、日報をGoogleドキュメントとして自動生成し、特定のフォルダに保存することを目的としています。Markdown形式のテキストがGoogleドキュメントに変換され、Googleカレンダーのイベント情報を基に生成されたことを注記として追加します。

機能概要

  1. 引数として渡されたMarkdownテキストを基に日報を作成する。
  2. 日報は「日報_YYYY-MM-DD」という名前でGoogleドキュメントとして生成される。
  3. 特定のメールアドレスの場合、ドキュメントは指定のGoogleドライブフォルダに移動される。
  4. 最終的に生成されたGoogleドキュメントのURLを返す。

各機能の詳細説明

1. 関数: createDailyReportWithMarkdown(markdownText)

この関数は日報を作成し、Markdown形式のテキストをGoogleドキュメントに変換します。主な手順は以下の通りです:

  • 引数: markdownText
    • この引数には、生成する日報の内容がMarkdown形式で渡されます。
    • 引数が空であれば、デフォルト値として「testAAA」が設定されます。
  • Googleカレンダーイベントの注記
    • 引数のMarkdownテキストに、Googleカレンダーの本日イベントを基に生成したことを示す注記が自動的に追加されます。
  • 日付取得およびフォーマット
    • new Date()で今日の日付を取得し、formatDate()関数を使って「YYYY-MM-DD」形式にフォーマットします。
  • Googleドキュメント作成
    • DocumentApp.create()でドキュメントが生成され、ドキュメントの本文に引数で渡されたMarkdownテキストが設定されます。
  • メールアドレスの確認
    • cmG_getEmilAdrs()関数で取得したメールアドレスが*****の場合、作成したドキュメントを特定のGoogleドライブフォルダ(ID: *******)に移動します。
  • ログ出力と結果の返却
    • 生成されたドキュメントのURLがログに出力され、最終的にそのURLが返却されます。

2. 関数: formatDate(date)

この関数は、createDailyReportWithMarkdown()で取得した日付を「YYYY-MM-DD」形式にフォーマットします。

  • 引数: date
    • Dateオブジェクトを受け取り、年、月、日を抽出します。
  • フォーマット
    • 年、月、日をそれぞれ取り出し、2桁の数値に整形してから、「YYYY-MM-DD」という形式で文字列として返します。

エラー処理

  • 引数markdownTextが未定義または空の場合、'testAAA'というデフォルトのテキストが設定されます。

想定される使い方

このスクリプトは、日報を簡単に自動生成し、指定されたGoogleドライブフォルダに保存する場合に利用されます。特にGoogleカレンダーの情報を基に自動生成される点が特徴で、日報作成の手間を省くことができます。

完成した仕様書 ▲ ここまで============

 

### ▼ 元の依頼

##以下の ##コード から、日本語の仕様書を作ってください。
仕様書とは、コード作成者以外の人がコードの内容を理解できる文書です。

##コード

function createDailyReportWithMarkdown(markdownText) {
   markdownText += '\n\n※本資料は、Googleカレンダーの本日イベントを基にChatGPTで生成しています。'
  // 今日の日付を取得し、YYYY-MM-DD形式にフォーマット
  const today = new Date();
  const formattedDate = formatDate(today);
  const documentName = `日報_${formattedDate}`;
  
  // Googleドキュメントを作成
  const doc = DocumentApp.create(documentName);
  const body = doc.getBody();
  
  // MarkdownテキストをGoogleドキュメントに貼り付け
  body.setText(markdownText);
  
  let email = cmG_getEmilAdrs()
  if(email == 'mi***@***'){
    // myFolder (name:'DayReport')へ移動する
    const myFolder = '1**********';
    let folder = DriveApp.getFolderById(myFolder);
    let fileID = doc.getId();
    let file = DriveApp.getFileById(fileID);
    file.moveTo(folder);
  }
  // GoogleドキュメントのURLをログに出力
  Logger.log('Document URL: ' + doc.getUrl());
  return 'Document URL: ' + doc.getUrl();
}

function formatDate(date) {
  const year = date.getFullYear();
  const month = (date.getMonth() + 1).toString().padStart(2, '0');
  const day = date.getDate().toString().padStart(2, '0');
  return `${year}-${month}-${day}`;
}