python处理word文档,如何提取文档中的题目与答案
需求分析
文档格式和题目格式如下,就是需要写出一个对象,然后可以提取出这个文档里面,题目,答案,组号,然后封装成一个对象。
在古代中国社会中,私学是与官学相对而存在的,并且在中国教育上占有重要的地位。我国历史上_______私学规模最大、影响最深远。
a、孔子
b、孟子
c、老子
d、墨子
答案:A
组号:1
具体代码
class Question:
def __init__(self, id, text, options, answer):
self.id = id
self.text = text
self.options = options
self.answer = answer
def __str__(self):
return f'{self.id}. {self.text} 选项: {self.options} 答案: {self.answer}'
def extract_question_option(text):
questions = []
options = []
answers = []
lines = text.split('\n')
# 预处理:去掉空行并将多行题目合并为一行
for i in range(len(lines)):
line = lines[i].strip()
if not line:
continue
if i < len(lines) - 1 and lines[i + 1].startswith(('答案:', '组号:')):
# 当前行不是题目的最后一行,将其添加到前一个题目中
if len(questions) > 0:
questions[-1] += line
else:
# 当前行是题目的最后一行,将其添加为新的题目
questions.append(line)
# 处理选项和答案
current_question_idx = -1
for line in lines:
line = line.strip()
if not line:
continue
if line.startswith('组号:'):
# 处理组号
group_id = line.split(':')[1].strip()
current_question_idx = 0
elif line.startswith('答案:'):
# 处理答案
answer = line.split(':')[1].strip()
if current_question_idx >= 0 and current_question_idx < len(questions):
# 创建新的 Question 对象并添加到列表中
question = Question(current_question_idx + 1, questions[current_question_idx], options[current_question_idx], answer)
questions[current_question_idx] = question
current_question_idx += 1
else:
# 处理选项
options_list = line.split('、')
options = [opt.strip() for opt in options_list]
if len(options) > 0:
# 处理非空选项
if current_question_idx >= 0 and current_question_idx < len(questions):
options.append(options)
else:
# 处理空选项(没有填写选项)
if current_question_idx >= 0 and current_question_idx < len(questions):
options.append([])
return questions
if __name__ == '__main__':
# 读取 Word 文档并解析题目
file_path = "D:\\系统默认\\桌面\\测试题目-三组.docx"
text = read_word_document(file_path)
questions = extract_question_option(text)
# 遍历题目并打印结果
for question in questions:
print(question)
运行结果: