0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

タイムスケジュール管理ツールの作成(その2)

Posted at

序論

前回と引き続き、タイムスケジュール管理ツールの作成を行っています。前回はGeminiによるスケジュールの提案を行いました。

今回は文字列処理を行っていきます!

製作段階

  1. プロンプトエンジニアリング
  2. 文字列処理 ← ここ
  3. スプレッドシート書き込み
  4. Google カレンダー登録
  5. フロントエンド構築
    1. Flaskに送信
    2. 入力欄追加
  6. バックエンド構築
    1. 1~4のプログラムの書き込み
    2. ポモドーロテクニックの適用
    3. フィードバック機能の追加

文字列処理

Geminiの返答は、1つのプロンプトで帰ってきます。1プロンプトのみではGoogleカレンダーの登録は極めて難しいです。そこで、splitを使った文字列処理を行う必要があります。

今回は前回と同じプロンプトを入力します。

  #日付#
  2024/3/22
  #決まった時間#
  ・起床時間→9:30
  ・朝の支度→9:30~10:00
  ・ノーコードミーティング→10:00~11:00
  ・昼ごはん→12:00~12:30
  ・晩御飯→19:00~19:30
  ・入浴→19:30~20:00
  ・就寝時間→23:30~翌日6:30

  #1日でやる内容#
  ・ブログ: 旅行 30分
  ・就活: 自己分析 30分
  ・開発: 日程調整作成 30分
  ・就活: インターン検索 30分
  「#1日でやる内容」を行う時間帯をを箇条書きで割り当ててください。
  例えば「- 筋トレ: リングフィット→13:30~14:00」、という感じでお願いします。

  #割り当てる時間帯#
  11:00以降

文字列処理を行うと、以下のように出力されます。

[{'task': 'ブログ: 旅行 ', 'starttime': ' 11:00', 'endtime': '11:30'},
 {'task': '就活: 自己分析 ', 'starttime': ' 11:30', 'endtime': '12:00'},
 {'task': '開発: 日程調整作成 ', 'starttime': ' 12:30', 'endtime': '13:00'},
 {'task': '就活: インターン検索 ', 'starttime': ' 13:00', 'endtime': '13:30'}]

しかし、文字列処理をしない場合は以下のように出力されます。

- ブログ: 旅行 → 11:00~11:30
- 就活: 自己分析 → 11:30~12:00
- 開発: 日程調整作成 → 12:30~13:00
- 就活: インターン検索 → 13:00~13:30

こうなると、Google Calendarの登録が難しくなりますね。こういう時に文字列処理を行います。

文字列処理の順番

  1. タスクを箇条書きに分割するために「\n」(改行)で分割
  2. 行頭文字を除去する
  3. 「→」を中心に「タスク内容,時間帯」に分割する
  4. タスク開始・終了時刻を分割する際、「~」を中心に分ける

そうすると、文字列を分割してそれぞれのカラムに入れることができます。
文字列処理のアルゴリズムは以下の通りです。

def make_schedule():
  message = suggest_schedule() #Geminiでタスク生成をする
  tasks = message.split("\n") #1.の改行を分ける
  made_schedule = [] #スケジュールを格納する
  #タスク数分配列を作る
  for task in tasks:
    task1 = task.split("- ")[-1] #2. の行頭文字を分ける。
    #0番目を指定すると菜時も出力されない
    #1または-1を指定するとタスク内容が出力される
    task2 = task1.split("") # タスク内容と時間帯を分ける
    task3 = task2[1] #時間帯を選択
    task4 = task3.split("~") #開始時刻と終了時刻を分ける
    starttime = task4[0]+""
    endtime = task4[1]+""
    #task: タスク内容, starttime: 開始時刻, endtime: 終了時刻
    made_schedule.append({"task":task2[0],"starttime":starttime,"endtime":endtime}) 
  return made_schedule

make_schedule関数は、関数内でsuggest_schedule関数(Geminiによる生成でスケジュール提案する)を呼び出して、1つのタスクの詳細を細分化することができます。

いざ、以下のように実行してみます。

tasks = make_schedule()
tasks

実行結果

[{'task': 'ブログ: 旅行', 'starttime': '11:00', 'endtime': '11:30'},
 {'task': '就活: 自己分析', 'starttime': '11:30', 'endtime': '12:00'},
 {'task': '開発: 日程調整作成', 'starttime': '12:30', 'endtime': '13:00'},
 {'task': '就活: インターン検索', 'starttime': '13:00', 'endtime': '13:30'}]

しっかり細分化ができました!次回はスプレッドシートの書き込みをします!

感想とまとめ

Geminiからの回答を簡単にまとめるには、文字列処理が必要です。文字列処理はAtcoderやPaizaでも役に立つので、アプリ開発を機にAtcoderで役に立ちました。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?