1. 程式人生 > >記一次英語批改作業軟體的開發-除了老師和家長,它也可以批改作業

記一次英語批改作業軟體的開發-除了老師和家長,它也可以批改作業

# 除了老師和家長,它也可以批改作業 最近一個家長退群的故事在某博上了熱搜。故事中老師和家長的矛盾由批改作業集中爆發,至於孰是孰非,還是交給吃瓜群眾去評價吧,作為一個技術工作者,我突發奇想,是否以後能讓機器來輔助老師批改作業呢?這彷彿是個維護世界和平的點子! 經過一陣調(搜)研(索),在英語作文批改上,還真的有一些成熟的方案可以使用,而且學習成本相當之低,比如有道智雲的[英語作文批改](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("<