yosuke-i commited on
Commit
202bff1
·
verified ·
1 Parent(s): 7180f50

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -26
app.py CHANGED
@@ -10,11 +10,16 @@ from chatgpt_api import get_chatgpt_response
10
  from select_question import create_choice_question
11
  from manuscript_conversion import manuscript_conversion
12
 
13
- def kousei(csv_file,input_text):
 
 
 
14
 
15
- prompt_text =input_text + "指摘は、全ての問題において問題がない場合も含めて、必ず全問題、[問題ID]に続けて結果を書くフォーマットで返してください。[問題ID]の後は改行しないで。(必ず[問題ID]が5つ表示されるはずです)指摘方法は、問題ない場合は「問題なし」、指摘がある場合は「問題あり」\n「問題あり」の場合、問題のある箇所を具体的に指摘してください。\n#リスト"
 
 
16
  # CSVファイルを読み込む
17
- df = pd.read_csv(csv_file.name)
18
  # DataFrameを5行ごとに処理するためのグループ化
19
  df['group_id'] = df.index // 5
20
  grouped = df.groupby('group_id')
@@ -24,51 +29,39 @@ def kousei(csv_file,input_text):
24
  prompt = base_prompt
25
  for _, row in group.iterrows():
26
  prompt += f"\n[{row['id']}]\n{row['原稿']}"
27
-
28
  return prompt
29
 
30
  # 各グループごとのプロンプトを生成
31
  prompts = grouped.apply(lambda g: create_prompt(g, prompt_text))
32
-
33
-
34
-
35
  prompts = prompts.reset_index(name='prompt_after')
36
 
37
  # 各プロンプトをAPIに送信
38
  prompts['response'] = prompts['prompt_after'].apply(get_chatgpt_response)
39
-
40
-
41
  # 応答を分割して元のDataFrameにマッピングする関数
42
  def split_responses(grouped_df):
43
- rows = [] # 結果を格納するための一時リスト
44
-
45
  for _, row in grouped_df.iterrows():
46
  response = row['response']
47
- # 正規表現でIDとテキストを抽出
48
  split_response = re.split(r'\[([A-Z0-9]+)\]\s*', response)
49
  ids_texts = list(zip(split_response[1::2], split_response[2::2]))
50
-
51
  for id_text in ids_texts:
52
- problem_id = id_text[0]
53
- correction_result = id_text[1].strip()
54
- original_content = df.loc[df['id'] == problem_id, '原稿'].iloc[0] # 問題IDに対応する原稿を取得
55
-
56
- # 辞書をリストに追加
57
  rows.append({
58
  'id': problem_id,
59
  'contents': original_content,
60
- '校正結果': correction_result
61
  })
62
-
63
- # 一時リストからDataFrameを生成
64
- result_df = pd.DataFrame(rows)
65
- return result_df
66
-
67
 
68
  final_results = split_responses(prompts)
69
- # ファイル出力
 
70
  with tempfile.NamedTemporaryFile(delete=False, suffix='.csv') as tmp:
71
- # cp932で保存、エラーは無視(置換しても良い)
72
  final_results.to_csv(tmp.name, index=False, encoding='cp932', errors='ignore')
73
  output_path = tmp.name
74
 
@@ -79,6 +72,7 @@ def kousei(csv_file,input_text):
79
 
80
 
81
 
 
82
  title = "英語生成ツール"
83
 
84
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
 
10
  from select_question import create_choice_question
11
  from manuscript_conversion import manuscript_conversion
12
 
13
+ import pandas as pd
14
+ import tempfile
15
+ import os
16
+ import re
17
 
18
+ def kousei(csv_file, input_text):
19
+ prompt_text = input_text + "指摘は、全ての問題において問題がない場合も含めて、必ず全問題、[問題ID]に続けて結果を書くフォーマットで返してください。[問題ID]の後は改行しないで。(必ず[問題ID]が5つ表示されるはずです)指摘方法は、問題ない場合は「問題なし」、指摘がある場合は「問題あり」\n「問題あり」の場合、問題のある箇所を具体的に指摘してください。\n#リスト"
20
+
21
  # CSVファイルを読み込む
22
+ df = pd.read_csv(csv_file)
23
  # DataFrameを5行ごとに処理するためのグループ化
24
  df['group_id'] = df.index // 5
25
  grouped = df.groupby('group_id')
 
29
  prompt = base_prompt
30
  for _, row in group.iterrows():
31
  prompt += f"\n[{row['id']}]\n{row['原稿']}"
 
32
  return prompt
33
 
34
  # 各グループごとのプロンプトを生成
35
  prompts = grouped.apply(lambda g: create_prompt(g, prompt_text))
 
 
 
36
  prompts = prompts.reset_index(name='prompt_after')
37
 
38
  # 各プロンプトをAPIに送信
39
  prompts['response'] = prompts['prompt_after'].apply(get_chatgpt_response)
40
+
 
41
  # 応答を分割して元のDataFrameにマッピングする関数
42
  def split_responses(grouped_df):
43
+ rows = []
 
44
  for _, row in grouped_df.iterrows():
45
  response = row['response']
 
46
  split_response = re.split(r'\[([A-Z0-9]+)\]\s*', response)
47
  ids_texts = list(zip(split_response[1::2], split_response[2::2]))
48
+
49
  for id_text in ids_texts:
50
+ problem_id, correction_result = id_text
51
+ # DataFrameのサブセットを安全に取得
52
+ original_content = df[df['id'] == problem_id]['原稿'].iloc[0] if not df[df['id'] == problem_id].empty else "原稿が見つかりません"
 
 
53
  rows.append({
54
  'id': problem_id,
55
  'contents': original_content,
56
+ '校正結果': correction_result.strip()
57
  })
58
+
59
+ return pd.DataFrame(rows)
 
 
 
60
 
61
  final_results = split_responses(prompts)
62
+
63
+ # ファイル出力
64
  with tempfile.NamedTemporaryFile(delete=False, suffix='.csv') as tmp:
 
65
  final_results.to_csv(tmp.name, index=False, encoding='cp932', errors='ignore')
66
  output_path = tmp.name
67
 
 
72
 
73
 
74
 
75
+
76
  title = "英語生成ツール"
77
 
78
  with gr.Blocks(theme=gr.themes.Soft()) as demo: