劉友洪+肖文杰+胡彪+鄒澤順+駱鳳姣
摘要:在Eclipse環(huán)境下,利用實現(xiàn)了VBA接口的Jacob word接口,對Microsoft Word軟件進行二次開發(fā),開發(fā)了一款能夠識別模板論文的文字,圖片,表格等格式,并且將其應(yīng)用到待排版論文中去的自動調(diào)整系統(tǒng),進而實現(xiàn)了學位論文格式的規(guī)范化。
關(guān)鍵詞:論文排版;二次開發(fā);格式識別;自動調(diào)整
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2018)02-0065-03
本科學位論文作為評價高校本科生學習質(zhì)量的重要指標,對于高校和大學生都非常重要。隨著高等教育的不斷發(fā)展,本科學位論文除了在內(nèi)容和創(chuàng)新方面有很高的要求之外,論文的格式同樣也備受關(guān)注。目前學位論文的格式調(diào)整工作還是由學生本人完成,指導教師糾正。一方面,學生調(diào)整論文的格式需要不少時間,從而導致在內(nèi)容創(chuàng)新上花費的精力相對更少,不僅如此,調(diào)整格式時也難免會出現(xiàn)錯誤;另一方面,指導教師發(fā)現(xiàn)論文中存在的格式錯誤也同樣不易。因此,如果能根據(jù)論文格式規(guī)范標準,利用當今發(fā)達的軟件技術(shù)來自動完成論文格式的規(guī)范工作,將會為學生和指導教師減少不必要的工作量,讓他們將更多精力集中在內(nèi)容創(chuàng)新方面,進而提高學術(shù)論文的質(zhì)量。目前市場上雖然有排版軟件,但是針對學位論文的卻并不多,而能夠自動識別格式規(guī)范并自動調(diào)查論文格式的軟件鳳毛麟角。因此就市場需求來說,開發(fā)一款專業(yè)的學位論文格式規(guī)范自動調(diào)整系統(tǒng)也顯得很有必要。
1 開發(fā)環(huán)境
1.1 VBA
Visual Basic for Applications(VBA)是Visual Basic的一種宏語言,是微軟開發(fā)出來在其桌面應(yīng)用程序中執(zhí)行通用的自動化(OLE)任務(wù)的編程語言1。主要用于擴展Windows的應(yīng)用程序功能,特別是Microsoft Office軟件。它能夠通過語言中的對象及對象的屬性來對Office文檔等對象的各類屬性進行讀取和修改,從而實現(xiàn)應(yīng)用軟件的可編程化。同時Microsoft Office軟件也為VBA語言提供了很好的開發(fā)環(huán)境,在軟件中不僅可以直接執(zhí)行VBA宏代碼,并且還能通過錄制VBA宏代碼的方式實現(xiàn)從操作到代碼的逆向轉(zhuǎn)換,更為程序開發(fā)提供了方便。本系統(tǒng)在開發(fā)過程中將VBA開發(fā)手冊與錄制宏的方式結(jié)合起來,從而大大提高開發(fā)的效率。
1.2 Jacob
Jacob接口通過在Java中調(diào)用com接口自動組件(VBA),實現(xiàn)了一種簡單,靈活的Java與COM的通信方式。在實現(xiàn)了Jacob接口的Java系統(tǒng)中,絕大多數(shù)事物和事物的屬性都可以采用不同類型的對象來表示1,其中包括:
1) word應(yīng)用對象 ActiveXComponent word
2) word文檔集對象 Dispatch Documents
3) word文檔對象 Dispatch wordFile
4) 光標及區(qū)域?qū)ο?Dispatch selection,range
5) 其他文檔屬性對象
而對于對象的操作采用的是鏈式操作法:
Dispatch 論文文檔 = Dispatch.get(word,”Document”).toDispatch();
Dispatch 段落 = Dispatch.call(論文文檔,”Item :1”).toDispatch();
因而可以利用Jacob接口和Java代碼中調(diào)用文檔的各個屬性和和方法,可以實現(xiàn)對文檔格式的讀取和應(yīng)用,進而滿足了本系統(tǒng)的開發(fā)需求。
2 系統(tǒng)整體結(jié)構(gòu)設(shè)計
為了能夠提高系統(tǒng)的可讀性和可維護性,系統(tǒng)按照自頂向下的方法對系統(tǒng)功能結(jié)構(gòu)進行了設(shè)計。按照模塊的功能來分,系統(tǒng)可以被分為三個模塊,分別是格式的讀取和存儲模塊,格式設(shè)置模塊,自動生成目錄模塊。其中,格式讀取和存儲模塊可分為讀取頁面屬性、讀取正文格式、讀取頁眉頁腳等功能;格式設(shè)置模塊可分為設(shè)置文檔頁面屬性、刪除文檔多余符號、設(shè)置文檔正文格式、設(shè)置文檔頁眉頁腳格式等功能。具體的系統(tǒng)模塊劃分如圖1所示。
針對word中格式的多樣性和不定長性,系統(tǒng)采用的數(shù)據(jù)存儲結(jié)構(gòu)是全局變量String數(shù)組+鏈表的存儲結(jié)構(gòu)。讀取和存儲模塊通過導入word文檔,獲得文檔的控制和修改權(quán)限,進而對文檔的屬性和內(nèi)容格式進行讀取,并且將其轉(zhuǎn)換為String類型,最終基本有序的存放在數(shù)組當中。格式設(shè)置模塊首先打開需要進行排版的文檔,通過定位算法查找到文檔的可調(diào)整部分,并對可調(diào)整部分中被認定的無用符號進行刪除,最后再按照指定的順序?qū)ξ臋n屬性和文檔內(nèi)容的格式進行自動調(diào)整。
3 核心算法及優(yōu)化
3.1 關(guān)鍵位置定位
被調(diào)整格式的論文內(nèi)容可能包含有不需要進行調(diào)整的部分,如封面、保密協(xié)議等,因而在進行格式讀取或調(diào)整之前,需要尋找合適分界點,來對文檔的待調(diào)整內(nèi)容進行劃分1。經(jīng)過對文檔結(jié)構(gòu)的分析,系統(tǒng)需要尋找到分界點就是“目錄”。由于沒有對待排版文檔做任何的要求,因而文檔的內(nèi)容有很大的復雜性。通過歸納,待排版文檔內(nèi)容可能存在如下兩種情況:第一種情況是待排版文檔包含“目錄”段落,在上述情況下,定位算法在目錄的上方尋找到“目錄”段;第二種情況即待排版文檔不包含“目錄”,由于摘要段落是一篇完整論文所必備的成分,針對上述情況,定位算法借助“摘要”段落進行查找。第一種算法結(jié)構(gòu)描述如下:
將光標定位到摘要段落起始位置;
While(遍歷摘要段落之前的每一段)
{
獲取該段落的區(qū)域;
進行區(qū)域的文字分析;
If(包含“目”并且包含“錄”并且不包含其他文字)
{
記錄當前段落位置,退出循環(huán);endprint
}}
上述尋找文檔關(guān)鍵位置算法的前提是“目錄”段落的存在,然而通常文檔可能并不具有這個條件。為了使系統(tǒng)具有更強的適用性,系統(tǒng)在關(guān)鍵位置查找失敗后將觸發(fā)自動插入算法,在合適的位置插入“目錄”段落。該算法的關(guān)鍵點在于尋找一個合適的插入點,通過文檔的必要的部分(摘要段)可以實現(xiàn)。
3.2 段落格式調(diào)整
根據(jù)論文段落調(diào)整格式的屬性值不同,可將段落分為兩種類型,第一種是文檔中的非正文部分,如摘要、關(guān)鍵詞等,調(diào)整的屬性包括Font(字體)、Bold(加粗)、Size(大?。┑龋坏诙N是文檔中的正文段落進行調(diào)整,調(diào)整的屬性包括Font(字體)、Bold(加粗),Size(大?。?、Alignment(對齊方式)、FirstLineIndent(首行縮進)、SpaceBefore(段前)、SpaceAfter(段后)等10種屬性。由于正文段落中可能包含標題、表格、圖片以及正文內(nèi)容,而上述幾種形式的屬性都不一致,因此需要區(qū)別對待。考慮到表格和圖片格式與文字的不同,可另處理。因此本節(jié)所述的段落格式調(diào)整只考慮正文段落中的標題和正文內(nèi)容。段落正文與標題有一定字符數(shù)的限制,據(jù)統(tǒng)計,段落正文字符數(shù)至少是40個字,而標題所包含字符則要求少于40個字,因此對于標題與段落正文的區(qū)分可通過所包含的字符數(shù)來分析。
具體而言,段落格式調(diào)整的步驟如下:系統(tǒng)首先通過上節(jié)提到的定位算法,定位文檔的起始點;接著對起始點之后的每個段落進行分析。在對段落進行分析過程中,系統(tǒng)通過Rang對象獲得待分析段落區(qū)域相對于待排版文檔起始點的起始位置(start)和結(jié)束位置(end)。接著根據(jù)區(qū)域包含的內(nèi)容和字符數(shù)進行判定。如果段落區(qū)域包含表格區(qū)域或者圖片區(qū)域(特殊區(qū)域另做處理),則跳過當次循環(huán)。否則統(tǒng)計待分析段落區(qū)域所包含的字符數(shù),如果超過40個字,則直接判定為段落正文,可根據(jù)段落正文屬性進行調(diào)整;否則判定為標題,至于是標題級別可根據(jù)下節(jié)的標題級別判定算法進行分析。具體的算法流程如圖2所示:
3.3 標題等級識別
在段落格式的調(diào)整過程中,標題等級識別的正確性不僅影響到段落的格式,而且還會導致后期自動生成目錄的錯誤,因此這是整個系統(tǒng)的關(guān)鍵步驟。本系統(tǒng)在進行標題等級識別時,首先進行的字符數(shù)判定,而對于字符數(shù)判定合格的段落,則判定為標題。對于標題等級的識別,有兩種算法。第一種識別算法是對段落的大綱等級(OutlineLevel)進行識別和讀取,由于論文作者常常忽略了段落大綱級別的設(shè)置,因此第一種算法在很多時候往往準確度不高,因此系統(tǒng)采用第二種識別方案,即對段落的前置序號如(1.1.2)2進行識別,系統(tǒng)根據(jù)前置序號的“.”字符與數(shù)字字符的數(shù)量來綜合分析。為了消除正文中可能出現(xiàn)與前置序號類似的字符序列,系統(tǒng)對前置序號的區(qū)域進行了嚴格的限定。第二種算法的具體描述如下。
將光標定位到段落的起始位置
While(遍歷段落區(qū)域的字符)
If(當前字符為數(shù)字)
數(shù)字字符數(shù)加一;
標記若下一個字符為“.”則有效;
Else if(如果當前字符為“.”并且字符有效)
“.”字符數(shù)加一;
標記若下一個字符為“.”則無效;
Else if(如果當前字符為“ ”)
跳過此次循環(huán);
Else
序號區(qū)域結(jié)束,結(jié)束循環(huán);
通過上述算法,系統(tǒng)可以獲得有效的數(shù)字字符個數(shù)p和“.”字符個數(shù)n。由于一級標題在格式調(diào)整方面有著一定特殊性,因此將一級標題進行單獨處理,系統(tǒng)規(guī)定當 p=1并且n<2的情況為一級標題。其余當n!=0&&p>1的情況為 n+1級標題。
4 系統(tǒng)實現(xiàn)效果
本系統(tǒng)是為了方便本科生對畢業(yè)論文進行格式調(diào)整而開發(fā)的系統(tǒng),因而我們采用的簡潔的軟件用戶使用界面,用戶只需要選擇模板文檔和待排版的文檔即可自動進行排版。經(jīng)過測試,待字數(shù)10000字左右的待排論文,排版過程平均耗時為3.5分鐘。論文格式調(diào)整前與調(diào)整后的效果圖如圖3、圖4所示。
5 結(jié)束語
本系統(tǒng)不是僅能對一類論文進行論文格式調(diào)整,而是對于大部分類型的論文,在用戶提供模板的前提下,均能準確的進行自動調(diào)整。本系統(tǒng)系統(tǒng)不僅極大地解放了人工勞動,而且相對于人工,其具有更高的準確性。
目前,本系統(tǒng)已經(jīng)投入使用,雖然其設(shè)計思路和代碼仍有一定的優(yōu)化空間,但已經(jīng)能夠基本實現(xiàn)論文排版要求,在提高自動排版的準確率同時減少花費的時間,使其更加智能化、人性化。
參考文獻:
[1] 李愛玲, 李湘江. 基于VBA的Word文檔自動評閱技術(shù)研究[J]. 科學技術(shù)與工程, 2008, 8(17).
[2] 金保華, 李金旭. 基于JACOB的Java通用WordWriter組件設(shè)計[J]. 鄭州輕工業(yè)學院學報:自然科學版, 2001, 26(3).
[3] 何偉平, 張曉東. 學位論文自動規(guī)范化排版系統(tǒng)的設(shè)計[J]. 廣東化工, 2015, 1(42).
[4] 潘若瑛, 張忠能. 多模板多格式論文校驗與自動排版系統(tǒng)的研究[J]. 微型電腦應(yīng)用, 2013, 29(3).endprint