构建作文批改系统——四
前面的工作暂告一段落。(前)后续工作已由组内其他成员实现。本次要实现的是一个全新的功能模块——教师端的部分功能。
1.多模态输入:支持OCR识别作文。支持上传pdf识别作文。
2.智能识别(批改):识别比喻/拟人等常见修辞,识别高级修辞。识别错别字,病句,标点误用。识别语病,病句,语法错误等。
实现OCR:
使用pytesseract以及tesseract
后者需要安装在本地。下载地址
记得在安装时,别忘了额外勾选中文包。
开始实现:
app.config['ALLOWED_EXTENSIONS_OCR'] = {'png', 'jpg', 'jpeg', 'gif', 'pdf'} # 支持多种格式
# 这里指定为你自己的路径
pytesseract.pytesseract.tesseract_cmd = r'D:\Project\OCR\tesseract.exe'
核心代码其实就三行:
# 使用Tesseract进行OCR识别
img = Image.open(filepath)
img = img.convert('L').point(lambda x: 255 if x > 180 else 0) #这一句是为了提高识别率,也有其他方法。
text = pytesseract.image_to_string(img, lang='chi_sim')
print(text) #测试用
**测试:**在test文件里制定好路径,发送一下POST请求即可。
with open(image_path, 'rb') as img_file:
files = {'file': img_file} # 将文件加入到 request 的文件列表中
# 发送 POST 请求
response = requests.post(url, files=files)
结果:
**可以发现其实是有识别错误的情况的。。。**正确率大概90%吧。
实际上:对清晰,白底黑字的图片识别效果比较好。但对有格子背景之类的图片识别效果非常不好
**实现读PDF:**使用pdfplumber
.
把test和状态码返回前端即可。
# 提取PDF文本
text = ""
with pdfplumber.open(filepath) as pdf:
for page in pdf.pages:
text += page.extract_text() + "\n"
实现批改:
这里我们简单使用学校提供的deepseek API来实现,好好写prompt就行了。
只需写一个后端接口,集三种功能于一身:
def recognize_text():
# 此方法需要传入的参数:
# 1.文本 2.一个int变量function_id
# 文本就是作文,id用于选择不同的功能
# id=1:识别修辞手法
# id=2:识别错别字与标点符号错误,并提供改正建议
# id=3:识别语法错误与病句并提供修改建议
...
根据不同的function_id
我们选择不同的prompt
和user——context
即可:
payload = {
"model": "DeepSeek-R1",
"messages": [
{
"role": "system",
"content": prompt
},
{
"role": "user",
"content": f"{user_context}\n以下为作文内容:\n{data['text']}"
}
],
"temperature": 0.7,
"stream": False
}
例如功能2:
elif function_id == 2:
prompt = "你是一位专业的语文老师,你的任务是检查以下作文中的错别字与标点符号误用,并提供详细的改正建议。"
"请注意以下几点:\n"
"1. 识别作文中的书写错误与标点符号的不恰当使用。\n"
"2. 提供每个错误的改正建议。\n"
"3. 在必要时,简要解释错误的原因。\n"
"4. 保持对作文整体内容的理解,确保建议符合语境。"
"5. 无需给出你的思考过程"
user_context = "请帮我检测这篇作文中的错别字与标点符号误用的情况。"
测试一下功能3:
看到控制台正常返回了批改结果即可。