english2 / convert_last_fmt.py
yosuke-i's picture
Update convert_last_fmt.py
ab87577 verified
Raw
History Blame Contribute Delete
4.41 kB
import pandas as pd
import tempfile
import os
##### 関数定義 #####
# 問題IDから選択肢IDを作成
def create_choice_id(question_id, num):
return str(question_id) + 'CH00' + str(num)
# 問題IDから正解IDを作成
def create_correct_id(question_id, num):
return str(question_id) + 'A00' + str(num)
# 最終FMTを作成
def convert_last_fmt_question(csv_file):
input = pd.read_csv(csv_file.name)
# 問題マスタの作成
output_question = pd.DataFrame({'問題ID': [], '知識ID': [], '出題形式ID': [], 'リード文':[],'問題': [
], '問題_翻訳': [], '正解文': [], '品詞': [], '解説テキスト': [],'リスト表示':[]})
# 問題マスタに行を追加
for index, row in input.iterrows():
new_row = pd.DataFrame({'問題ID': [row['問題ID']], '知識ID': [row['知識ID']], '出題形式ID': [row['出題形式ID']], 'リード文':[row['リード文']],'問題': [
row['問題']], '問題_翻訳': [row["問題_翻訳"]], '正解文': [row['正解文']], '品詞': [""], '解説テキスト': [row["解説テキスト"]],"リスト表示":[row["リスト表示"]]})
output_question = pd.concat([output_question, new_row], ignore_index=True)
# 問題IDの昇順で並び替え
output_question.sort_values(by='問題ID', ascending=True, inplace=True)
# 問題マスタをCSVファイルに出力
with tempfile.NamedTemporaryFile(delete=False, suffix='.csv') as tmp:
output_question.to_csv(tmp.name, index=False, encoding='cp932', errors='ignore')
output_path = tmp.name
# ファイル名を変更
new_path = os.path.join(os.path.dirname(output_path), "question.csv")
os.rename(output_path, new_path)
return new_path
def convert_last_fmt_selection(csv_file):
input = pd.read_csv(csv_file.name)
# 選択肢マスタの作成
output_choice = pd.DataFrame({'選択肢ID': [], '問題ID': [], '選択肢': [], '表示順': []})
# 選択肢マスタに行を追加
for index, row in input.iterrows():
# 選択肢配列を作成
selection = row["選択肢"].split("/")
# 選択肢配列から選択肢を取り出し、行を追加
for i in range(len(selection)):
new_row = pd.DataFrame({'選択肢ID': [create_choice_id(
row['問題ID'], i+1)], '問題ID': [row['問題ID']], '選択肢': [selection[i]], '表示順': [i+1]})
output_choice = pd.concat([output_choice, new_row], ignore_index=True)
# 選択肢IDの昇順で並び替え
output_choice.sort_values(by='選択肢ID', ascending=True, inplace=True)
# 選択肢マスタをCSVファイルに出力
with tempfile.NamedTemporaryFile(delete=False, suffix='.csv') as tmp:
output_choice.to_csv(tmp.name, index=False, encoding='cp932', errors='ignore')
output_path = tmp.name
# ファイル名を変更
new_path = os.path.join(os.path.dirname(output_path), "choices.csv")
os.rename(output_path, new_path)
return new_path
def convert_last_fmt_correct(csv_file):
input = pd.read_csv(csv_file.name)
# 正解選択肢マスタの作成
output_correct_choice = pd.DataFrame(
{'正解ID': [], '問題ID': [], '正解': [], '並び順': []})
# 正解選択肢マスタに行を追加
for index, row in input.iterrows():
# 正解の配列を作成
correct = row["正解"].split("/")
# 正解の配列から正解を取り出し、行を追加
for i in range(len(correct)):
new_row = pd.DataFrame({'正解ID': [create_correct_id(
row['問題ID'], i+1)], '問題ID': [row['問題ID']], '正解': [correct[i]], '並び順': [i+1]})
output_correct_choice = pd.concat(
[output_correct_choice, new_row], ignore_index=True)
# 正解IDの昇順で並び替え
output_correct_choice.sort_values(by='正解ID', ascending=True, inplace=True)
# 選択肢マスタをCSVファイルに出力
with tempfile.NamedTemporaryFile(delete=False, suffix='.csv') as tmp:
output_correct_choice.to_csv(tmp.name, index=False, encoding='cp932', errors='ignore')
output_path = tmp.name
# ファイル名を変更
new_path = os.path.join(os.path.dirname(output_path), "correct.csv")
os.rename(output_path, new_path)
return new_path