前言:尋找寫作靈感?中文期刊網(wǎng)用心挑選的研究生學(xué)位論文的格式,希望能為您的閱讀和創(chuàng)作帶來靈感,歡迎大家閱讀并分享。
0引言
國內(nèi)高校大量使用微軟公司的Word字處理軟件撰寫學(xué)位論文,學(xué)位論文有較嚴(yán)格的格式要求,人工檢測效率和準(zhǔn)確性均較低,因此有必要設(shè)計(jì)一種學(xué)位論文格式自動檢測系統(tǒng)。安徽工業(yè)大學(xué)的陳國勝、何宗明老師早在2009年就提出了一種基于XML技術(shù)的Word文檔錄入及格式檢測系統(tǒng)設(shè)計(jì)方法,該方法通過Word文檔和XML文檔的相互轉(zhuǎn)換,設(shè)計(jì)了一個(gè)Word文檔錄入和格式檢測模型系統(tǒng),但是該系統(tǒng)還有不完善的地方,例如需要改進(jìn)文檔格式檢測機(jī)制,進(jìn)一步實(shí)現(xiàn)Excel接口和XSTL轉(zhuǎn)化接口;東北電力大學(xué)的闞運(yùn)奇老師在2012年提出一種基于VBA的方法,該方法需使用VBA技術(shù)操作宏,普通用戶難以使用;隋欣、張軍輝在2013年提出了一種基于.NET的文檔信息提取解析方式,該方法僅僅讀取到了文檔內(nèi)部的文本、標(biāo)題、目錄和表格信息,但對文檔的樣式信息提取并沒有涉及。雖然不少學(xué)者提出了各種操作文檔的想法,但是目前還沒有一種比較方便有效的系統(tǒng)供人們對大量相同格式要求的論文進(jìn)行檢測。本文設(shè)計(jì)開發(fā)了一套基于OpenXML格式規(guī)范的研究生學(xué)位論文格式自動檢測系統(tǒng),該系統(tǒng)利用自動化方法檢測docx格式論文文檔,可以提高用戶編輯學(xué)位論文的效率,減輕教師和學(xué)生的負(fù)擔(dān)。
1系統(tǒng)功能設(shè)計(jì)
本方法的系統(tǒng)架構(gòu)圖如圖1所示,包括單元定位模塊、格式提取模塊、對比模塊三個(gè)模塊。單元定位模塊包括封面定位子模塊、獨(dú)創(chuàng)性聲明定位子模塊、標(biāo)題定位子模塊等11個(gè)子模塊,功能為分別定位論文的各個(gè)特定部位,獲取對應(yīng)的XML信息。格式提取模塊包括段落屬性提取子模塊和特殊格式屬性提取子模塊兩個(gè)子模塊。段落屬性提取子模塊的功能是提取待測論文每個(gè)部分共有的段落屬性,如每個(gè)段落的字體、字號、段間距。特殊格式屬性提取子模塊的功能是提取除段落屬性之外的其他格式,如參考文獻(xiàn)樣式提取、圖和表所在章節(jié)的標(biāo)題名稱提取。對比模塊包括規(guī)則配置文件、規(guī)則對比子模塊、報(bào)告生成子模塊三個(gè)部分。規(guī)則配置文件的功能是存儲模板論文規(guī)定的規(guī)則,是檢測待測論文正確與否的標(biāo)準(zhǔn)。規(guī)則對比子模塊的功能是將待測論文的格式特征與規(guī)則配置文件配置的規(guī)則進(jìn)行對比,判斷格式的正誤。報(bào)告生成子模塊的功能是獲取規(guī)則對比子模塊中檢測到的錯(cuò)誤信息并寫入檢測報(bào)告中。
2單元定位模塊
由于本系統(tǒng)處理的是論文各個(gè)部分的格式,如何準(zhǔn)確地定位各部分以及如何精準(zhǔn)地切割就顯得至關(guān)重要。以下列出論文中幾個(gè)關(guān)鍵部分的定位算法。
2.1正文定位算法
首先尋找到全文的第一個(gè)帶編號的標(biāo)題,標(biāo)題后的第一個(gè)段落就是正文開始處;接著過濾中間封裝標(biāo)題的<p>元素和封裝圖的<p>元素;最后定位正文結(jié)束部分,尋找正文結(jié)束后出現(xiàn)的第一個(gè)沒有編號的標(biāo)題,以此為正文部分的結(jié)束定位標(biāo)志。
2.2頁眉定位算法
<hdr>元素存儲了標(biāo)題的文本信息以及樣式,OpenXML中根據(jù)文檔設(shè)置的各個(gè)節(jié)的頁眉屬性<sect-Pr>如首頁不同、奇偶頁不同生成相應(yīng)的頁眉。方法如下:首先遍歷<p>元素,判斷其中是否包含<sectPr>子元素;若包含<sectPr>子元素,找出<sectPr>元素的所有頁眉引用<headerReference>子元素,接著找出<sectPr>元素的所有頁腳引用<footerReference>子元素,利用頁眉引用、頁腳引用的標(biāo)識符定位到相應(yīng)的頁眉<hdr>元素、頁腳<ftr>元素;若不包含<sectPr>子元素,遍歷下一個(gè)<p>元素重復(fù)第一步,直到文檔最后停止遍歷;在<body>元素中尋找保存最后一節(jié)屬性的<sectPr>子元素,重復(fù)第二步。
2.3表格定位算法
表格信息存儲在<body>元素的子元素<tbl>內(nèi),依次遍歷每個(gè)<tbl>元素,可找到表格位置。定位表名的方法如下:首先獲取<tbl>的位置信息,即計(jì)算這個(gè)<tbl>元素是<body>的第幾個(gè)子元素,然后再檢測前一個(gè)位置的<p>是否為空段落,空段落體現(xiàn)為一個(gè)空行,非空段落作為表名處理。如在該前一個(gè)位置沒有找到表名,則再向前回溯一個(gè)位置繼續(xù)進(jìn)行判斷。如超過3步回溯仍未找到表名,認(rèn)為表名缺失或表名的格式有誤。
3格式提取模塊
格式提取模塊的功能為獲取論文各特定部分的格式。格式提取模塊包括段落屬性提取子模塊和特殊格式屬性提取子模塊。
3.1段落屬性提取子模塊
待測學(xué)位論文的每個(gè)特定部分都具有段落屬性,段落屬性提取是所有特定部分的共性工作,由段落屬性提取子模塊完成。在OpenXML中,所有文本內(nèi)容都保存在段落元素<p>中,在表1中給出了段落中常見的元素及其說明。(1)字體依次遍歷每一個(gè)<p>元素,由rFonts元素按照樣式的層次結(jié)構(gòu)依次提取字體樣式,獲取到中英文的字體;檢測段落是否為全英文、全中文,或者既有中文又有英文,若是全英文,舍棄提取到的中文字體樣式,不能用于對比模塊;若是全中文,舍棄提取到的英文字體樣式,不能用于對比模塊;若既有中文又有英文,提取到的中文英文字體樣式全部保存。(2)字號首先按照樣式的層次結(jié)構(gòu)獲取<sz>的屬性Val的值,計(jì)算得到以磅為單位的字號大小;然后參考字號對照表得到字號和磅數(shù)的對應(yīng)關(guān)系,得到實(shí)際字號;將字號保存用于對比模塊。(3)段前距離段前距離信息從<spacing>元素的before和before-Lines屬性中提取。首先依據(jù)樣式的層次結(jié)構(gòu)找到<spacing>元素;若該元素包含beforeLines屬性,獲取該屬性對應(yīng)的屬性值,計(jì)算得到以行距倍數(shù)表示的該段落的段前距離;利用<sectPr>元素的子元素<docGrid>的linePitch屬性可以獲得一行的磅數(shù),統(tǒng)一換算成以“磅”為單位的段前距離;若不包含beforeLines屬性,則獲取before屬性的屬性值,計(jì)算得到以“磅”為單位的段前距離。
3.2特殊格式屬性提取子模塊
特殊格式提取子模塊用于處理除段落屬性之外的其他格式提取問題,包括參考文獻(xiàn)樣式提取、圖和表所在章節(jié)的標(biāo)題名稱提取等,這些格式要求在OpenXML中并沒有明確的元素對應(yīng),需采用特殊方式提取。(1)參考文獻(xiàn)格式提取首先利用正則表達(dá)式匹配參考文獻(xiàn)的標(biāo)志代碼,根據(jù)標(biāo)志代碼確定參考文獻(xiàn)的類型;若無法匹配,說明此條參考文獻(xiàn)缺少標(biāo)志代碼,保存錯(cuò)誤信息后,繼續(xù)下一條參考文獻(xiàn)格式的提取;若匹配成功,接著以中括號為分割點(diǎn)把該條參考文獻(xiàn)分割成幾部分,檢測作者、出版社、出版年份等格式是否滿足要求;接下來獲取參考文獻(xiàn)的編號樣式,判斷參考文獻(xiàn)的編號是否連續(xù),若不連續(xù),保存錯(cuò)誤信息,若連續(xù),進(jìn)入下一步;最后統(tǒng)計(jì)參考文獻(xiàn)條目的數(shù)目,保存起來用于對比模塊。檢測參考文獻(xiàn)連續(xù)性的方法如下:首先記錄并維護(hù)參考文獻(xiàn)的正確編號值,即編號應(yīng)為從1開始的連續(xù)自然數(shù),每次檢測到新的參考文獻(xiàn)條目后此值加1;接著判斷此參考文獻(xiàn)是手動編號還是自動編號,若是手動編號,利用正則表達(dá)式獲取編號,然后判斷是否和正確編號值相同,若是自動編號只需檢測自動編號開始的參考文獻(xiàn)編號是否和正確編號值相同。(2)圖和表所在章節(jié)的標(biāo)題名稱提取首先用鏈表保存章節(jié)標(biāo)題所在的段落的位置信息,即索引值;然后獲取圖、表的索引,用圖、表的索引值和鏈表中的各個(gè)值依次比較,直到鏈表中的值大于此值為止,則鏈表中的前一個(gè)數(shù)值就是該圖、表所在章節(jié)標(biāo)題的位置;最后根據(jù)此索引即可得到標(biāo)題名稱。
4對比模塊
對比模塊的功能是將格式提取模塊提取出的待測論文中的格式特征與論文模板中的規(guī)則進(jìn)行對比,將對比結(jié)果不一致格式問題輸出到檢測報(bào)告中。該模塊分為規(guī)則配置文件、規(guī)則對比子模塊、報(bào)告生成子模塊三個(gè)部分。
4.1規(guī)則配置文件
規(guī)則配置文件包含了模板論文規(guī)定的規(guī)則,是檢測待測論文正確與否的標(biāo)準(zhǔn)。在調(diào)用規(guī)則配置文件時(shí),首先由單元定位模塊確定當(dāng)前檢測的位置在論文中所屬的部分,然后檢測該部分是否已存在XML格式的配置文件,若存在,則進(jìn)入規(guī)則對比子模塊;若不存在,則說明當(dāng)前部分沒有設(shè)置格式要求,結(jié)束當(dāng)前部分的檢測。
4.2規(guī)則對比子模塊
首先獲取單元定位模塊的結(jié)果,判斷當(dāng)前要檢測的段落是待測論文的哪一部分,在規(guī)則配置文件中找到模板論文相應(yīng)的規(guī)則,將格式提取模塊提取到的該部分的格式信息與相應(yīng)的規(guī)則配置文件中的規(guī)則進(jìn)行對比,若該格式特征與規(guī)則配置文件中的規(guī)則一致,則說明該格式正確;反之將錯(cuò)誤信息交由報(bào)告生成子模塊處理。
4.3報(bào)告生成子模塊
首先獲取生成報(bào)告的保存路徑,若用戶未自定義,默認(rèn)路徑設(shè)置為該待測論文的上傳路徑;接著獲取在規(guī)則配置文件中保存的所有待檢測的特定部分的節(jié)點(diǎn)信息,依次遍歷每個(gè)節(jié)點(diǎn);獲取節(jié)點(diǎn)中保存的該節(jié)點(diǎn)對應(yīng)的名稱,從而找到對應(yīng)的錯(cuò)誤信息的保存位置;將尋找到的錯(cuò)誤信息編號后保存到檢測報(bào)告中,最終生成一份檢測報(bào)告。
5實(shí)驗(yàn)及分析
在編程結(jié)束后,共進(jìn)行了開發(fā)人員測試和用戶測試兩方面測試,下面是兩種測試環(huán)境下的具體分析。
5.1開發(fā)者測試
為了實(shí)現(xiàn)快速檢測大批量、相同格式要求論文的目的,檢測單篇論文的程序被進(jìn)行了批處理,在批處理程序中選擇需要檢測的部分,包括封面、獨(dú)創(chuàng)性聲明、標(biāo)題、摘要、目錄、正文、頁眉頁腳、表格、圖形、參考文獻(xiàn)、授權(quán)書等十一個(gè)部分。在.NET及Java環(huán)境下,對包含46篇論文的論文集檢測結(jié)果如下:46篇論文全部檢測成功,共用時(shí)33秒,平均0.717秒一篇。
5.2用戶測試
本系統(tǒng)于2016年6月1日正式上線,在2016年6月本科生畢業(yè)期間共收到來自全校的500余篇論文的上傳,其中不同的論文317篇,剩余的200余次上傳為同一用戶在修改論文的過程中不斷地使用本系統(tǒng)進(jìn)行檢測與修正,最終修正為格式無誤的論文。在2016年9月研究生畢業(yè)期間,共收到來自23名用戶的50余篇不同的研究生論文。
6結(jié)語
學(xué)位論文格式自動檢測系統(tǒng)可以根據(jù)論文模板,自動對待測論文進(jìn)行格式檢測,具有自動化程度高、檢測速度快、檢測準(zhǔn)確率高等優(yōu)點(diǎn),可大幅降低畢業(yè)生和指導(dǎo)教師的工作量,提高工作效率。下一步工作可重點(diǎn)考慮在線配置檢測規(guī)則,以提高本系統(tǒng)對不同學(xué)校論文模板的適用性。
作者:葉秀云 劉德正 單位:大連理工大學(xué)軟件學(xué)院