yosuke-i commited on
Commit
e54ce3e
1 Parent(s): 2819a54

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +82 -0
app.py CHANGED
@@ -57,7 +57,77 @@ def create_choice_question(csv_file,input_text):
57
  os.rename(output_path, new_path)
58
  return new_path
59
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
  title = "英語生成ツール"
63
 
@@ -96,4 +166,16 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
96
  inputs=[inputs],
97
  outputs=[outputs]
98
  )
 
 
 
 
 
 
 
 
 
 
 
 
99
  demo.launch(share=True)
 
57
  os.rename(output_path, new_path)
58
  return new_path
59
 
60
+ def kousei(csv_file,input_text):
61
+ # CSVファイルを読み込む
62
+ df = pd.read_csv(csv_file.name)
63
+ # DataFrameを5行ごとに処理するためのグループ化
64
+ df['group_id'] = df.index // 5
65
+ grouped = df.groupby('group_id')
66
+
67
+ # 各グループに対してフォーマットされたプロンプトを作成
68
+ def create_prompt(group, base_prompt):
69
+ prompt = base_prompt
70
+ for _, row in group.iterrows():
71
+ prompt += f"\n[{row['id']}]\n{row['原稿']}"
72
+
73
+ return prompt
74
+
75
+ # 各グループごとのプロンプトを生成
76
+ prompts = grouped.apply(lambda g: create_prompt(g, prompt_text))
77
+
78
+
79
+
80
+ prompts = prompts.reset_index(name='prompt_after')
81
+
82
+ # 各プロンプトをAPIに送信
83
+ prompts['response'] = prompts['prompt_after'].apply(get_chatgpt_response)
84
+
85
+
86
+ # 応答を分割して元のDataFrameにマッピングする関数
87
+ def split_responses(grouped_df):
88
+ rows = [] # 結果を格納するための一時リスト
89
+
90
+ for _, row in grouped_df.iterrows():
91
+ response = row['response']
92
+ # 正規表現でIDとテキストを抽出
93
+ split_response = re.split(r'\[([A-Z0-9]+)\]\s*', response)
94
+ ids_texts = list(zip(split_response[1::2], split_response[2::2]))
95
+
96
+ for id_text in ids_texts:
97
+ problem_id = id_text[0]
98
+ correction_result = id_text[1].strip()
99
+ original_content = df.loc[df['id'] == problem_id, '原稿'].iloc[0] # 問題IDに対応する原稿を取得
100
+
101
+ # 辞書をリストに追加
102
+ rows.append({
103
+ 'id': problem_id,
104
+ 'contents': original_content,
105
+ '校正結果': correction_result
106
+ })
107
+
108
+ # 一時リストからDataFrameを生成
109
+ result_df = pd.DataFrame(rows)
110
+ return result_df
111
+
112
+
113
+ final_results = split_responses(prompts)
114
+ # ファイル出力
115
+ with tempfile.NamedTemporaryFile(delete=False, suffix='.csv') as tmp:
116
+ # cp932で保存、エラーは無視(置換しても良い)
117
+ final_results.to_csv(tmp.name, index=False, encoding='cp932', errors='ignore')
118
+ output_path = tmp.name
119
 
120
+ # ファイル名を変更
121
+ new_path = os.path.join(os.path.dirname(output_path), "output.csv")
122
+ os.rename(output_path, new_path)
123
+ return new_path
124
+
125
+
126
+ # 結果をCSVに保存
127
+ final_results.to_csv('output.csv', index=False)
128
+
129
+
130
+
131
 
132
  title = "英語生成ツール"
133
 
 
166
  inputs=[inputs],
167
  outputs=[outputs]
168
  )
169
+ with gr.Tab("校正"):
170
+ with gr.Column():
171
+ input_text_kousei = gr.Textbox(label="校正観点を入力してください。",value="'英単語習得を目的として、以下2種類の問題を用意しています。\n1.英語の正しい日本語訳を選択する4択問題\n2.日本語の正しい英語訳を選択する4択問題\n「#リスト」の誤答選択肢の中に、正解選択肢の別解になってしまっているもの、または別解とは言えないが紛らわしすぎるものがないか、探して指摘してください。")
172
+ input_text_kousei = input_text_kousei + "指摘は、全ての問題において問題がない場合も含めて、必ず全問題、[問題ID]に続けて結果を書くフォーマットで返してください。[問題ID]の後は改行しないで。(必ず[問題ID]が5つ表示されるはずです)指摘方法は、問題ない場合は「問題なし」、指摘がある場合は「問題あり」\n「問題あり」の場合、問題のある箇所を具体的に指摘してください。\n#リスト"
173
+ with gr.Row():
174
+ inputs=gr.File(label="CSVファイルをアップロード")
175
+ outputs=gr.File(label="ダウンロード", file_count="singular")
176
+ gr.Button("問題生成").click(
177
+ kousei,
178
+ inputs=[inputs,input_text_kousei],
179
+ outputs=[outputs]
180
+ )
181
  demo.launch(share=True)