本發(fā)明涉及文檔自動生成技術(shù)領(lǐng)域,更具體的涉及一種基于工作序列的文檔自動生成模型的構(gòu)建方法。
背景技術(shù):
隨著計算機的普及和信息化技術(shù)的發(fā)展,使用字處理軟件撰寫文檔、完成工作報告,已經(jīng)成為人們生活工作必不可少的事情。微軟Office Word因滿足辦公需求、功能齊全、操作方便,已經(jīng)成為流行的應(yīng)用軟件。在數(shù)據(jù)展示方面,使用Word可以制作圖、問、表并茂的文檔,具有一些報表工具不可替代的優(yōu)點,包括多層次嵌套表格、斜線表格等;在專業(yè)文檔方面,Word支持復(fù)雜的數(shù)學(xué)公式編輯和格式化呈現(xiàn),支持對象嵌入擴展功能。
在企業(yè)生產(chǎn)環(huán)境中,因業(yè)務(wù)的連續(xù)性和重復(fù)性,工作過程中需要編制的檢測報告、技術(shù)方案書、計算書等文檔是重復(fù)發(fā)生的行為。同一類型的文檔,在格式、結(jié)構(gòu)和內(nèi)容方面往往相似,在數(shù)據(jù)分析和結(jié)論評價方面常常不同。如果所有文檔的編制工作全部由手工完成,無疑工作量巨大,而且因人為原因?qū)е挛臋n數(shù)據(jù)紕漏的風(fēng)險極大。
值得慶幸的是Word不僅僅是一個文字編輯軟件,還是一個可擴展編程開發(fā)環(huán)境,可以通過程序?qū)ord進行二次開發(fā)自動生成文檔,以滿足用戶的特定要求。目前,有關(guān)文檔自動生成的研究取得了初步的進展,結(jié)合具體的行業(yè),出現(xiàn)了一些成功的案例,但仍缺乏有效的理論支持。
早期文檔自動生成的研究主要集中在Word二次開發(fā)的文檔生成技術(shù)等方面(如報告生成、試卷生成、文檔水印、自動排版、公式嵌入、數(shù)據(jù)填充等),開發(fā)技術(shù)使用VBA和OLE較為常見。這些研究結(jié)合具體的應(yīng)用場景解決了一些實際問題,具有一定的現(xiàn)實意義。
在生成文檔時使用模板是通用的做法:將一篇規(guī)范的通用文檔中可被替換的部分采用插入批注的形式設(shè)置標(biāo)簽,通過標(biāo)簽查詢與替換實現(xiàn)文檔生成。葛芬等使用COM Add-In技術(shù)實現(xiàn)了_IDTExtensibility2派發(fā)接口,制作了模板定制工具,構(gòu)建了模板數(shù)據(jù)庫,實現(xiàn)了Word文檔的自動生成。李自勝等采用XML技術(shù),對文檔模板進行了結(jié)構(gòu)化設(shè)計,將文檔內(nèi)容歸納為既有文本、輸入文本、單選文本和多選組合文本4種類型,分別采用編輯框、單選框和復(fù)選框控件界面,從而降低了文檔處理的難度。
然而在企業(yè)生產(chǎn)環(huán)境中,待生成的目標(biāo)文檔并非簡單地用數(shù)據(jù)替換模板中的標(biāo)簽,文檔中嵌入的數(shù)據(jù)往往來自于數(shù)據(jù)庫或依賴企業(yè)的某些業(yè)務(wù)系統(tǒng)。這些數(shù)據(jù)有些能直接從數(shù)據(jù)庫查詢得到;有些分散在業(yè)務(wù)系統(tǒng)中,需要按工作流程在網(wǎng)絡(luò)中傳遞、匯總和審批;有些需要按自定義的規(guī)則經(jīng)過進一步的計算和處理。因此,文檔自動生成系統(tǒng)與工作流系統(tǒng)的結(jié)合成為一個研究方向。
曲明成等針對企業(yè)在編輯數(shù)據(jù)匯總文檔時因手動計算、人工檢驗造成效率低下且容易出錯等問題,結(jié)合工作流系統(tǒng)提出了一個文檔自動生成的數(shù)學(xué)模型。數(shù)據(jù)經(jīng)過工作流系統(tǒng)流轉(zhuǎn)、審批,文檔自動生成系統(tǒng)從中心數(shù)據(jù)庫抽取數(shù)據(jù)嵌入模板自動生成文檔。該模型清晰地描述了文檔生成過程中的公式換算、數(shù)據(jù)抽取與映射及模板替換的問題,在電力制造企業(yè)的復(fù)雜計算文檔自動化應(yīng)用成功。但是對于如何識別計算步驟之間的依賴關(guān)系,如何通過復(fù)雜的計算序列控制文檔生成過程,該模型沒有提及。
姜鵬等在防汛文檔智能生成模型構(gòu)建中,借鑒和改造了傳統(tǒng)的工作流概念,引入了有向圖表示工作流模型,并將模型應(yīng)用于防汛防旱簡報生成,從而快速生成格式規(guī)范、數(shù)據(jù)準(zhǔn)確、內(nèi)容完善的防汛文檔。作者在文中提出了使用有向圖的節(jié)點表示工作步驟的概念,用節(jié)點之間的邊表示數(shù)據(jù)流動關(guān)系。該文雖然給出了計算序列處理數(shù)據(jù)生成文檔的輪廓,但重點卻放在模板標(biāo)簽的查找替換算法和系統(tǒng)架構(gòu)實現(xiàn)上。
在現(xiàn)代工業(yè),尤其是在化工、機械、建筑等行業(yè)中,設(shè)計校核計算是工程設(shè)計過程中極其重要的一個環(huán)節(jié)。計算書的正確、有效及可靠性是保證工程設(shè)計質(zhì)量的重要條件,也是追溯設(shè)計源頭的重要依據(jù)。計算書中往往包含較多的計算步驟,步驟之間存在著依賴關(guān)系,步驟當(dāng)中嵌有計算變量。變量的取值依賴于上下文環(huán)境,主要來自三個方面:第一,通過數(shù)學(xué)公式的計算獲得;第二,通過業(yè)務(wù)數(shù)據(jù)庫查詢獲得;第三,通過用戶交輸入互獲得;對此,本人開發(fā)基于工作序列的文檔自動生成模型的構(gòu)建方法,針對文檔生成過程中需要計算和利用上下文數(shù)據(jù)的問題,借鑒工作流程的思想,明確了計算步驟、計算序列和工作序列的概念,給出了變量內(nèi)存棧和工作序列棧的定義,可依此建立一個基于工作序列的文檔自動生成模型,完善了公式計算引擎、工作序列計算引擎、模板標(biāo)簽替換和目標(biāo)文檔轉(zhuǎn)換的算法以及步驟,并在建筑結(jié)構(gòu)加固設(shè)計計算書的自動生產(chǎn)中得到應(yīng)用,經(jīng)過測試,達到了不同加固方法的計算書自動生成要求,極大地簡化了建筑加固設(shè)計的工作過程,顯著提高了工作效率。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明提供了一種基于工作序列的文檔自動生成模型的構(gòu)建方法,可實現(xiàn)公式計算引擎算法、工作序列計算引擎算法、模板標(biāo)簽替換算法和目標(biāo)文檔轉(zhuǎn)換算法,并能夠在建筑結(jié)構(gòu)加固設(shè)計計算書的自動生成中得到應(yīng)用,可達到不同加固方法的計算書自動生成要求,極大地簡化了建筑加固設(shè)計的工作過程,顯著提高了工作效率。
為解決上述技術(shù)問題,本發(fā)明的技術(shù)方案是:
一種基于工作序列的文檔自動生成模型的構(gòu)建方法,模型中包含模板文檔、中間文檔和目標(biāo)文檔,模板文檔由不變的文字和變量關(guān)鍵字組成,變量值來自內(nèi)存變量棧和工作序列棧,將變量值代替模板文檔中的變量,實現(xiàn)向中間文檔的轉(zhuǎn)換,再利用設(shè)定規(guī)則和算法,實現(xiàn)向目標(biāo)文檔的轉(zhuǎn)換,
步驟1、建立基于工作序列的文檔自動生成模型的基本結(jié)構(gòu):
基本機構(gòu)以文檔自動生成系統(tǒng)為核心,外部構(gòu)建公共數(shù)據(jù)構(gòu)造器、設(shè)計參數(shù)構(gòu)建器、計算序列構(gòu)造器和模板構(gòu)造器;
步驟2、模型系統(tǒng)的基礎(chǔ)設(shè)置:
包括定義變量規(guī)則、定義標(biāo)簽規(guī)則和定義運算符;
步驟3、公共數(shù)據(jù)處理:
首先定義公共數(shù)據(jù)規(guī)范,再編制接口文檔,最后導(dǎo)入公共數(shù)據(jù);
步驟4、設(shè)計數(shù)據(jù)處理:
包括定義設(shè)計數(shù)據(jù)規(guī)范,配置界面參數(shù),自動生成界面,采集保存數(shù)據(jù),導(dǎo)入設(shè)計數(shù)據(jù);
步驟5、工作序列定義:
維護計算步驟,維護工作序列,公式變量編輯器,公式驗證;
步驟6、文檔生成引擎:
構(gòu)建內(nèi)存變量棧,公式計算引擎,工作序列計算引擎,模板標(biāo)簽替換,文檔轉(zhuǎn)換與生成。
所述步驟1,其中公共數(shù)據(jù)構(gòu)造器,負責(zé)從個業(yè)務(wù)系統(tǒng)中提取數(shù)據(jù)構(gòu)成G集合,為模型運算提供基礎(chǔ)數(shù)據(jù);設(shè)計參數(shù)構(gòu)造器,根據(jù)配置文件生成標(biāo)準(zhǔn)化的UI程序界面,為用戶設(shè)計輸入提供支持,最后導(dǎo)入設(shè)計參數(shù)集P參與模型運算;計算序列構(gòu)造器,用來編輯和生成工作序列S集合,模型根據(jù)S集合表達的計算邏輯進行計算;模板構(gòu)造器,用來生成基于XML格式的模板文檔;文檔自動生成系統(tǒng),包括變量存儲器M,用來完成數(shù)據(jù)轉(zhuǎn)換、計算序列運算、模板數(shù)據(jù)填充和文檔生成,計算步驟如下
第一步:數(shù)據(jù)初始化,構(gòu)建初始內(nèi)存變量棧和計算序列棧,通過轉(zhuǎn)換函數(shù)將基礎(chǔ)數(shù)據(jù)和設(shè)計數(shù)據(jù)加載到內(nèi)存變量棧中;
第二步:啟動計算序列棧運算,識別并計算步驟公式和條件跳轉(zhuǎn)公式,并根據(jù)需要從內(nèi)存變量棧中取值,同時動態(tài)更新計算步驟所代表變量的值,并寫回到內(nèi)存變量棧中;
第三步:模板標(biāo)簽值替換,計算序列運算結(jié)束后,內(nèi)存變量棧和計算序列棧中有明確的值,遍歷模板提取標(biāo)簽,解析處變量名稱,從中查詢相應(yīng)的值替換,生成中間文檔;
第四步:目標(biāo)文檔生成,根據(jù)目標(biāo)文檔生成的規(guī)則,將中間文檔格式化成目標(biāo)文檔所要求的格式。
所述步驟2,其中定義變量規(guī)則,對內(nèi)存變量棧和計算序列棧進行定義,包括
定義1定義變量標(biāo)識K由模板文檔中的文字C′經(jīng)過函數(shù)GK(C′)轉(zhuǎn)化而來,即K=GK(C′);
定義2定義變量標(biāo)識K的類型為一個二元組K<μ,δ>,Kυ<μυ,δυ>為K的最終生成值。μ和δ代表了兩種不同類型的變量,μυ和δυ分別對應(yīng)它們的最終計算值;
定義3定義內(nèi)存變量γ為一個二元組γ<k,υ>,k為變量γ的標(biāo)識符,υ為變量γ的值,內(nèi)存變量空間R={γ};
定義4函數(shù)Ve=Ge(VE)將計算出VE的結(jié)果,Ve為算術(shù)公式的計算結(jié)果;
定義5函數(shù)Ke=Q(SE)將變量公式SE中的變量提取出來,SE中包括內(nèi)存變量和預(yù)設(shè)的計算操作符,Ke是從變量公式中提取的內(nèi)存變量標(biāo)識符集合;
定義6函數(shù)VE=C(M,SE,Ke)將變量公式SE轉(zhuǎn)化為算術(shù)公式VE,其中M為內(nèi)存變量棧
定義7定義內(nèi)存變量棧M為R的子集,內(nèi)存變量γ的標(biāo)識符在M中全局唯一,M包含讀取變量值和寫入變量兩種操作;
定義8函數(shù)Kυ=GV(M,K)從內(nèi)存棧M中讀取變量標(biāo)識符為K的變量值Kυ;
定義9函數(shù)SR(M,γ)定義將變量γ寫入內(nèi)存變量棧M,如果γ,k在M中出現(xiàn),那么SR將覆蓋原值,否則新增保存;
定義10定義計算序列棧S由計算步驟s組成,即S={s},計算步驟s為計算序列的計算單元;
定義11函數(shù)Ks=GS(S,K)定義從計算序列棧S中讀取變量標(biāo)識符K所指定步驟集合計算的結(jié)果集Ks;
模板標(biāo)簽包括模板變量標(biāo)簽、計算序列結(jié)果占位符標(biāo)簽和模板格式控制標(biāo)簽。
所述步驟6,文檔生成引擎:構(gòu)建內(nèi)存變量棧,公式計算引擎,工作序列計算引擎,模板標(biāo)簽替換,文檔轉(zhuǎn)換與生成,其中構(gòu)建內(nèi)存變量棧包括
定義12定義Rg為由系統(tǒng)預(yù)設(shè)參數(shù)集生成的內(nèi)存變量集合,記Rg={γg}={γ|γ=fg(g)∧g∈G},其中G為系統(tǒng)預(yù)設(shè)參數(shù)集合,g為G的元素,γg表示從集合G中轉(zhuǎn)換出的內(nèi)存變量元素,函數(shù)fg實現(xiàn)g→γg的轉(zhuǎn)換;
定義13定義Rp為業(yè)務(wù)設(shè)計參數(shù)集生成的內(nèi)存變量集合,記Rp={γp}={γ|γ=fp(p)∧p∈P},其中P為業(yè)務(wù)設(shè)計參數(shù)集合,p為P的元素,γp表示從集合P中轉(zhuǎn)換出的內(nèi)存變量元素,函數(shù)fp實現(xiàn)p→γp的轉(zhuǎn)換;
定義14定義Rs為由計算序列S生成的內(nèi)存變量集合,記Rs={γs}={γ|γ=fs(s)∧s∈S},其中S為計算序列,s為S的元素,γs表示從集合S中轉(zhuǎn)換出的內(nèi)存變量元素,函數(shù)fs實現(xiàn)s→γs的轉(zhuǎn)換;
定義15函數(shù)M=Rg+Rp+Rs,M為內(nèi)存變量棧,函數(shù)指明了M的組成,其中“+”表示并集運算,即相同的變量在并集運算時相同標(biāo)識符的變量的值會被新值覆蓋。
所述步驟6,文檔生成引擎:構(gòu)建內(nèi)存變量棧,公式計算引擎,工作序列計算引擎,模板標(biāo)簽替換,文檔轉(zhuǎn)換與生成,其中公式計算引擎,包括:①定義了表達式的操作符及優(yōu)先級;
②加載操作符及優(yōu)先級;
③取中序表達中的操作數(shù)或變量名并以列表返回,為變量替換時使用;
④計算中序數(shù)值表達式的值;
⑤中序表達式轉(zhuǎn)后序表達式;
⑥計算后序表達式的值;
⑦求兩個操作符的優(yōu)先級別;
⑧計算兩個操作數(shù)的表達式值;
⑨將兩數(shù)運算的表達式轉(zhuǎn)成word公式表達式形式。
所述步驟6,文檔生成引擎:構(gòu)建內(nèi)存變量棧,公式計算引擎,工作序列計算引擎,模板標(biāo)簽替換,文檔轉(zhuǎn)換與生成,其中工作序列計算引擎包括:
定義16定義計算步驟s<sk,se,υe,sυ,type,sc>為一個六元組,其中sk為變量標(biāo)識符,se為變量公式,υe為變量替換后的算術(shù)公式;sυ為算術(shù)公式運算結(jié)果值,sc為運算條件表達式,sc的計算結(jié)果決定了下一個參與運算的計算步驟元素的跳轉(zhuǎn)條件,他控制著計算序列的運算邏輯,計算步驟的類型s.type=enum{VAR,EXP,TXT,F(xiàn)UN},VAR表示s.se是一個內(nèi)存變量,參與計算時可以直接在M中取值;EXP表示s.se是一個由數(shù)值常量、內(nèi)存變量和運算符等組成的變量公式,在參與計算時,首先提取公式中的變量,然后依次在M中取值替換生成算術(shù)公式,最后計算算術(shù)公式的值作為計算步驟的值;TXT表示s.se是一個嵌入內(nèi)存變量的文本串,文本串中可以包含數(shù)值常量串、內(nèi)存變量以及它們組成的公式串,參與計算時,文本串中的內(nèi)存變量將被提取,內(nèi)存變量由對應(yīng)的值替換,公式串不參與算術(shù)運算;FUN表示s.se是一個自定義函數(shù),表現(xiàn)形式為一個格式化的文本串,串中可以包含數(shù)值常量串和內(nèi)存變量,參與運算時,首先取變量值替換自定義函數(shù)串的變量,然后對自定義函數(shù)串進行解析,最后在自定義函數(shù)庫中調(diào)用相關(guān)函數(shù)進行計算;
定義17函數(shù)Vc=Gc(SC)計算條件表達式SC的值,SC中可以包含若干數(shù)值串、內(nèi)存變量和條件運算符;
定義18函數(shù)Vf=Gf(FS)解析自定義函數(shù)串FS,分離函數(shù)名和參數(shù),并調(diào)用相關(guān)的自定義函數(shù)計算結(jié)果,F(xiàn)S中可以包括若干數(shù)值串和內(nèi)存變量,內(nèi)存變量根據(jù)上下文在內(nèi)存變量棧M中取值;
定義19定義計算步驟s的類型由一個四元組表示sk<w,x,y,z>,其中w,x,y,z分別代表了VAR,EXP,TXT,F(xiàn)UN類型的計算步驟,
計算步驟計算的過程描述
(1)由定義8、定義16可知:
w.υe=GV(M,w.se)
w.sυ=w.υe
(2)由定義5、定義6、定義4和定義16可知:
Kx=Q(x.se)
x.υe=C(M,x.se,Kx)
x.sυ=Ge(x.υe)
(3)由定義5、定義6和定義16可知:
Ky=Q(y.se)
y.υe=C(M,y.se,Ky)
y.sυ=y(tǒng).υe
(4)由定義5、定義6、定義4和定義17可知:
Kz=Q(z.se)
z.υe=C(M,z.se,Kz)
z.sυ=Gf(z.υe)
(5)由定義5、定義6、定義4、定義17可知:
Kc=Q(s.sc)
iNext=Gc(C(M,s.sc,Kc))
sNext=S[iNext]
其中iNext為下一個參與運算的步驟元素在計算序列棧中索引;sNext為下一個參與運算的步驟元素。
所述所述步驟6,文檔生成引擎:構(gòu)建內(nèi)存變量棧,公式計算引擎,工作序列計算引擎,模板標(biāo)簽替換,文檔轉(zhuǎn)換與生成,其中文檔轉(zhuǎn)換與生成包括對模板與文檔的定義:
定義20定義模板為一個二元組T<C,K>,C為模板文檔中不變的文字部分,K為模板文檔中的變量標(biāo)識符,K在模板文檔上下文中表示相同含義;
定義21定義中間文檔為一個二元組W′<C,U>,C為模板中不變的文字部分,U為模板文檔變量的在上下文計算后的結(jié)果值;
定義22函數(shù)Z(K,U)將K替換成U,其中K為文檔中的變量,U為模板變量的在上下文計算后的結(jié)果值;
定義23函數(shù)W=X(W′,Ru)將中間文檔轉(zhuǎn)換為目標(biāo)文檔,其中W′為中間文檔,W為最終的目標(biāo)文檔,Ru為中間文檔向目標(biāo)文檔轉(zhuǎn)換規(guī)則。
所述文檔轉(zhuǎn)換與生成中還包括計算邏輯的存儲定義:
定義24定義集合STO存儲了文檔生成過程中使用的計算邏輯,記STO={M,S,T,K,K<μ,δ>,Ru},其中變量分別表示:內(nèi)存變量棧、模板、模板變量、模板變量類型和中間文檔向目標(biāo)文檔的轉(zhuǎn)換規(guī)則;
定義25操作Get(STO)→T實現(xiàn)從STO中已存儲的計算邏輯提供給模板進行處理;
所述文檔生成的計算步驟如下:
A、U=Kυ<μυ,δυ>
B、W′<C,U>=Get(STO)→T<C,K>=Get(STO)→T<C,Z(K,U)>
=Get(STO)→T<C,Z(K,Kυ<μυ,δυ>)>
C、μ=GK(C′1),δ=GK(C′2)
D、μυ=GV(M,μ),δυ=GS(S,δ)
E、W′<C,U>=Get(STO)→T<C,Z(GK(C′),Kυ<μυ,δυ>)>
=Get(STO)→T<C,Z(GK(C′),Kυ<GV(M,μ),GS(S,δ)>)>
=Get(STO)→T<C,Z(GK(C′),Kυ<GV(M,GK(C′1)),GS(S,GK(C′2))>)>。
較現(xiàn)有技術(shù),本發(fā)明有益技術(shù)效果主要體現(xiàn)在:針對文檔生成過程中需要計算和利用上下文數(shù)據(jù)的問題,借鑒工作流程的思想,明確了計算步驟、計算序列和工作序列的概念,給出了變量內(nèi)存棧和工作序列棧的定義,可依此建立一個基于工作序列的文檔自動生成模型,完善了公式計算引擎、工作序列計算引擎、模板標(biāo)簽替換和目標(biāo)文檔轉(zhuǎn)換的算法以及步驟,并在建筑結(jié)構(gòu)加固設(shè)計計算書的自動生產(chǎn)中得到應(yīng)用,經(jīng)過測試,達到了不同加固方法的計算書自動生成要求,極大地簡化了建筑加固設(shè)計的工作過程,顯著提高了工作效率。
附圖說明
圖1:本發(fā)明的模型結(jié)構(gòu)示意圖;
圖2:本發(fā)明的公式引擎通用表達式的計算示例圖;
圖3:本發(fā)明的工作序列計算引擎算法流程圖;
圖4:本發(fā)明的計算書生成流程圖。
具體實施方式
以下結(jié)合附圖,對本發(fā)明的具體實施方式作進一步詳述,以使本發(fā)明技術(shù)方案更易于理解和掌握。
實施例1
如圖1、圖2、圖3和圖4所示,一種基于工作序列的文檔自動生成模型的構(gòu)建方法,模型中包含模板文檔、中間文檔和目標(biāo)文檔,模板文檔由不變的文字和變量關(guān)鍵字組成,變量值來自內(nèi)存變量棧和工作序列棧,將變量值代替模板文檔中的變量,實現(xiàn)向中間文檔的轉(zhuǎn)換,再利用設(shè)定規(guī)則和算法,實現(xiàn)向目標(biāo)文檔的轉(zhuǎn)換,
步驟1、建立基于工作序列的文檔自動生成模型的基本結(jié)構(gòu):
基本機構(gòu)以文檔自動生成系統(tǒng)為核心,外部構(gòu)建公共數(shù)據(jù)構(gòu)造器、設(shè)計參數(shù)構(gòu)建器、計算序列構(gòu)造器和模板構(gòu)造器;
步驟2、模型系統(tǒng)的基礎(chǔ)設(shè)置:
包括定義變量規(guī)則、定義標(biāo)簽規(guī)則和定義運算符;
步驟3、公共數(shù)據(jù)處理:
首先定義公共數(shù)據(jù)規(guī)范,再編制接口文檔,最后導(dǎo)入公共數(shù)據(jù);
步驟4、設(shè)計數(shù)據(jù)處理:
包括定義設(shè)計數(shù)據(jù)規(guī)范,配置界面參數(shù),自動生成界面,采集保存數(shù)據(jù),導(dǎo)入
設(shè)計數(shù)據(jù);
步驟5、工作序列定義:
維護計算步驟,維護工作序列,公式變量編輯器,公式驗證;
步驟6、文檔生成引擎:
構(gòu)建內(nèi)存變量棧,公式計算引擎,工作序列計算引擎,模板標(biāo)簽替換,文檔轉(zhuǎn)換與生成。
所述步驟1,其中公共數(shù)據(jù)構(gòu)造器,負責(zé)從個業(yè)務(wù)系統(tǒng)中提取數(shù)據(jù)構(gòu)成G集合,為模型運算提供基礎(chǔ)數(shù)據(jù);設(shè)計參數(shù)構(gòu)造器,根據(jù)配置文件生成標(biāo)準(zhǔn)化的UI程序界面,為用戶設(shè)計輸入提供支持,最后導(dǎo)入設(shè)計參數(shù)集P參與模型運算;計算序列構(gòu)造器,用來編輯和生成工作序列S集合,模型根據(jù)S集合表達的計算邏輯進行計算;模板構(gòu)造器,用來生成基于XML格式的模板文檔;文檔自動生成系統(tǒng),包括變量存儲器M,用來完成數(shù)據(jù)轉(zhuǎn)換、計算序列運算、模板數(shù)據(jù)填充和文檔生成,計算步驟如下
第一步:數(shù)據(jù)初始化,構(gòu)建初始內(nèi)存變量棧和計算序列棧,通過轉(zhuǎn)換函數(shù)將基礎(chǔ)數(shù)據(jù)和設(shè)計數(shù)據(jù)加載到內(nèi)存變量棧中;
第二步:啟動計算序列棧運算,識別并計算步驟公式和條件跳轉(zhuǎn)公式,并根據(jù)需要從內(nèi)存變量棧中取值,同時動態(tài)更新計算步驟所代表變量的值,并寫回到內(nèi)存變量棧中;
第三步:模板標(biāo)簽值替換,計算序列運算結(jié)束后,內(nèi)存變量棧和計算序列棧中有明確的值,遍歷模板提取標(biāo)簽,解析處變量名稱,從中查詢相應(yīng)的值替換,生成中間文檔;
第四步:目標(biāo)文檔生成,根據(jù)目標(biāo)文檔生成的規(guī)則,將中間文檔格式化成目標(biāo)文檔所要求的格式。
所述步驟2,其中定義變量規(guī)則,對內(nèi)存變量棧和計算序列棧進行定義,包括
定義1定義變量標(biāo)識K由模板文檔中的文字C′經(jīng)過函數(shù)GK(C′)轉(zhuǎn)化而來,即K=GK(C′);
定義2定義變量標(biāo)識K的類型為一個二元組K<μ,δ>,Kυ<μυ,δυ>為K的最終生成值。μ和δ代表了兩種不同類型的變量,μυ和δυ分別對應(yīng)它們的最終計算值;
定義3定義內(nèi)存變量γ為一個二元組γ<k,υ>,k為變量γ的標(biāo)識符,υ為變量γ的值,內(nèi)存變量空間R={γ};
定義4函數(shù)Ve=Ge(VE)將計算出VE的結(jié)果,Ve為算術(shù)公式的計算結(jié)果;
定義5函數(shù)Ke=Q(SE)將變量公式SE中的變量提取出來,SE中包括內(nèi)存變量和預(yù)設(shè)的計算操作符,Ke是從變量公式中提取的內(nèi)存變量標(biāo)識符集合;
定義6函數(shù)VE=C(M,SE,Ke)將變量公式SE轉(zhuǎn)化為算術(shù)公式VE,其中M為內(nèi)存變量棧
定義7定義內(nèi)存變量棧M為R的子集,內(nèi)存變量γ的標(biāo)識符在M中全局唯一,M包含讀取變量值和寫入變量兩種操作;
定義8函數(shù)Kυ=GV(M,K)從內(nèi)存棧M中讀取變量標(biāo)識符為K的變量值Kυ;
定義9函數(shù)SR(M,γ)定義將變量γ寫入內(nèi)存變量棧M,如果γ,k在M中出現(xiàn),那么SR將覆蓋原值,否則新增保存;
定義10定義計算序列棧S由計算步驟s組成,即S={s},計算步驟s為計算序列的計算單元;
定義11函數(shù)Ks=GS(S,K)定義從計算序列棧S中讀取變量標(biāo)識符K所指定步驟集合計算的結(jié)果集Ks;
模板標(biāo)簽包括模板變量標(biāo)簽、計算序列結(jié)果占位符標(biāo)簽和模板格式控制標(biāo)簽。
所述步驟6,文檔生成引擎:構(gòu)建內(nèi)存變量棧,公式計算引擎,工作序列計算引擎,模板標(biāo)簽替換,文檔轉(zhuǎn)換與生成,其中構(gòu)建內(nèi)存變量棧包括
定義12定義Rg為由系統(tǒng)預(yù)設(shè)參數(shù)集生成的內(nèi)存變量集合,記Rg={γg}={γ|γ=fg(g)∧g∈G},其中G為系統(tǒng)預(yù)設(shè)參數(shù)集合,g為G的元素,γg表示從集合G中轉(zhuǎn)換出的內(nèi)存變量元素,函數(shù)fg實現(xiàn)g→γg的轉(zhuǎn)換;
定義13定義Rp為業(yè)務(wù)設(shè)計參數(shù)集生成的內(nèi)存變量集合,記Rp={γp}={γ|γ=fp(p)∧p∈P},其中P為業(yè)務(wù)設(shè)計參數(shù)集合,p為P的元素,γp表示從集合P中轉(zhuǎn)換出的內(nèi)存變量元素,函數(shù)fp實現(xiàn)p→γp的轉(zhuǎn)換;
定義14定義Rs為由計算序列S生成的內(nèi)存變量集合,記Rs={γs}={γ|γ=fs(s)∧s∈S},其中S為計算序列,s為S的元素,γs表示從集合S中轉(zhuǎn)換出的內(nèi)存變量元素,函數(shù)fs實現(xiàn)s→γs的轉(zhuǎn)換;
定義15函數(shù)M=Rg+Rp+Rs,M為內(nèi)存變量棧,函數(shù)指明了M的組成,其中“+”表示并集運算,即相同的變量在并集運算時相同標(biāo)識符的變量的值會被新值覆蓋。
所述步驟6,文檔生成引擎:構(gòu)建內(nèi)存變量棧,公式計算引擎,工作序列計算引擎,模板標(biāo)簽替換,文檔轉(zhuǎn)換與生成,其中公式計算引擎,包括:①定義了表達式的操作符及優(yōu)先級;
②加載操作符及優(yōu)先級;
③取中序表達中的操作數(shù)或變量名并以列表返回,為變量替換時使用;
④計算中序數(shù)值表達式的值;
⑤中序表達式轉(zhuǎn)后序表達式;
⑥計算后序表達式的值;
⑦求兩個操作符的優(yōu)先級別;
⑧計算兩個操作數(shù)的表達式值;
⑨將兩數(shù)運算的表達式轉(zhuǎn)成word公式表達式形式。
所述步驟6,文檔生成引擎:構(gòu)建內(nèi)存變量棧,公式計算引擎,工作序列計算引擎,模板標(biāo)簽替換,文檔轉(zhuǎn)換與生成,其中工作序列計算引擎包括:
定義16定義計算步驟s<sk,se,υe,sυ,type,sc>為一個六元組,其中sk為變量標(biāo)識符,se為變量公式,υe為變量替換后的算術(shù)公式;sυ為算術(shù)公式運算結(jié)果值,sc為運算條件表達式,sc的計算結(jié)果決定了下一個參與運算的計算步驟元素的跳轉(zhuǎn)條件,他控制著計算序列的運算邏輯,計算步驟的類型s.type=enum{VAR,EXP,TXT,F(xiàn)UN},VAR表示s.se是一個內(nèi)存變量,參與計算時可以直接在M中取值;EXP表示s.se是一個由數(shù)值常量、內(nèi)存變量和運算符等組成的變量公式,在參與計算時,首先提取公式中的變量,然后依次在M中取值替換生成算術(shù)公式,最后計算算術(shù)公式的值作為計算步驟的值;TXT表示s.se是一個嵌入內(nèi)存變量的文本串,文本串中可以包含數(shù)值常量串、內(nèi)存變量以及它們組成的公式串,參與計算時,文本串中的內(nèi)存變量將被提取,內(nèi)存變量由對應(yīng)的值替換,公式串不參與算術(shù)運算;FUN表示s.se是一個自定義函數(shù),表現(xiàn)形式為一個格式化的文本串,串中可以包含數(shù)值常量串和內(nèi)存變量,參與運算時,首先取變量值替換自定義函數(shù)串的變量,然后對自定義函數(shù)串進行解析,最后在自定義函數(shù)庫中調(diào)用相關(guān)函數(shù)進行計算;
定義17函數(shù)Vc=Gc(SC)計算條件表達式SC的值,SC中可以包含若干數(shù)值串、內(nèi)存變量和條件運算符;
定義18函數(shù)Vf=Gf(FS)解析自定義函數(shù)串FS,分離函數(shù)名和參數(shù),并調(diào)用相關(guān)的自定義函數(shù)計算結(jié)果,F(xiàn)S中可以包括若干數(shù)值串和內(nèi)存變量,內(nèi)存變量根據(jù)上下文在內(nèi)存變量棧M中取值;
定義19定義計算步驟s的類型由一個四元組表示sk<w,x,y,z>,其中w,x,y,z分別代表了VAR,EXP,TXT,F(xiàn)UN類型的計算步驟,
計算步驟計算的過程描述
(1)由定義8、定義16可知:
w.υe=GV(M,w.se)
w.sυ=w.υe
(2)由定義5、定義6、定義4和定義16可知:
Kx=Q(x.se)
x.υe=C(M,x.se,Kx)
x.sυ=Ge(x.υe)
(3)由定義5、定義6和定義16可知:
Ky=Q(y.se)
y.υe=C(M,y.se,Ky)
y.sυ=y(tǒng).υe
(4)由定義5、定義6、定義4和定義17可知:
Kz=Q(z.se)
z.υe=C(M,z.se,Kz)
z.sυ=Gf(z.υe)
(5)由定義5、定義6、定義4、定義17可知:
Kc=Q(s.sc)
iNext=Gc(C(M,s.sc,Kc))
sNext=S[iNext]
其中iNext為下一個參與運算的步驟元素在計算序列棧中索引;sNext為下一個參與運算的步驟元素。
所述所述步驟6,文檔生成引擎:構(gòu)建內(nèi)存變量棧,公式計算引擎,工作序列計算引擎,模板標(biāo)簽替換,文檔轉(zhuǎn)換與生成,其中文檔轉(zhuǎn)換與生成包括對模板與文檔的定義:
定義20定義模板為一個二元組T<C,K>,C為模板文檔中不變的文字部分,K為模板文檔中的變量標(biāo)識符,K在模板文檔上下文中表示相同含義;
定義21定義中間文檔為一個二元組W′<C,U>,C為模板中不變的文字部分,U為模板文檔變量的在上下文計算后的結(jié)果值;
定義22函數(shù)Z(K,U)將K替換成U,其中K為文檔中的變量,U為模板變量的在上下文計算后的結(jié)果值;
定義23函數(shù)W=X(W′,Ru)將中間文檔轉(zhuǎn)換為目標(biāo)文檔,其中W′為中間文檔,W為最終的目標(biāo)文檔,Ru為中間文檔向目標(biāo)文檔轉(zhuǎn)換規(guī)則。
所述文檔轉(zhuǎn)換與生成中還包括計算邏輯的存儲定義:
定義24定義集合STO存儲了文檔生成過程中使用的計算邏輯,記STO={M,S,T,K,K<μ,δ>,Ru},其中變量分別表示:內(nèi)存變量棧、模板、模板變量、模板變量類型和中間文檔向目標(biāo)文檔的轉(zhuǎn)換規(guī)則;
定義25操作Get(STO)→T實現(xiàn)從STO中已存儲的計算邏輯提供給模板進行處理;
所述文檔生成的計算步驟如下:
A、U=Kυ<μυ,δυ>
B、W′<C,U>=Get(STO)→T<C,K>=Get(STO)→T<C,Z(K,U)>
=Get(STO)→T<C,Z(K,Kυ<μυ,δυ>)>
C、μ=GK(C′1),δ=GK(C′2)
D、μυ=GV(M,μ),δυ=GS(S,δ)
E、W′<C,U>=Get(STO)→T<C,Z(GK(C′),Kυ<μυ,δυ>)>
=Get(STO)→T<C,Z(GK(C′),Kυ<GV(M,μ),GS(S,δ)>)>
=Get(STO)→T<C,Z(GK(C′),Kυ<GV(M,GK(C′1)),GS(S,GK(C′2))>)>。
如圖1所示,根據(jù)以上定義,繪制出模型的整體結(jié)構(gòu),對模型結(jié)構(gòu)進行分析,方框之內(nèi)的功能主要目標(biāo)是完成數(shù)據(jù)轉(zhuǎn)換、計算序列運算、模板數(shù)據(jù)填充和文檔生成,稱之為文檔自動生成系統(tǒng),方框外部的公共數(shù)據(jù)構(gòu)造器(Global Creator,GCR)、設(shè)計參數(shù)構(gòu)建器(Design Creator,DCR)、計算序列構(gòu)造器(Sequences Creator)和模板構(gòu)造器(Template Creator,TCR)是模型的支撐系統(tǒng)。
GCR可看成是外部業(yè)務(wù)系統(tǒng)的抽象,負責(zé)從各業(yè)務(wù)系統(tǒng)中提取數(shù)據(jù)構(gòu)成G集合,為模型運算提供基礎(chǔ)數(shù)據(jù)。DCR可看成是設(shè)計系統(tǒng)的抽象。根據(jù)配置文件生成標(biāo)準(zhǔn)化的UI程序界面,為用戶設(shè)計輸入提供支持,最后導(dǎo)入設(shè)計參數(shù)集P參與模型運算。SCR用來編輯和生成工作序列S集合,模型根據(jù)S集合表達的計算邏輯進行計算。TCR是主要用來生產(chǎn)基于XML格式的模板文檔。
在文檔自動生成系統(tǒng)內(nèi)部,M是變量儲存器,主要計算步驟如下:
步驟1數(shù)據(jù)初始化,構(gòu)建初始內(nèi)存變量棧M和計算序列棧S。通過轉(zhuǎn)換函數(shù)fg和fp將基礎(chǔ)數(shù)據(jù)和設(shè)計數(shù)據(jù)加載到M中,形式描述為f({G,D})→M。
步驟2啟動計算序列棧S運算。S的計算邏輯由其自身決定,計算過程的關(guān)鍵任務(wù)是識別和計算步驟公式和條件跳轉(zhuǎn)公式。序列計算過程中,算法根據(jù)計算步驟公式變量的需要從M中取值,同時動態(tài)更新計算步驟所代表變量的值,并寫回到M中,直到所有步驟執(zhí)行結(jié)束。
步驟3模板標(biāo)簽值替換。計算序列運算結(jié)束后,M和S中有明確的值。遍歷模板提取標(biāo)簽,解析出變量名稱,從中查詢相應(yīng)的值替換,生成中間文檔。
步驟4目標(biāo)文檔生成。根據(jù)目標(biāo)文檔生成的規(guī)則,將中間文檔格式化成目標(biāo)文檔所要求的格式。
該模型結(jié)構(gòu)描述了文檔自動生成的邏輯,定義了文檔生成過程中的內(nèi)部結(jié)構(gòu)及操作,以下將上述操作封裝成系統(tǒng)的功能模塊,該系統(tǒng)包括系統(tǒng)基礎(chǔ)設(shè)置、公共數(shù)據(jù)處理、設(shè)計數(shù)據(jù)處理、工作序列定義和文檔生成引擎,每個模塊對應(yīng)的功能如表1所示:
表1文檔生成系統(tǒng)功能模塊
其中模板以XML文件的形式存在,模板標(biāo)簽包含三種類型:模板變量標(biāo)簽、計算序列結(jié)構(gòu)占位符標(biāo)簽和模板格式控制符標(biāo)簽,其中,
(1)模板變量標(biāo)簽,使用“{$”和“$}”界定標(biāo)簽標(biāo)識符,如{$f#a$}表示變量f#a,在工作序列計算完成之后,該變量的值可直接從內(nèi)存棧中讀取并替換,在文檔中,變量需格式化呈現(xiàn),引入“#”表示下前,“$”表示上簽,如變量f#a在文檔中呈現(xiàn)fa。
(2)計算序列結(jié)構(gòu)占位符標(biāo)簽,使用“{”和“}”界定標(biāo)簽標(biāo)識符,格式為{starIndex-endIndex},它是起始計算步驟號starIndex到結(jié)束計算步驟號endIndex執(zhí)行結(jié)果的占位符。
(3)模板格式控制標(biāo)簽,模板XML向Word文件轉(zhuǎn)換的過程中,通過該標(biāo)簽控制輸出格式,如:Setfont、Settext、paragraph、Table、Merge、Setcell、Cell、subscript、superscript、Field、Header、Footer等。
其中,公式計算引擎的主要作用是完成通用表達式的識別與運算,如圖2所示,表達式計算時具有通用性,不僅能根據(jù)表達計算最終的結(jié)果,還能識別變量表達式,并將計算的過程格式化輸出到最終的Word中呈現(xiàn)。這涉及如下幾個方面的問題:(1)能夠識別表達式字符串運算邏輯;(2)能夠從表達式串中分離變量;(3)能夠?qū)μ鎿Q數(shù)值的表達式進行運算;(4)能夠?qū)ψ址磉_式和數(shù)值表達式進行形式化表示,公式計算引擎中定義的操作摘要如下:
·OperatorPrority定義了表達式的操作符及操作符優(yōu)先級;
·LoadOperatorAndPrority加載操作符及優(yōu)先級字典;
·ValidInOrderExp校驗中序表達式是否合法;
·GetInOrderOperands取中序表達中的操作數(shù)或變量名,以列表返回,為變量替換時使用;
·CalcInOrder計算中序數(shù)值表達式的值;
·InOrderToPostOrder中序表達式轉(zhuǎn)后序表達式;
·CalcPostOrder計算后序數(shù)值表達式的值;
·CompareTwoOperatorSPriority求兩個操作符的優(yōu)先級別;
·CalcTwoNum計算兩個操作數(shù)的表達式值;
·ToWordExpString將兩數(shù)運算的表達式轉(zhuǎn)車Word公式表達式形式。
如圖3所示,工作序列計算引擎的核心是執(zhí)行工作序列的計算,一個工作序列可以存在著若干個計算序列,每個計算序列包含若干個計算步驟。工作序列計算引擎執(zhí)行前,所有的公共基礎(chǔ)數(shù)據(jù)和設(shè)計業(yè)務(wù)數(shù)據(jù)均在內(nèi)存變量棧中準(zhǔn)備好;執(zhí)行過程中,運算所需的數(shù)據(jù)根據(jù)上下文從內(nèi)存棧中取值,計算步驟相關(guān)的屬性值在運算的被更新,計算步驟計算結(jié)果更新到內(nèi)存棧中。
工作序列計算引擎算法執(zhí)行完成以后,如圖4所示,將運算的過程數(shù)據(jù)保存在當(dāng)前計算實例的內(nèi)存變量棧中,程序控制權(quán)交給模板數(shù)值填充算法。填充算法查找對應(yīng)的模板XML文件,將內(nèi)存變量棧中的變量值替換到模板中,生成XML中間文檔,程序控制權(quán)交給Word文檔生成算法,將XML中間文檔轉(zhuǎn)換成目標(biāo)文檔。
以下以“鋼筋混凝土結(jié)構(gòu)梁外貼鋼板加固方法”為例進行應(yīng)用驗證,其參數(shù)配置步驟如下:
(1)對加固設(shè)計方法中要用到的加固設(shè)計行業(yè)的現(xiàn)行國家標(biāo)準(zhǔn)和行業(yè)標(biāo)準(zhǔn)數(shù)據(jù)進行初始化;
(2)對加固方法的計算流程進行分析,找出設(shè)計過程中用到的變量;
(3)對變量進行分類、識別出哪些變量是在加固設(shè)計時與用戶進行交互,對這些變量使用界面參數(shù)配置工作進行建庫,從而設(shè)計出加固設(shè)計界面;
(4)對計算流程進行規(guī)劃,把計算過程變成一系列具有邏輯關(guān)系的計算步驟,使用工作序列生成工具進行建模;
(5)設(shè)計計算書轉(zhuǎn)換所需的XML文檔
上述步驟完成之后,接著對加固方法進行調(diào)試,調(diào)試成功后,就可以通過用戶界面生成器產(chǎn)生加固設(shè)計界面,獲得設(shè)計參數(shù),啟動工作序列計算自動生成計算書。
為了動態(tài)生成用戶界面獲得加固設(shè)計數(shù)據(jù)還需配置界面參數(shù),加固方法的就算過程是與需要加固的建筑構(gòu)件的部位相關(guān)的,一個建筑構(gòu)件的多個部位可能需要使用到相同的參數(shù),因此一個加固方法的參數(shù)是具有層次的。
加固方法的工作序列配置是一個復(fù)雜的過程,梁加固計算工作序列涉及到5個計算序列:梁跨中抗彎、左支座抗彎、左支座抗剪、右支座抗彎、右支座抗剪。
外粘鋼板梁加固包含5個計算序列,每個計算序列的結(jié)構(gòu)都出現(xiàn)在計算書中,因此為每個計算序列指定一個模板,L-B-0模板用于轉(zhuǎn)換計算書中的變量表格,表格中的數(shù)據(jù)來源于加固設(shè)計完成后的內(nèi)存變量棧;L-B-1模板用于轉(zhuǎn)換計算書中的梁跨中抗彎序列。
當(dāng)然,以上僅是本發(fā)明的具體應(yīng)用范例,對本發(fā)明的保護范圍不構(gòu)成任何限制。凡采用等同變換或者等效替換而形成的技術(shù)方案,均落在本發(fā)明權(quán)利保護范圍之內(nèi)。