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