1106 lines
52 KiB
Python
1106 lines
52 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
P4 短对话选择题批量改写脚本
|
||
将 3 人对话改为 2 人对话,重写题目
|
||
"""
|
||
import json, subprocess, os, sys, time
|
||
|
||
APP_TOKEN = "CMHSbUUjka3TrUsaxxEc297ongf"
|
||
TABLE_ID = "tblVmeDtBDKsAEfz"
|
||
BASE_DIR = os.path.expanduser("~/.openclaw/workspace-xiaoyan")
|
||
OPERATE_SCRIPT = os.path.join(BASE_DIR, "skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh")
|
||
|
||
def run_operate(action, *args):
|
||
"""Run the operate_bitable.sh script"""
|
||
cmd = ["bash", OPERATE_SCRIPT, action, APP_TOKEN, TABLE_ID] + list(args)
|
||
result = subprocess.run(cmd, capture_output=True, text=True)
|
||
return json.loads(result.stdout)
|
||
|
||
def get_records():
|
||
"""Get all records"""
|
||
result = run_operate("list_records", "50")
|
||
return result.get("data", {}).get("items", [])
|
||
|
||
def update_record(record_id, fields_json_str):
|
||
"""Update a record"""
|
||
result = run_operate("update_record", record_id, fields_json_str)
|
||
return result
|
||
|
||
def safe_json(s):
|
||
"""Safely dump JSON"""
|
||
return json.dumps(s, ensure_ascii=False)
|
||
|
||
def make_qs(question_desc, audio_file, question_text, options, answer_idx, ability_list, explanation_cn):
|
||
"""Create a question set item"""
|
||
return {
|
||
"questionDesc": question_desc,
|
||
"questionAudio": audio_file,
|
||
"question": question_text,
|
||
"options": options,
|
||
"answer": [answer_idx],
|
||
"ability": ability_list,
|
||
"explanation": explanation_cn
|
||
}
|
||
|
||
def make_block(qsid, questions):
|
||
"""Create a first/second block"""
|
||
return {
|
||
"category": "listening",
|
||
"type": "listening_choiceShort",
|
||
"questionSetID": qsid,
|
||
"questionSet": questions
|
||
}
|
||
|
||
def make_q1_text(questions):
|
||
"""Generate 题目1 text from question list"""
|
||
lines = []
|
||
for i, q in enumerate(questions, 1):
|
||
lines.append(f"{i}.")
|
||
lines.append(f"【描述】{q['questionDesc']}")
|
||
lines.append(f"【听力文本】")
|
||
if 'dialogue' in q:
|
||
lines.append(q['dialogue'])
|
||
lines.append(f"【题目】")
|
||
lines.append(q['question'])
|
||
for j, opt in enumerate(q['options']):
|
||
marker = "(正确)" if j == q['answer'][0] else ""
|
||
lines.append(f"{chr(65+j)}. {opt}{marker}")
|
||
lines.append("")
|
||
return "\n".join(lines)
|
||
|
||
# ============================================================
|
||
# 021301 - 邻居话题 (neighbour/beard/actor/brave)
|
||
# first: 5 Qs | second: 5 Qs
|
||
# ============================================================
|
||
QSID_021301_FIRST = [
|
||
make_qs(
|
||
"You will hear two people talking about their neighbours.",
|
||
"021301-00.mp3",
|
||
"Whose neighbour has a real beard?",
|
||
["Ben's neighbour", "Lucy's neighbour", "Daisy's neighbour"],
|
||
0,
|
||
["显性事实理解|关键词识别"],
|
||
"Ben说'My neighbour has a long, real beard',明确提到他的邻居有真胡子,Daisy未出现在对话中,是干扰项。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people describing someone they know.",
|
||
"021301-01.mp3",
|
||
"What does Ben say about the actor?",
|
||
["He has a fake beard", "He looks different at home", "He does his own stunts"],
|
||
2,
|
||
["听力细节理解"],
|
||
"Ben说'He does his own stunts. He is a real professional.',说明这位演员自己做特技动作。选项C为正确答案。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about someone in their area.",
|
||
"021301-02.mp3",
|
||
"Whose neighbour has a beard that changes how he looks?",
|
||
["Lucy's neighbour", "Johnny's neighbour", "Daisy's neighbour"],
|
||
1,
|
||
["显性事实理解|关键词识别"],
|
||
"Johnny说'My neighbour has a long, real beard. It makes him look quite different.',胡子改变了他的样子。Daisy不在对话中,是干扰项。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people sharing stories.",
|
||
"021301-03.mp3",
|
||
"What does Lucy say about her neighbour?",
|
||
["He is kind and helpful", "He looks different at home", "He was brave like a hero"],
|
||
2,
|
||
["听力细节理解"],
|
||
"Lucy说'My neighbour did something brave last week. He was like a hero.',她的邻居做了勇敢的事。选项C为正确答案。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people giving their opinions.",
|
||
"021301-04.mp3",
|
||
"What does Lucy think about beards for actors?",
|
||
["A real beard looks more authentic", "A fake beard is better on stage", "Beards are not important for actors"],
|
||
0,
|
||
["听力细节理解"],
|
||
"Lucy说'I think a real beard suits an actor if the role needs it. It looks more authentic.',她认为真胡子让演员看起来更真实。"
|
||
),
|
||
]
|
||
|
||
# Dialogues for 021301 first
|
||
QSID_021301_FIRST_DIALOGUES = [
|
||
"""Ben: Hi, Lucy. My neighbour is an actor. He has a long, real beard.
|
||
Lucy: That's interesting, Ben. My neighbour is very brave. He once helped a child in our street.""",
|
||
"""Ben: I know a brave actor. He does his own stunts. He is a real professional.
|
||
Lucy: Wow, Ben. My neighbour is an actor too. But he looks very different at home, without his costume.""",
|
||
"""Johnny: There's a new neighbour on our street. He's an actor and seems very brave.
|
||
Lucy: My neighbour has a long, real beard. It makes him look quite different, Johnny.""",
|
||
"""Lucy: My neighbour did something brave last week. He was like a hero.
|
||
Johnny: That's amazing, Lucy. The actor in that play had a fake beard, but my neighbour's beard is real.""",
|
||
"""Lucy: I think a real beard suits an actor if the role needs it. It looks more authentic.
|
||
Johnny: That's a good point, Lucy. A brave person and a good neighbour can be very different things.""",
|
||
]
|
||
|
||
for i, d in enumerate(QSID_021301_FIRST_DIALOGUES):
|
||
QSID_021301_FIRST[i]["dialogue"] = d
|
||
|
||
QSID_021301_FIRST_BLOCK = make_block("021301", QSID_021301_FIRST)
|
||
|
||
QSID_021301_SECOND = [
|
||
make_qs(
|
||
"You will hear two people talking about what they did yesterday.",
|
||
"021301-05.mp3",
|
||
"What did Ben do yesterday?",
|
||
["Tidied his room", "Looked for his keys", "Fixed a bike"],
|
||
0,
|
||
["显性事实理解|关键词识别"],
|
||
"Ben说'I needed to tidy my room. It took a long time.',他昨天整理了房间。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about their weekend plans.",
|
||
"021301-06.mp3",
|
||
"Whose plan is to go to the library?",
|
||
["Otis's plan", "Daisy's plan", "Ben's plan"],
|
||
1,
|
||
["显性事实理解|关键词识别"],
|
||
"Daisy说'I want to find a new book to read. I'll go to the library.',她的计划是去图书馆找书。Otis提到了等cousin,但Daisy提到了library。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about a problem they had.",
|
||
"021301-07.mp3",
|
||
"What does Johnny say was his problem?",
|
||
["He didn't have the right instruction", "He lost his phone", "He waited a long time for a bus"],
|
||
0,
|
||
["听力细节理解"],
|
||
"Johnny说'I tried to cut some paper, but I didn't have the right instruction. It was messy.',他没有正确的操作说明。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about what they are doing now.",
|
||
"021301-08.mp3",
|
||
"What is Lucy doing at the moment?",
|
||
["Fixing a shelf", "Helping her brother look for glasses", "Tidying papers"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Lucy说'I'm helping my brother look for his glasses. They are missing.',她正在帮弟弟找眼镜。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people giving advice.",
|
||
"021301-09.mp3",
|
||
"What advice does Lucy give?",
|
||
["Always read the instruction first", "Book the hotel early online", "Ask someone for help if you're lost"],
|
||
2,
|
||
["听力细节理解"],
|
||
"Lucy说'If you can't find your way, don't wait. Ask someone for help.',她建议迷路时主动问路。"
|
||
),
|
||
]
|
||
|
||
QSID_021301_SECOND_DIALOGUES = [
|
||
"""Ben: Hi, Lucy. Yesterday I needed to tidy my room. It took a long time.
|
||
Lucy: Oh, Ben. I had to look for my keys. I couldn't find them anywhere for a while.""",
|
||
"""Daisy: My plan is to wait for my cousin to arrive. He's coming by train.
|
||
Ben: That sounds nice, Daisy. I want to find a new book to read. I'll go to the library.""",
|
||
"""Johnny: I tried to cut some paper, but I didn't have the right instruction. It was messy.
|
||
Lucy: That's too bad, Johnny. I was looking for my phone to call for help, but I couldn't find it.""",
|
||
"""Lucy: I'm helping my brother look for his glasses. They are missing.
|
||
Ben: Good luck, Lucy. I'm trying to fix this shelf. I hope I can do it.""",
|
||
"""Lucy: If you can't find your way, don't wait. Ask someone for help.
|
||
Johnny: That's good advice, Lucy. When you plan a trip, remember to look for the hotel online early.""",
|
||
]
|
||
|
||
for i, d in enumerate(QSID_021301_SECOND_DIALOGUES):
|
||
QSID_021301_SECOND[i]["dialogue"] = d
|
||
|
||
QSID_021301_SECOND_BLOCK = make_block("021301", QSID_021301_SECOND)
|
||
|
||
# ============================================================
|
||
# 021401 - 日常话题 (newspaper/plan/backpack/repair/seat)
|
||
# first: 5 Qs | second: 5 Qs
|
||
# ============================================================
|
||
QSID_021401_FIRST = [
|
||
make_qs(
|
||
"You will hear two people talking about their morning routine.",
|
||
"021401-00.mp3",
|
||
"What does Ben talk about doing in the morning?",
|
||
["Reading the newspaper", "Making a daily plan", "Fixing something"],
|
||
0,
|
||
["显性事实理解|关键词识别"],
|
||
"Ben说'I always read the newspaper at breakfast.',他每天早上看报纸,而Daisy说的是修背包。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about a recent trip.",
|
||
"021401-01.mp3",
|
||
"Whose seat needed fixing on the bus?",
|
||
["Otis's seat", "Smith's seat", "Johnny's seat"],
|
||
2,
|
||
["显性事实理解|关键词识别"],
|
||
"Johnny说'I had to repair a broken seat on the bus!',他在公交车上修了座位。Otis和Smith提到了其他事情。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people describing what they are carrying.",
|
||
"021401-02.mp3",
|
||
"What does Lucy need to do with her bag?",
|
||
["Read it on the train", "Repair the zip", "Find a quiet seat for it"],
|
||
1,
|
||
["显性事实理解|关键词识别"],
|
||
"Lucy说'I need to repair this old backpack. The zip is broken.',她的背包拉链坏了需要修理。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about their weekend.",
|
||
"021401-03.mp3",
|
||
"What does Ben plan to do this weekend?",
|
||
["Buy a new backpack for hiking", "Read the newspaper at home", "Fix the garden seat"],
|
||
2,
|
||
["听力细节理解"],
|
||
"Ben说'I'm going to repair the garden seat.',他打算修理花园椅子。选项C为正确答案。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people in a waiting room.",
|
||
"021401-04.mp3",
|
||
"What delayed Lucy this morning?",
|
||
["She forgot her newspaper", "Her backpack strap broke", "She couldn't find a seat"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Lucy说'my backpack strap broke and I had to repair it.',背包带断了所以迟到了。"
|
||
),
|
||
]
|
||
|
||
QSID_021401_FIRST_DIALOGUES = [
|
||
"""Ben: Hi, Lucy. I always read the newspaper at breakfast. It's a good way to start the day.
|
||
Lucy: That's nice, Ben. I plan my day while I eat. I write a list of things to do.""",
|
||
"""Johnny: My plan was to relax on the trip, but I had to repair a broken seat on the bus!
|
||
Otis: Oh no, Johnny! I bought a new backpack for the trip. My old one was too small.""",
|
||
"""Lucy: I need to repair this old backpack. The zip is broken.
|
||
Ben: Oh dear, Lucy. My plan is to find a quiet seat and finish my book.""",
|
||
"""Ben: I'm going to repair the garden seat this weekend. It's been wobbly for weeks.
|
||
Lucy: Good idea, Ben. My plan is to stay home and read the Sunday newspaper.""",
|
||
"""Lucy: Sorry I'm late. My backpack strap broke and I had to repair it.
|
||
Ben: No worries, Lucy. I wish I had a newspaper to read while waiting. This is so boring.""",
|
||
]
|
||
|
||
for i, d in enumerate(QSID_021401_FIRST_DIALOGUES):
|
||
QSID_021401_FIRST[i]["dialogue"] = d
|
||
|
||
QSID_021401_FIRST_BLOCK = make_block("021401", QSID_021401_FIRST)
|
||
|
||
QSID_021401_SECOND = [
|
||
make_qs(
|
||
"You will hear two people talking about what they did yesterday.",
|
||
"021401-05.mp3",
|
||
"Whose plan was to prepare for next week's trip?",
|
||
["Ben's plan to prepare for next week's trip", "Skylar's plan to fix the backpack", "Lucy's plan to read in the park"],
|
||
0,
|
||
["显性事实理解|关键词识别"],
|
||
"Ben说'I had to plan my trip for next week.',他在为下周旅行做准备。选项A为正确答案。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about things they need.",
|
||
"021401-06.mp3",
|
||
"What does Lucy say she needs to do?",
|
||
["Repair a broken seat", "Buy a new backpack for school", "Plan a weekend visit"],
|
||
0,
|
||
["听力细节理解"],
|
||
"Lucy说'I should repair this seat.',她需要修椅子。选项A为正确答案。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about where they are.",
|
||
"021401-07.mp3",
|
||
"Where is Ben most likely?",
|
||
["At a bus stop", "In a repair shop", "At home or in a park"],
|
||
2,
|
||
["听力细节理解"],
|
||
"Ben说'I've put my backpack on this seat and I'm looking for my plan.',他在公园或家里的座位上整理计划。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about their problems.",
|
||
"021401-08.mp3",
|
||
"What problem does Ben describe?",
|
||
["He can't read the newspaper without glasses", "He forgot his backpack with the map", "His newspaper got wet on the seat"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Ben说'My plan failed because I forgot my backpack with the map.',他忘了带装地图的背包。选项B为正确答案。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people giving advice.",
|
||
"021401-09.mp3",
|
||
"What does Ben advise about backpacks?",
|
||
["Always plan your day first", "Don't put heavy books in a cheap backpack", "Use a newspaper to sit on a dirty seat"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Ben说'Don't put heavy books in a cheap backpack; it might break.',他建议不要把重书放进便宜的背包。"
|
||
),
|
||
]
|
||
|
||
QSID_021401_SECOND_DIALOGUES = [
|
||
"""Ben: Hi, Lucy. I had to plan my trip for next week. I looked at a map and wrote a list.
|
||
Lucy: That sounds organised, Ben. I tried to repair my old backpack. It had a hole, but I fixed it.""",
|
||
"""Lucy: I should repair this seat. It's broken and uncomfortable.
|
||
Ben: Oh, Lucy. I need a new backpack for school. My old one is too small.""",
|
||
"""Ben: I've put my backpack on this seat and I'm looking for my plan.
|
||
Lucy: That looks relaxing, Ben. I'm sitting on a comfortable seat over here, planning my holiday.""",
|
||
"""Ben: My plan failed because I forgot my backpack with the map.
|
||
Lucy: That's bad luck, Ben. I can't read the newspaper. I need to repair my glasses first.""",
|
||
"""Ben: Don't put heavy books in a cheap backpack; it might break.
|
||
Lucy: That's good advice, Ben. You should also always plan your day. It helps a lot.""",
|
||
]
|
||
|
||
for i, d in enumerate(QSID_021401_SECOND_DIALOGUES):
|
||
QSID_021401_SECOND[i]["dialogue"] = d
|
||
|
||
QSID_021401_SECOND_BLOCK = make_block("021401", QSID_021401_SECOND)
|
||
|
||
# ============================================================
|
||
# 021501 - 访客话题 (visitor/clever/serious/mad/sorry/welcome/laugh)
|
||
# first: 5 Qs | second: 5 Qs
|
||
# ============================================================
|
||
QSID_021501_FIRST = [
|
||
make_qs(
|
||
"You will hear two people talking about a recent visitor.",
|
||
"021501-00.mp3",
|
||
"Which speaker felt annoyed at first?",
|
||
["Ben", "Lucy", "Daisy"],
|
||
1,
|
||
["显性事实理解|关键词识别"],
|
||
"Lucy说'I was a bit mad at first because my visitor arrived late, but in the end, I was happy to welcome him.',她起初生气但后来很开心。Daisy不在对话中,是干扰项。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about inviting someone.",
|
||
"021501-01.mp3",
|
||
"What does Ben say about inviting more guests?",
|
||
["He wants to invite his cousin", "He feels sorry about the party", "He can't invite any more because the house is full"],
|
||
2,
|
||
["听力细节理解"],
|
||
"Ben说'I'm sorry, but we can't invite any more guests. The house is full.',房子满了无法邀请更多客人。选项C为正确答案。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people describing a guest.",
|
||
"021501-02.mp3",
|
||
"Whose guest seemed serious at first but later became friendly?",
|
||
["Smith's guest changed from serious to friendly", "Lucy's guest told clever stories", "Ben's guest was serious and quiet"],
|
||
0,
|
||
["显性事实理解|关键词识别"],
|
||
"对话中Smith说'The visitor seemed very serious at first, but later he was very friendly.',是Smith的客人性格变化。选项A为正确答案。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about a party.",
|
||
"021501-03.mp3",
|
||
"What did Ben forget to do for his party?",
|
||
["He forgot to prepare enough food", "He forgot to invite one friend", "He forgot to welcome a guest"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Ben说'I was mad because I forgot to invite one friend. I said sorry to her later.',他忘邀请一位朋友。选项B为正确答案。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about their feelings.",
|
||
"021501-04.mp3",
|
||
"What does Lucy say about making up with a friend?",
|
||
["She feels sorry for a serious-looking guest", "She thinks it's clever to welcome all visitors", "She's not mad anymore after saying sorry"],
|
||
2,
|
||
["听力细节理解"],
|
||
"Lucy说'I'm not mad anymore. I said sorry, and now my friend is welcome to visit.',道歉后两人和好了。选项C为正确答案。"
|
||
),
|
||
]
|
||
|
||
QSID_021501_FIRST_DIALOGUES = [
|
||
"""Ben: Hi, Lucy. We had a visitor last week. He was clever, but he was also quite serious.
|
||
Lucy: Oh, Ben. My guest made me laugh a lot. I'm sorry he had to leave so soon.""",
|
||
"""Ben: I'm sorry, but we can't invite any more guests. The house is full.
|
||
Lucy: That's okay, Ben. I want to invite my cousin. He's very clever and always makes us laugh.""",
|
||
"""Smith: The visitor seemed very serious at first, but later he was very friendly.
|
||
Lucy: That's nice, Smith. Our guest was so clever. He told funny stories that made everyone laugh.""",
|
||
"""Ben: I was mad because I forgot to invite one friend. I said sorry to her later.
|
||
Lucy: Oh dear, Ben. Every guest was welcome at my party. It was great to hear them all laugh together.""",
|
||
"""Lucy: I'm not mad anymore. I said sorry, and now my friend is welcome to visit.
|
||
Ben: That's good, Lucy. I feel sorry for our guest. He looked serious and didn't laugh much.""",
|
||
]
|
||
|
||
for i, d in enumerate(QSID_021501_FIRST_DIALOGUES):
|
||
QSID_021501_FIRST[i]["dialogue"] = d
|
||
|
||
QSID_021501_FIRST_BLOCK = make_block("021501", QSID_021501_FIRST)
|
||
|
||
QSID_021501_SECOND = [
|
||
make_qs(
|
||
"You will hear two people talking about something they did at school.",
|
||
"021501-05.mp3",
|
||
"Who will try to be more careful next time?",
|
||
["Ben", "Lucy", "Skylar"],
|
||
0,
|
||
["显性事实理解|关键词识别"],
|
||
"Ben说'I'll be more careful next time.',他说下次会更仔细。Skylar不在对话中,是干扰项。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about learning something new.",
|
||
"021501-06.mp3",
|
||
"Whose book had a printing error?",
|
||
["Daisy's book", "Otis's book", "Ben's book"],
|
||
1,
|
||
["显性事实理解|关键词识别"],
|
||
"Otis说'I noticed a mistake in the book. The reason was a printing error.',Ben在对话中提到了学画,Otis发现了印刷错误。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about their plans.",
|
||
"021501-07.mp3",
|
||
"What does Ben want to do in the future?",
|
||
["Write a story because he loves reading", "Work with new technology", "Read instructions more carefully"],
|
||
0,
|
||
["听力细节理解"],
|
||
"Ben说'I want to write a story. The reason is I love reading.',他的计划是写故事。选项A为正确答案。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people giving advice.",
|
||
"021501-08.mp3",
|
||
"What does Lucy say about copying?",
|
||
["Always read the instruction before starting", "Be careful with new technology", "If you copy someone's work, you won't learn"],
|
||
2,
|
||
["听力细节理解"],
|
||
"Lucy说'If you copy someone's work, you won't learn.',抄袭不能帮助学习。选项C为正确答案。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about a problem they solved.",
|
||
"021501-09.mp3",
|
||
"How did Ben find his mistake?",
|
||
["He copied the text carefully again", "He used a computer program", "He asked the teacher for clear instruction"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Ben说'I used a computer program to work out a difficult sum. The technology found my mistake.',他用电脑程序发现了错误。选项B为正确答案。"
|
||
),
|
||
]
|
||
|
||
QSID_021501_SECOND_DIALOGUES = [
|
||
"""Ben: Hi, Lucy. I made a mistake in my maths homework. I didn't read the instruction carefully. I'll be more careful next time.
|
||
Lucy: I understand, Ben. I didn't notice the reason for the new classroom rule. I just copied it from the board. I should ask the teacher in the future.""",
|
||
"""Otis: I noticed a mistake in the book. The reason was a printing error. I'll tell the teacher about it in the future.
|
||
Ben: Good catch, Otis. I followed the instruction carefully to use the new app. I didn't want to make a mistake. It worked out well!""",
|
||
"""Ben: I want to write a story. The reason is I love reading. I'll copy the style of my favourite author, but I won't make the same mistake he did.
|
||
Lucy: That's a great plan, Ben. My plan for the future is to work with new technology. I need to be careful and study hard to make it work out.""",
|
||
"""Lucy: If you copy someone's work, you won't learn. The reason is you need to work out problems yourself to understand.
|
||
Ben: That's so true, Lucy. Always read the instruction before you start. That's the best way to avoid a mistake.""",
|
||
"""Ben: I used a computer program to work out a difficult sum. The technology found my mistake. I was more careful after that.
|
||
Lucy: That's clever, Ben. I had to copy a long text. I did it carefully to avoid any mistake. It took time, but it worked out in the end.""",
|
||
]
|
||
|
||
for i, d in enumerate(QSID_021501_SECOND_DIALOGUES):
|
||
QSID_021501_SECOND[i]["dialogue"] = d
|
||
|
||
QSID_021501_SECOND_BLOCK = make_block("021501", QSID_021501_SECOND)
|
||
|
||
# ============================================================
|
||
# 021601 - 体验话题 (strange/quiet/noisy/heavy/fresh/drop)
|
||
# first: 5 Qs | second: empty
|
||
# ============================================================
|
||
QSID_021601_FIRST = [
|
||
make_qs(
|
||
"You will hear two people talking about their morning.",
|
||
"021601-00.mp3",
|
||
"Who had a strange experience this morning?",
|
||
["Ben", "Lucy", "Skylar"],
|
||
0,
|
||
["显性事实理解|关键词识别"],
|
||
"Ben说'I had a very strange morning. I saw a cat wearing a hat!',他的早晨非常奇怪。Skylar不在对话中,是干扰项。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about a place they visited.",
|
||
"021601-01.mp3",
|
||
"What does Lucy say about the library?",
|
||
["It was very crowded", "It is quiet and she can read there", "It was too noisy with traffic"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Lucy说'I love our local library. It's quiet and I can read there.',图书馆安静适合读书。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about something that happened.",
|
||
"021601-02.mp3",
|
||
"Whose box fell and made a mess?",
|
||
["Johnny's box", "Ben's box", "Lucy's box"],
|
||
0,
|
||
["显性事实理解|关键词识别"],
|
||
"Johnny说'I was carrying a box and I let it drop. What a mess!',他的盒子掉了,弄得很乱。Ben提到了noise,Lucy提到了bread。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people describing how they feel.",
|
||
"021601-03.mp3",
|
||
"What is Lucy complaining about?",
|
||
["A suitcase that is too heavy", "Streets that are too crowded", "A room that is too noisy"],
|
||
2,
|
||
["听力细节理解"],
|
||
"Lucy说'I can't study here. This room is too noisy.',她嫌房间太吵无法学习。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about their shopping.",
|
||
"021601-04.mp3",
|
||
"What warning does Ben give at the market?",
|
||
["Don't buy strange fruit", "Be careful with the eggs, don't drop them", "Buy fresh vegetables instead"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Ben说'Be careful with that bag! Don't drop the eggs.',他在警告不要把鸡蛋掉了。"
|
||
),
|
||
]
|
||
|
||
QSID_021601_FIRST_DIALOGUES = [
|
||
"""Ben: Hi, Lucy. I had a very strange morning. I saw a cat wearing a hat!
|
||
Lucy: Wow, Ben! I went to the market early. The air was so fresh and nice.""",
|
||
"""Lucy: I love our local library. It's quiet and I can read there.
|
||
Ben: That sounds lovely, Lucy. I went to the new park. It was very crowded with people.""",
|
||
"""Johnny: I was carrying a box and I let it drop. What a mess!
|
||
Ben: Oh no, Johnny! I heard a very strange noise last night. It was like a whistle.""",
|
||
"""Lucy: I can't study here. This room is too noisy.
|
||
Ben: I know what you mean, Lucy. This suitcase is too heavy for me to lift.""",
|
||
"""Ben: Be careful with that bag! Don't drop the eggs.
|
||
Lucy: Thanks, Ben. I bought some strange fruit. I've never seen it before.""",
|
||
]
|
||
|
||
for i, d in enumerate(QSID_021601_FIRST_DIALOGUES):
|
||
QSID_021601_FIRST[i]["dialogue"] = d
|
||
|
||
QSID_021601_FIRST_BLOCK = make_block("021601", QSID_021601_FIRST)
|
||
|
||
# ============================================================
|
||
# 021701 - 周末话题 (basketball/bookcase/draw/machine/invention)
|
||
# first: 5 Qs | second: empty
|
||
# ============================================================
|
||
QSID_021701_FIRST = [
|
||
make_qs(
|
||
"You will hear two people talking about what they did last weekend.",
|
||
"021701-00.mp3",
|
||
"Who played basketball last weekend?",
|
||
["Ben", "Lucy", "Skylar"],
|
||
0,
|
||
["显性事实理解|关键词识别"],
|
||
"Ben说'Last weekend, I played basketball twice with my friends.',他上周打了篮球。Skylar不在对话中,是干扰项。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about their hobbies.",
|
||
"021701-01.mp3",
|
||
"Whose hobby needs a bigger bookcase?",
|
||
["Daisy's hobby", "Smith's hobby", "Johnny's hobby"],
|
||
1,
|
||
["显性事实理解|关键词识别"],
|
||
"Smith说'I enjoy reading. I have so many books that I need a bigger bookcase.',他书太多需要更大的书架。Johnny不在对话中,是干扰项。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about things they saw.",
|
||
"021701-02.mp3",
|
||
"What did Ben read about that was from long ago?",
|
||
["A clever machine that can draw", "A basketball game on TV", "A great invention from many years ago"],
|
||
2,
|
||
["听力细节理解"],
|
||
"Ben说'I read about a great invention in a book. Someone made it many years ago.',他读到一项古老的发明。选项C为正确答案。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about what they made or did.",
|
||
"021701-03.mp3",
|
||
"What did Lucy make for her room?",
|
||
["A small bookcase", "A funny drawing of a machine", "A basketball drawing"],
|
||
0,
|
||
["听力细节理解"],
|
||
"Lucy说'I made a small bookcase for my room. It was hard work!',她为自己房间做了个小书架。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about their plans.",
|
||
"021701-04.mp3",
|
||
"What does Ben want to learn to draw?",
|
||
["A famous person from long ago", "A basketball", "An old machine"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Ben说'I want to learn how to draw a basketball. It seems difficult.',他想学画篮球。"
|
||
),
|
||
]
|
||
|
||
QSID_021701_FIRST_DIALOGUES = [
|
||
"""Ben: Hi, Lucy. Last weekend, I played basketball twice with my friends. It was so much fun.
|
||
Lucy: That sounds great, Ben. I went to the library and read some interesting books. I also helped my dad build a new bookcase.""",
|
||
"""Smith: My hobby is drawing. I like to draw pictures of people and places.
|
||
Ben: That's nice, Smith. I enjoy reading. I have so many books that I need a bigger bookcase.""",
|
||
"""Ben: I read about a great invention in a book. Someone made it many years ago.
|
||
Lucy: That's interesting, Ben. I saw a very clever machine yesterday. It can draw pictures by itself!""",
|
||
"""Lucy: I made a small bookcase for my room. It was hard work!
|
||
Ben: Well done, Lucy. I drew a picture of a funny machine. My teacher liked it.""",
|
||
"""Ben: I want to learn how to draw a basketball. It seems difficult.
|
||
Lucy: That's a fun goal, Ben. I plan to read a book about a famous person from long ago.""",
|
||
]
|
||
|
||
for i, d in enumerate(QSID_021701_FIRST_DIALOGUES):
|
||
QSID_021701_FIRST[i]["dialogue"] = d
|
||
|
||
QSID_021701_FIRST_BLOCK = make_block("021701", QSID_021701_FIRST)
|
||
|
||
# ============================================================
|
||
# 021801 - 出行话题 (battery/shop/theatre/show/midday/bright/corner/climb)
|
||
# first: 5 Qs | second: 5 Qs
|
||
# ============================================================
|
||
QSID_021801_FIRST = [
|
||
make_qs(
|
||
"You will hear two people talking about what they did in the morning.",
|
||
"021801-00.mp3",
|
||
"Whose toy car needed a new battery?",
|
||
["Ben's toy car", "Lucy's toy car", "Daisy's toy car"],
|
||
0,
|
||
["显性事实理解|关键词识别"],
|
||
"Ben说'I needed a new battery for my toy car. I went to the shop at midday to buy one.',他的玩具车需要新电池。Daisy不在对话中,是干扰项。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about their weekend activities.",
|
||
"021801-01.mp3",
|
||
"What did Ben and his friend do at the theatre?",
|
||
["Watched a special play", "Climbed a tall tree", "Fixed a phone"],
|
||
0,
|
||
["听力细节理解"],
|
||
"Ben说'We went to the theatre. It was a special play and very interesting.',他们去剧院看了一场特别的戏剧。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people describing a place they visited.",
|
||
"021801-02.mp3",
|
||
"What does Lucy mention about the place she visited?",
|
||
["It was very bright at midday", "It had a quiet corner to sit and read", "The old tower was closed"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Lucy说'I liked the quiet corner best. It was a special place to sit and read.',她最喜欢安静的角落。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about something that happened.",
|
||
"021801-03.mp3",
|
||
"What did Lucy's torch help them do?",
|
||
["Meet a friend at the library", "See in the dark", "Climb a hill in the rain"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Lucy说'The special battery in my torch made it very bright. It helped us see in the dark.',手电筒帮他们在黑暗中看清。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about different problems.",
|
||
"021801-04.mp3",
|
||
"What problem did Ben have?",
|
||
["He lost his keys in the kitchen", "He was late for a film at the theatre", "His watch stopped because the battery was old"],
|
||
2,
|
||
["听力细节理解"],
|
||
"Ben说'My watch stopped because the battery was old. I bought a new one after lunch.',他的手表没电了。选项C为正确答案。"
|
||
),
|
||
]
|
||
|
||
QSID_021801_FIRST_DIALOGUES = [
|
||
"""Ben: Hi, Lucy. I needed a new battery for my toy car. I went to the shop at midday to buy one.
|
||
Lucy: Oh, Ben. I arrived at the theatre early to get a good seat for the special show.""",
|
||
"""Ben: We went to the theatre. It was a special play and very interesting.
|
||
Lucy: That sounds fun, Ben. I helped my brother climb a tall tree in the park. It was exciting!""",
|
||
"""Lucy: I liked the quiet corner best. It was a special place to sit and read.
|
||
Ben: That's nice, Lucy. I arrived just before midday. The room was very bright because of the big windows.""",
|
||
"""Lucy: The special battery in my torch made it very bright. It helped us see in the dark.
|
||
Ben: That's useful, Lucy. I was sitting in the corner of the library when my friend arrived. We studied together.""",
|
||
"""Ben: My watch stopped because the battery was old. I bought a new one after lunch.
|
||
Lucy: That's annoying, Ben. I couldn't find my keys. They were in the bright corner of the kitchen, under a newspaper.""",
|
||
]
|
||
|
||
for i, d in enumerate(QSID_021801_FIRST_DIALOGUES):
|
||
QSID_021801_FIRST[i]["dialogue"] = d
|
||
|
||
QSID_021801_FIRST_BLOCK = make_block("021801", QSID_021801_FIRST)
|
||
|
||
QSID_021801_SECOND = [
|
||
make_qs(
|
||
"You will hear two people talking about a surprise party.",
|
||
"021801-05.mp3",
|
||
"Who felt very excited about the party?",
|
||
["Lucy", "Ben", "Daisy"],
|
||
0,
|
||
["显性事实理解|关键词识别"],
|
||
"Lucy说'I was so excited about the party! I thought everyone would forget, but they all came.',她非常兴奋。Daisy不在对话中,是干扰项。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about a school play.",
|
||
"021801-06.mp3",
|
||
"What did Ben feel during the play?",
|
||
["He felt nervous", "His heart was racing with excitement", "He forgot one of his lines"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Ben说'I felt my heart racing when I was on stage. It was exciting!',他在舞台上心跳加速非常激动。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about their weekend.",
|
||
"021801-07.mp3",
|
||
"Why was Lucy's Sunday brilliant?",
|
||
["She finally got to rest", "She visited her grandma", "The weather was brilliant"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Lucy说'I was excited to visit my grandma. I felt my heart was full of joy.',她周日去看了奶奶很开心。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about a football match.",
|
||
"021801-08.mp3",
|
||
"Why did Ben think the game was brilliant?",
|
||
["His team scored the first goal", "His team played well all game", "The result was better than expected"],
|
||
0,
|
||
["听力细节理解"],
|
||
"Ben说'It was a brilliant game! I felt so excited when we scored the first goal.',球队进了第一个球让他很兴奋。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about a test.",
|
||
"021801-09.mp3",
|
||
"Who felt positive after the test?",
|
||
["Johnny", "Ben", "Lucy"],
|
||
2,
|
||
["显性事实理解|关键词识别"],
|
||
"Lucy说'I felt excited after the test because I think it went brilliantly.',她考后感觉很积极。Johnny感到nervous,Lucy感到excited。"
|
||
),
|
||
]
|
||
|
||
QSID_021801_SECOND_DIALOGUES = [
|
||
"""Lucy: I was so excited about the party! I thought everyone would forget, but they all came.
|
||
Ben: That's wonderful, Lucy. I suppose it was a brilliant idea. I felt my heart beating fast when I saw the cake.""",
|
||
"""Ben: I felt my heart racing when I was on stage. It was exciting!
|
||
Lucy: I know the feeling, Ben. I suppose the play was brilliant. My friend said I was good, but I felt a bit nervous.""",
|
||
"""Lucy: I was excited to visit my grandma. I felt my heart was full of joy.
|
||
Ben: That's so sweet, Lucy. I felt tired on Saturday. I suppose I forgot to rest. But Sunday was brilliant!""",
|
||
"""Ben: It was a brilliant game! I felt so excited when we scored the first goal.
|
||
Lucy: Lucky you, Ben. I felt disappointed because our team lost. I suppose we forgot how to play well.""",
|
||
"""Lucy: I felt excited after the test because I think it went brilliantly.
|
||
Ben: That's great, Lucy. I felt my heart beat quickly before the test. I was so nervous!""",
|
||
]
|
||
|
||
for i, d in enumerate(QSID_021801_SECOND_DIALOGUES):
|
||
QSID_021801_SECOND[i]["dialogue"] = d
|
||
|
||
QSID_021801_SECOND_BLOCK = make_block("021801", QSID_021801_SECOND)
|
||
|
||
# ============================================================
|
||
# 022101 - 活动话题 (race/factory/skate/port/noise/ship)
|
||
# first: 5 Qs | second: empty
|
||
# ============================================================
|
||
QSID_022101_FIRST = [
|
||
make_qs(
|
||
"You will hear two people talking about their weekend.",
|
||
"022101-00.mp3",
|
||
"Who went to watch a boat race at the port?",
|
||
["Ben", "Lucy", "Daisy"],
|
||
0,
|
||
["显性事实理解|关键词识别"],
|
||
"Ben说'I went to watch a boat race at the port. It was exciting!',他去港口看了赛船。Daisy不在对话中,是干扰项。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about sounds they heard.",
|
||
"022101-01.mp3",
|
||
"Where did the noise Lucy heard come from?",
|
||
["At the port, from boats", "Near the factory", "At home, a ball hit the window"],
|
||
2,
|
||
["听力细节理解"],
|
||
"Lucy说'I heard a loud noise when a ball hit the window.',球撞到窗户发出噪音。选项C为正确答案。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about things they saw.",
|
||
"022101-02.mp3",
|
||
"What did Ben see at the factory?",
|
||
["A big ship going through the port", "Workers making things inside", "Children having a race on skates"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Ben说'I saw workers making things inside the factory.',他在工厂看到了工人在制造东西。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about problems they had.",
|
||
"022101-03.mp3",
|
||
"What kept Lucy awake last night?",
|
||
["She fell down while skating", "The noise from the port", "She got lost in the factory"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Lucy说'The noise from the port kept me awake last night.',港口的噪音让她睡不着。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about their favourite activities.",
|
||
"022101-04.mp3",
|
||
"What does Ben enjoy doing most?",
|
||
["Watching boat races", "Skating fast", "Visiting the port to see boats"],
|
||
0,
|
||
["听力细节理解"],
|
||
"Ben说'I love watching boat races. They are the best!',他最喜欢看船赛。"
|
||
),
|
||
]
|
||
|
||
QSID_022101_FIRST_DIALOGUES = [
|
||
"""Ben: Hi, Lucy. I went to watch a boat race at the port. It was exciting!
|
||
Lucy: That sounds fun, Ben. I visited a factory with my class. It was noisy but interesting.""",
|
||
"""Lucy: I heard a loud noise when a ball hit the window.
|
||
Ben: Oh dear, Lucy. The sound of boats at the port was very loud this morning.""",
|
||
"""Ben: I saw workers making things inside the factory.
|
||
Lucy: That's interesting, Ben. I saw a big ship go through the port. It was huge!""",
|
||
"""Lucy: The noise from the port kept me awake last night.
|
||
Ben: That's too bad, Lucy. My skate hit a stone and I fell down.""",
|
||
"""Ben: I love watching boat races. They are the best!
|
||
Lucy: I can see why, Ben. I enjoy skating fast. It feels like flying.""",
|
||
]
|
||
|
||
for i, d in enumerate(QSID_022101_FIRST_DIALOGUES):
|
||
QSID_022101_FIRST[i]["dialogue"] = d
|
||
|
||
QSID_022101_FIRST_BLOCK = make_block("022101", QSID_022101_FIRST)
|
||
|
||
# ============================================================
|
||
# 032501 - 工作话题 (journalist/partner/internet/capital/invitation/company)
|
||
# first: 5 Qs | second: empty
|
||
# ============================================================
|
||
QSID_032501_FIRST = [
|
||
make_qs(
|
||
"You will hear two people talking about their new jobs.",
|
||
"032501-00.mp3",
|
||
"Who works with a partner as a journalist?",
|
||
["Skylar's job online", "Lucy's job at a big company", "Ben's job as a journalist with a partner"],
|
||
2,
|
||
["显性事实理解|关键词识别"],
|
||
"Ben说'My partner and I write stories for a newspaper.',他和搭档一起工作。选项C为正确答案。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about their plans for the weekend.",
|
||
"032501-01.mp3",
|
||
"Whose friend sent an invitation to visit the capital?",
|
||
["Otis's friend", "Lucy's friend", "Daisy's friend"],
|
||
0,
|
||
["显性事实理解|关键词识别"],
|
||
"Otis说'I'm going to the capital to visit a museum. I got an invitation from a friend who lives there.',他的朋友邀请他去首都。Daisy不在对话中。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about what they like.",
|
||
"032501-02.mp3",
|
||
"What does Ben say about his job?",
|
||
["He finds history very interesting", "He works as a journalist with different people", "He uses the internet to talk to his partner"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Ben说'My job is interesting because I'm a journalist. I don't have a fixed partner; I work with different people.',他的记者工作有趣因为可以和不同的人合作。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about their work.",
|
||
"032501-03.mp3",
|
||
"Who does all their work online from home?",
|
||
["Skylar", "Lucy", "Daisy"],
|
||
0,
|
||
["显性事实理解|关键词识别"],
|
||
"Skylar说'I work alone at home. I don't have a partner. All my research is done on the internet.',他所有工作都在网上完成。Daisy不在对话中。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about recent events.",
|
||
"032501-04.mp3",
|
||
"What did Ben read on the internet?",
|
||
["About interesting places in the capital", "An interesting story by a famous journalist", "A surprising invitation to be a journalist's partner"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Ben说'I read an interesting story by a famous journalist on the internet yesterday.',他在网上读到一位名记者写的有趣故事。"
|
||
),
|
||
]
|
||
|
||
QSID_032501_FIRST_DIALOGUES = [
|
||
"""Ben: Hi, Lucy. I started working as a journalist last month. My partner and I write stories for a newspaper. It's very interesting.
|
||
Lucy: That's exciting, Ben. I got an invitation to work for a big company in the capital. I'm excited to move there.""",
|
||
"""Otis: I'm going to the capital to visit a museum. I got an invitation from a friend who lives there.
|
||
Lucy: How nice, Otis. My weekend will be boring. I have to work with my partner on a project using the internet.""",
|
||
"""Ben: My job is interesting because I'm a journalist. I don't have a fixed partner; I work with different people.
|
||
Lucy: That's great, Ben. I think history is very interesting. I read a lot about different capitals on the internet.""",
|
||
"""Skylar: I work alone at home. I don't have a partner. All my research is done on the internet.
|
||
Lucy: That sounds peaceful, Skylar. I work as a journalist in the capital. Sometimes it's interesting, sometimes it's not.""",
|
||
"""Ben: I read an interesting story by a famous journalist on the internet yesterday.
|
||
Lucy: Oh really, Ben? My partner and I visited the capital. We saw many interesting places.""",
|
||
]
|
||
|
||
for i, d in enumerate(QSID_032501_FIRST_DIALOGUES):
|
||
QSID_032501_FIRST[i]["dialogue"] = d
|
||
|
||
QSID_032501_FIRST_BLOCK = make_block("032501", QSID_032501_FIRST)
|
||
|
||
# ============================================================
|
||
# 032901 - 日常话题 (shower/exercise/hobby/boss/offer/easy/soft drink)
|
||
# first: 5 Qs | second: empty
|
||
# ============================================================
|
||
QSID_032901_FIRST = [
|
||
make_qs(
|
||
"You will hear two people talking about their morning routines.",
|
||
"032901-00.mp3",
|
||
"Who does exercise in the morning?",
|
||
["Ben", "Lucy", "Skylar"],
|
||
0,
|
||
["显性事实理解|关键词识别"],
|
||
"Ben说'I always take a quick shower in the morning. Then I do some exercise, like running, before breakfast.',他早上会锻炼。Skylar不在对话中,是干扰项。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about their jobs.",
|
||
"032901-01.mp3",
|
||
"Whose job is also their hobby?",
|
||
["Otis's job", "Daisy's job", "Ben's job"],
|
||
2,
|
||
["显性事实理解|关键词识别"],
|
||
"Ben说'My hobby is my job! I teach people how to exercise correctly. It's fun to share my passion.',他的爱好成为了工作。Daisy在café工作,Ben教人锻炼。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about what they like to do after work.",
|
||
"032901-02.mp3",
|
||
"What does Lucy prefer to do after work?",
|
||
["Take a long, hot shower and read", "Meet friends for a run", "Watch TV because it's easy"],
|
||
0,
|
||
["听力细节理解"],
|
||
"Lucy说'After work, I love to relax. A long, hot shower is the best. Then I might read a book.',她下班后喜欢淋浴和看书。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about helping others.",
|
||
"032901-03.mp3",
|
||
"How does Ben help customers at his café job?",
|
||
["He drives friends home after the photography club", "He offers tired customers a free soft drink", "He cooks for his family"],
|
||
1,
|
||
["听力细节理解"],
|
||
"Ben说'if a customer looks tired, I sometimes offer them a free soft drink. My boss says it's a good idea.',他在café工作时会送疲惫的客人免费饮料。"
|
||
),
|
||
make_qs(
|
||
"You will hear two people talking about their plans for the weekend.",
|
||
"032901-04.mp3",
|
||
"Who has to work on Saturday because their boss asked?",
|
||
["Smith", "Johnny", "Lucy"],
|
||
1,
|
||
["显性事实理解|关键词识别"],
|
||
"Johnny说'My boss asked me to work on Saturday. It won't be easy, but I said yes.',老板要求他周六工作。Lucy打算休息。"
|
||
),
|
||
]
|
||
|
||
QSID_032901_FIRST_DIALOGUES = [
|
||
"""Ben: Hi, Lucy. I always take a quick shower in the morning. Then I do some exercise, like running, before breakfast.
|
||
Lucy: That's healthy, Ben. My morning is easy. I just have a soft drink and check my emails. My boss is always the first to write.""",
|
||
"""Ben: My hobby is my job! I teach people how to exercise correctly. It's fun to share my passion.
|
||
Lucy: That's great, Ben. My boss is very kind. He often offers to help me with difficult tasks, which makes my work much easier.""",
|
||
"""Lucy: After work, I love to relax. A long, hot shower is the best. Then I might read a book.
|
||
Ben: That sounds nice, Lucy. I usually meet friends. We often go for a run for exercise. Sometimes we just have a soft drink and chat.""",
|
||
"""Ben: At the café, if a customer looks tired, I sometimes offer them a free soft drink. My boss says it's a good idea.
|
||
Lucy: That's so kind, Ben. I always offer to drive my friends home after our photography club. It's no problem for me.""",
|
||
"""Johnny: My boss asked me to work on Saturday. It won't be easy, but I said yes. I hope he offers to pay extra.
|
||
Lucy: Oh dear, Johnny. I need to do some exercise, so I'll probably go to the gym. But first, a nice shower!""",
|
||
]
|
||
|
||
for i, d in enumerate(QSID_032901_FIRST_DIALOGUES):
|
||
QSID_032901_FIRST[i]["dialogue"] = d
|
||
|
||
QSID_032901_FIRST_BLOCK = make_block("032901", QSID_032901_FIRST)
|
||
|
||
# ============================================================
|
||
# Record ID -> data mapping
|
||
# ============================================================
|
||
RECORD_DATA = {
|
||
"021301": {
|
||
"record_id": "recvjufKJO8d0O",
|
||
"first_block": QSID_021301_FIRST_BLOCK,
|
||
"second_block": QSID_021301_SECOND_BLOCK,
|
||
"first_qs_list": QSID_021301_FIRST,
|
||
"second_qs_list": QSID_021301_SECOND,
|
||
},
|
||
"021401": {
|
||
"record_id": "recvjufM763ijb",
|
||
"first_block": QSID_021401_FIRST_BLOCK,
|
||
"second_block": QSID_021401_SECOND_BLOCK,
|
||
"first_qs_list": QSID_021401_FIRST,
|
||
"second_qs_list": QSID_021401_SECOND,
|
||
},
|
||
"021501": {
|
||
"record_id": "recvjufM76lEsW",
|
||
"first_block": QSID_021501_FIRST_BLOCK,
|
||
"second_block": QSID_021501_SECOND_BLOCK,
|
||
"first_qs_list": QSID_021501_FIRST,
|
||
"second_qs_list": QSID_021501_SECOND,
|
||
},
|
||
"021601": {
|
||
"record_id": "recvjufM76hNv5",
|
||
"first_block": QSID_021601_FIRST_BLOCK,
|
||
"second_block": {},
|
||
"first_qs_list": QSID_021601_FIRST,
|
||
"second_qs_list": [],
|
||
},
|
||
"021701": {
|
||
"record_id": "recvjufM76eMKs",
|
||
"first_block": QSID_021701_FIRST_BLOCK,
|
||
"second_block": {},
|
||
"first_qs_list": QSID_021701_FIRST,
|
||
"second_qs_list": [],
|
||
},
|
||
"021801": {
|
||
"record_id": "recvjufM76lRHQ",
|
||
"first_block": QSID_021801_FIRST_BLOCK,
|
||
"second_block": QSID_021801_SECOND_BLOCK,
|
||
"first_qs_list": QSID_021801_FIRST,
|
||
"second_qs_list": QSID_021801_SECOND,
|
||
},
|
||
"022101": {
|
||
"record_id": "recvjufM76o6of",
|
||
"first_block": QSID_022101_FIRST_BLOCK,
|
||
"second_block": {},
|
||
"first_qs_list": QSID_022101_FIRST,
|
||
"second_qs_list": [],
|
||
},
|
||
"032501": {
|
||
"record_id": "recvjufM76k4dx",
|
||
"first_block": QSID_032501_FIRST_BLOCK,
|
||
"second_block": {},
|
||
"first_qs_list": QSID_032501_FIRST,
|
||
"second_qs_list": [],
|
||
},
|
||
"032901": {
|
||
"record_id": "recvjufM76frUP",
|
||
"first_block": QSID_032901_FIRST_BLOCK,
|
||
"second_block": {},
|
||
"first_qs_list": QSID_032901_FIRST,
|
||
"second_qs_list": [],
|
||
},
|
||
}
|
||
|
||
def main():
|
||
mode = sys.argv[1] if len(sys.argv) > 1 else "dry"
|
||
|
||
for qsid, data in RECORD_DATA.items():
|
||
record_id = data["record_id"]
|
||
first_block = data["first_block"]
|
||
second_block = data["second_block"]
|
||
first_qs = data["first_qs_list"]
|
||
second_qs = data["second_qs_list"]
|
||
|
||
# Build jsonData
|
||
json_data = {"first": first_block, "second": second_block}
|
||
|
||
# Build 题目1 text
|
||
q1_text = make_q1_text(first_qs)
|
||
q2_text = make_q1_text(second_qs) if second_qs else ""
|
||
|
||
# Remove dialogue key from question set for jsonData
|
||
for q in first_block["questionSet"]:
|
||
q.pop("dialogue", None)
|
||
if second_block and isinstance(second_block, dict) and "questionSet" in second_block:
|
||
for q in second_block["questionSet"]:
|
||
q.pop("dialogue", None)
|
||
|
||
fields = {
|
||
"jsonData": json.dumps(json_data, ensure_ascii=False),
|
||
"题目1": q1_text,
|
||
"题目2": q2_text,
|
||
}
|
||
|
||
fields_json = json.dumps(fields, ensure_ascii=False)
|
||
|
||
print(f"\n{'='*60}")
|
||
print(f"QSID: {qsid} | Record: {record_id}")
|
||
print(f"First questions: {len(first_qs)}")
|
||
print(f"Second questions: {len(second_qs)}")
|
||
|
||
# Verify answer distribution
|
||
answers_first = [q["answer"][0] for q in first_qs]
|
||
a_counts = {0: answers_first.count(0), 1: answers_first.count(1), 2: answers_first.count(2)}
|
||
print(f"First answer distribution: A={a_counts[0]}, B={a_counts[1]}, C={a_counts[2]}")
|
||
if max(a_counts.values()) > 2:
|
||
print(f" ⚠️ WARNING: answer not evenly distributed!")
|
||
|
||
if second_qs:
|
||
answers_second = [q["answer"][0] for q in second_qs]
|
||
s_counts = {0: answers_second.count(0), 1: answers_second.count(1), 2: answers_second.count(2)}
|
||
print(f"Second answer distribution: A={s_counts[0]}, B={s_counts[1]}, C={s_counts[2]}")
|
||
if max(s_counts.values()) > 2:
|
||
print(f" ⚠️ WARNING: answer not evenly distributed!")
|
||
|
||
if mode == "write":
|
||
result = update_record(record_id, fields_json)
|
||
code = result.get("code", -1)
|
||
if code == 0:
|
||
print(f" ✅ Write SUCCESS")
|
||
else:
|
||
print(f" ❌ Write FAILED: {result.get('msg', 'unknown')}")
|
||
elif mode == "dry":
|
||
print(f" DRY RUN - would write {len(fields_json)} bytes")
|
||
# Save to file for inspection
|
||
fname = f"/tmp/p4_rewrite_{qsid}.json"
|
||
with open(fname, 'w') as f:
|
||
json.dump(json_data, f, ensure_ascii=False, indent=2)
|
||
print(f" Saved to {fname}")
|
||
|
||
print(f"\n{'='*60}")
|
||
print("All done!")
|
||
|
||
if __name__ == "__main__":
|
||
main()
|