記一次英語批改作業軟體的開發-除了老師和家長,它也可以批改作業
阿新 • • 發佈:2020-12-05
# 除了老師和家長,它也可以批改作業
最近一個家長退群的故事在某博上了熱搜。故事中老師和家長的矛盾由批改作業集中爆發,至於孰是孰非,還是交給吃瓜群眾去評價吧,作為一個技術工作者,我突發奇想,是否以後能讓機器來輔助老師批改作業呢?這彷彿是個維護世界和平的點子!
經過一陣調(搜)研(索),在英語作文批改上,還真的有一些成熟的方案可以使用,而且學習成本相當之低,比如有道智雲的[英語作文批改](http://ai.youdao.com/english-correction.s#/)服務,只需閱讀[文件](http://ai.youdao.com/DOCSIRMA/html/%E4%BD%9C%E6%96%87%E6%89%B9%E6%94%B9/API%E6%96%87%E6%A1%A3/%E8%8B%B1%E8%AF%AD%E4%BD%9C%E6%96%87%E6%89%B9%E6%94%B9%EF%BC%88%E5%9B%BE%E5%83%8F%E8%AF%86%E5%88%AB%EF%BC%89/%E8%8B%B1%E8%AF%AD%E4%BD%9C%E6%96%87%E6%89%B9%E6%94%B9%EF%BC%88%E5%9B%BE%E5%83%8F%E8%AF%86%E5%88%AB%EF%BC%89-API%E6%96%87%E6%A1%A3.html)按規則開發應用,即可得到詳盡的批改結果,作文可以是圖片,也可以是文字,等級可以從小學一直到雅思託福,覆蓋範圍極廣。
懷著激動的心情,我快速地開發了一個簡單的[demo](https://github.com/LemonQH/CorrectWriting),下面分享一下開發過程。
### 呼叫API介面的準備工作
首先,是需要在有道智雲的個人頁面上建立例項、建立應用、繫結應用和例項,獲取到應用的id和金鑰。具體個人註冊的過程和應用建立過程詳見文章[分享一次批量檔案翻譯的開發過程](https://www.cnblogs.com/alchemystar/p/13645324.html)
**這裡要特別說明一下,作文批改分為影象和文字兩種形式,分別呼叫了不同的api,因此需要建立兩個例項。**
### 開發過程詳細介紹
下面介紹具體的程式碼開發過程。
英語作文批改分為兩個API,分別對應[影象識別](http://ai.youdao.com/DOCSIRMA/html/%E4%BD%9C%E6%96%87%E6%89%B9%E6%94%B9/API%E6%96%87%E6%A1%A3/%E8%8B%B1%E8%AF%AD%E4%BD%9C%E6%96%87%E6%89%B9%E6%94%B9%EF%BC%88%E5%9B%BE%E5%83%8F%E8%AF%86%E5%88%AB%EF%BC%89/%E8%8B%B1%E8%AF%AD%E4%BD%9C%E6%96%87%E6%89%B9%E6%94%B9%EF%BC%88%E5%9B%BE%E5%83%8F%E8%AF%86%E5%88%AB%EF%BC%89-API%E6%96%87%E6%A1%A3.html)和[文字輸入](http://ai.youdao.com/DOCSIRMA/html/%E4%BD%9C%E6%96%87%E6%89%B9%E6%94%B9/API%E6%96%87%E6%A1%A3/%E8%8B%B1%E8%AF%AD%E4%BD%9C%E6%96%87%E6%89%B9%E6%94%B9%EF%BC%88%E6%96%87%E6%9C%AC%E8%BE%93%E5%85%A5%EF%BC%89/%E8%8B%B1%E8%AF%AD%E4%BD%9C%E6%96%87%E6%89%B9%E6%94%B9%EF%BC%88%E6%96%87%E6%9C%AC%E8%BE%93%E5%85%A5%EF%BC%89-API%E6%96%87%E6%A1%A3.html)兩種形式的作文。呼叫方式大同小異,都是將待批改內容和時間戳等資訊生成的簽名post到API介面,而後介面返回批改結果。
影象識別API輸入所需引數如下表:
| 欄位名 | 型別 | 含義 | 必填 | 備註 |
| -------------- | ---- | ------------------------------------------------------------ | ----- | --------------------------------------------------- |
| q | text | 圖片的 base64。大小不超過 5MB | True | 圖片的 base64 |
| langType | text | 語言,目前僅支援英文 | False | en |
| appKey | text | 應用標識(應用 ID) | True | 可在 [應用管理](http://ai.youdao.com/appmgr.s) 檢視 |
| salt | text | 隨機字串 | True | hfa12lak56ja9gjl |
| sign | text | 簽名信息:sha256(appKey+input+salt+金鑰) | True | xxxxx |
| grade | text | 作文等級。支援列表見下面 grade 支援列表,預設不管等級,只評價句子好壞 | false | default |
| title | text | 作文標題 | false | 0 |
| modelContent | text | 使用者提供的範文內容 | false | 0 |
| goodExpression | text | 使用者提供的好的表達 | false | 0 |
| needTypo | text | 是否需要 typo,(true/false),預設為 true | false | true |
| signType | text | 簽名型別 | true | v3 |
| limitedWords | text | 作文字數限制 | false | 1000 |
文字輸入API輸入引數如下表:
| 欄位名 | 型別 | 含義 | 必填 | 備註 |
| -------------- | ---- | ------------------------------------------------------------ | ----- | --------------------------------------------------- |
| q | text | 批改的文字。文字不超過 5000 字元 | True | text |
| langType | text | 語言,目前僅支援英文 | False | en |
| appKey | text | 應用標識(應用 ID) | True | 可在 [應用管理](http://ai.youdao.com/appmgr.s) 檢視 |
| salt | text | 隨機字串 | True | hfa12lak56ja9gjl |
| sign | text | 簽名信息:sha256(appKey+input+salt+金鑰) | True | xxxxx |
| grade | text | 作文等級。支援列表見下面 grade 支援列表,預設不管等級,只評價句子好壞 | false | default |
| title | text | 作文標題 | false | 0 |
| modelContent | text | 使用者提供的範文內容 | false | 0 |
| goodExpression | text | 使用者提供的好的表達 | false | 0 |
| needTypo | text | 是否需要 糾錯,預設為 true(true/false) | false | true |
| signType | text | 簽名型別 | true | v3 |
| limitedWords | text | 作文字數限制 | false | 1000 |
| curtime | text | 當前UTC時間戳(秒) | true | 時間戳 |
> 最好傳輸 limitedWords,這樣評分更精確。
> 簽名生成演算法如下:
- signType=v3,sha256(應用 ID+input+salt+curtime+金鑰),推薦使用
sha256 簽名計算方法為:sha256(應用 ID+input+salt+當前 UTC 時間戳+金鑰)。
其中,input 的計算方式為:`input`=`多個q拼接後前10個字元` + `多個q拼接長度` + `多個q拼接後十個字元`(當多個 q 拼接後長度大於 20)或 `input`=`多個q拼接的字串`(當多個 q 拼接後長度小於等於 20)。
在介面輸入引數中,grade為以下幾類:
| 級別 | 程式碼 |
| ---------------------------- | ---------- |
| 不考慮級別,單純評價句子好壞 | default |
| 小學 | elementary |
| 初中 | junior |
| 高中 | high |
| 四級 | cet4 |
| 六級 | cet6 |
| 考研 | graduate |
| 託福 | toefl |
| GRE | gre |
| 雅思 | ielts |
#### Demo開發:
這個demo使用python3開發,包括maindow.py,correctclass.py,HomeworkCorrect.py 三個檔案,分別為demo的介面、介面邏輯處理和英文作文批改介面呼叫方法的封裝。
1. ##### 介面部分:
UI 部分較簡單,主要功能為選擇待批改作文檔案、選擇批改結果儲存路徑、選擇批改型別。其佈局程式碼如下:
```python
root=tk.Tk()
root.title(" youdao correct writing test")
frm = tk.Frame(root)
frm.grid(padx='50', pady='50')
# 文章選擇
btn_get_file = tk.Button(frm, text='選擇待批改的作業(圖片或文字)', command=get_files)
btn_get_file.grid(row=0, column=0, ipadx='3', ipady='3', padx='10', pady='20')
text1 = tk.Text(frm, width='40', height='10')
text1.grid(row=0, column=1)
# 結果路徑選擇
btn_get_result_path=tk.Button(frm,text='選擇批改結果存放路徑',command=set_result_path)
btn_get_result_path.grid(row=1,column=0)
text2=tk.Text(frm,width='40', height='2')
text2.grid(row=1,column=1)
# 級別選擇
label=tk.Label(frm,text='選擇年級:')
label.grid(row=3,column=0)
combox=ttk.Combobox(frm,textvariable=tk.StringVar(),width=38)
combox["value"]=select_type_dict
combox.current(0)
combox.bind("<