王霞文 劉浩
【摘 要】數(shù)理公式作為知識體系中的重要組成部分,在基于Web的網(wǎng)絡(luò)教學(xué)、信息發(fā)布、學(xué)術(shù)交流等方面起著非常重要的作用。然而在目前的Web環(huán)境下,數(shù)理公式的檢索問題一直困擾著用戶。本文設(shè)計(jì)了一個(gè)公式檢索系統(tǒng),可以實(shí)現(xiàn)數(shù)學(xué)公式的在線輸入及準(zhǔn)確的檢索。系統(tǒng)使用JSP技術(shù)開發(fā)前天界面,Oracle作為后臺數(shù)據(jù)庫,MathML數(shù)學(xué)標(biāo)記語言作為數(shù)學(xué)公式的描述語言,通過設(shè)計(jì)在線公式編輯模塊,用戶可以所見即所得的編輯數(shù)學(xué)公式,而公式在系統(tǒng)中存儲(chǔ)為MathML代碼形式,因此可以通過代碼的匹配實(shí)現(xiàn)數(shù)學(xué)公式的檢索。
【關(guān)鍵詞】公式檢索;在線公式編輯;MathML
0 引言
科技飛速發(fā)展的今天,數(shù)學(xué)公式的應(yīng)用越來越廣泛。然而WEB技術(shù)對數(shù)學(xué)符號、公式和特殊符號的支持還十分有限。目前微軟的IE瀏覽器仍無法直接支持?jǐn)?shù)學(xué)公式的顯示。
目前,Web上處理數(shù)學(xué)公式問題的方法主要有以下四種:
(1)圖片法。Web發(fā)布者先通過MathType等客戶端公式編輯器來編輯公式并將其轉(zhuǎn)換為圖片(JPG或JIF格式),然后嵌入到HTML網(wǎng)頁中,最后公式以圖片的形式在客戶端的瀏覽器中顯示。這種方式只能實(shí)現(xiàn)實(shí)現(xiàn)公式的顯示,無法對其查詢。
(2)使用專用的數(shù)學(xué)公式的瀏覽器插件。有些公司為了配合本公司自己的教學(xué)軟件或教學(xué)網(wǎng)站,設(shè)計(jì)了專用的插件。訪問者要觀看數(shù)理公式,必須先要下載這些專用的瀏覽器插件。這種方式的主要缺點(diǎn)有公式復(fù)用性差;軟件獨(dú)立性差。
(3)使用LaTex。LaTex是一套基于習(xí)慣性書寫思維的數(shù)學(xué)公式表示方法。一些大的軟件公司開發(fā)一些專用的LaTex瀏覽器插件,通過這種方式。瀏覽器可以直接觀看嵌入在HTML中的公式符號。這種方式的優(yōu)點(diǎn)是LaTex文檔的操作簡潔,復(fù)用性好;缺點(diǎn)是LaTex不是一種標(biāo)記語言,在網(wǎng)絡(luò)應(yīng)用和數(shù)據(jù)的格式化標(biāo)準(zhǔn)化方面的擴(kuò)展能力較差。
(4)基于MathML的應(yīng)用。MathML是W3C組織制定的一套基于XML的數(shù)學(xué)公式處理的標(biāo)準(zhǔn)。作為一種標(biāo)記語言,MathML在設(shè)計(jì)之初就考慮到網(wǎng)絡(luò)上的應(yīng)用和集成,其公式存儲(chǔ)形式更利于所以MathML在web上具有非常廣泛的應(yīng)用前景。
1 公式預(yù)處理
當(dāng)用戶輸入數(shù)學(xué)公式后,首先會(huì)進(jìn)行預(yù)處理,過濾掉代碼中的無用xml標(biāo)簽,同時(shí)替換掉字符代碼。比如勾股定理c2=a2+b2,當(dāng)用戶查找時(shí)若輸入z2=x2+y2,則無法匹配,得不到預(yù)期的結(jié)果。所以該模塊將輸入的字符數(shù)據(jù)替換成統(tǒng)一字符x,這樣在查找時(shí)就不會(huì)因?yàn)槟硞€(gè)字母不一致而無法查詢了。
雖然這樣做會(huì)降低查準(zhǔn)率,但是格式相同或相近的公式畢竟不多,所以本系統(tǒng)更加著重于提高查全率。
圖1 預(yù)處理模塊工作流程圖
2 匹配方法
對于已知公式名稱,可以很簡單查詢到公式的內(nèi)容。但是對于只知道部分公式內(nèi)容,則需要進(jìn)行代碼預(yù)處理,以過濾標(biāo)簽、字母,達(dá)到查詢的準(zhǔn)確性。
2.1 處理不匹配字符的規(guī)則
在從右向左掃描的過程中,若發(fā)現(xiàn)某個(gè)字符x不匹配,則按如下兩種情況討論:
(1)如果字符x在模式P中沒有出現(xiàn),那么從字符x開始的m個(gè)文本顯然不可能與P匹配成功,直接全部跳過該區(qū)域即可。即skip=plen,其中skip為向右移動(dòng)的距離,plen為模式串P的長度。
(2)如果x在模式P中其它位置出現(xiàn),則以該字符進(jìn)行對齊。即skip=plen-max(x),其中skip為向右移動(dòng)的距離,plen為模式串P的長度,max(x)為模式串P中x再次出現(xiàn)的位置。
程序中使用MakeSkip()函數(shù)實(shí)現(xiàn)該規(guī)則的處理,函數(shù)返回結(jié)果為模式串右移的距離。它的程序流程為:
(1)獲取匹配字符及模式串作為參數(shù)。
(2)若獲取參數(shù)為空,則拋出異常;否則進(jìn)行第3步。
(3)初始化設(shè)置skip=0。
(4)將字符與模式串進(jìn)行匹配。
(5)如果該字符在模式串中其它位置未出現(xiàn),則skip=plen;否則skip=plen-max(x)。
(6)返回skip值。
(7)結(jié)束。
2.2 處理已匹配字符串的規(guī)則:
若發(fā)現(xiàn)某個(gè)字符不匹配的同時(shí),已有部分字符匹配成功,則按如下兩種情況討論:
(1)如果在P中位置t處已匹配的部分p1,在P中的t′位置再次出現(xiàn),且位置t1的前一個(gè)字符與位置t的前一個(gè)字符不相同,則將p右移使t1對應(yīng)t方才的所在的位置。
(2)如果在P中任何位置已匹配部分p1′都沒有再出現(xiàn),則找到與p1的后綴p11相同的p的最長前綴x,向右移動(dòng)p,使x對應(yīng)方才p11后綴所在的位置。
程序中使用MakeShift()函數(shù)實(shí)現(xiàn)該規(guī)則的處理,函數(shù)返回結(jié)果為模式串右移的距離。它的程序流程為:
(1)獲取已匹配字符p1及模式串p作為參數(shù)。
(2)若獲取參數(shù)為空,則拋出異常;否則進(jìn)行第3步。
(3)初始化設(shè)置shift=0。
(4)將已匹配的字符串p1與模式串p進(jìn)行匹配。
(5)如果該字符串在模式串中其它位置未出現(xiàn),則shift=plen-pidx,其中pidx為p中再次出現(xiàn)p1的位置;否則進(jìn)行第6步。
(6)去掉p1串的頭部,再次匹配,直到在p中找到相同的最長前綴x,設(shè)置shift=plen-pidx;若p1在p中從未再次出現(xiàn)過,則shift=plen。
(7)返回shift值。
(8)結(jié)束。
2.3 匹配的實(shí)現(xiàn)
通過MakeSkip()函數(shù)和MakeShift()函數(shù)可以處理不同失配的情況時(shí),模式串右移的距離,通過本函數(shù),即Search()函數(shù),則可以實(shí)現(xiàn)該匹配模式的部分精確匹配的功能。它的程序流程為:
(1)初始化,獲取文本串和模式串。
(2)若獲取參數(shù)為空,則拋出異常;否則進(jìn)行第3步。
(3)字符串左端對齊,從右端開始匹配,若匹配成功,則返回1;否則進(jìn)行下一步。
(4)調(diào)用MakeSkip()函數(shù),計(jì)算出現(xiàn)不匹配字符的時(shí)候,模式串p應(yīng)該右移的距離skip。
(5)調(diào)用MakeShift()函數(shù),計(jì)算出現(xiàn)已匹配字符串的時(shí)候,模式串p應(yīng)該右移的距離shift。
(6)令模式串p右移的距離moved為skip和shift中的大者。
(7)模式串右移moved距離,同時(shí)設(shè)置記錄文本串長的參數(shù)blen,令blen=blen-moved。
(8)判斷是否匹配結(jié)束,即blen (9)結(jié)束。 3 結(jié)論 現(xiàn)有的Web中的數(shù)學(xué)公式,存儲(chǔ)格式五花八門,多以圖片形式存在,少數(shù)以MathML代碼形式出現(xiàn)的公式,其存儲(chǔ)格式多數(shù)不夠規(guī)范,因應(yīng)用較少,故難以達(dá)成統(tǒng)一標(biāo)準(zhǔn)。 系統(tǒng)以文本編輯器Fckeditor作為運(yùn)行平臺,用戶在界面中編輯要查詢的數(shù)理公式,通過對公式代碼的處理,即可到公式數(shù)據(jù)庫中查詢。結(jié)果頁面會(huì)返回查詢公式的相關(guān)信息,并根據(jù)查詢到的公式名稱到百度、谷歌兩個(gè)搜索引擎中查詢出相關(guān)頁面,并返回頁面鏈接。 作者聲明:“作者對本文版權(quán)全權(quán)負(fù)責(zé),無抄襲.” 本文作者創(chuàng)新點(diǎn):設(shè)計(jì)了一個(gè)公式檢索系統(tǒng),可以實(shí)現(xiàn)數(shù)學(xué)公式的在線輸入及準(zhǔn)確的檢索。系統(tǒng)使用JSP技術(shù)開發(fā)前天界面,Oracle作為后臺數(shù)據(jù)庫,MathML數(shù)學(xué)標(biāo)記語言作為數(shù)學(xué)公式的描述語言,通過設(shè)計(jì)在線公式編輯模塊,用戶可以所見即所得的編輯數(shù)學(xué)公式,而公式在系統(tǒng)中存儲(chǔ)為MathML代碼形式,因此可以通過代碼的匹配實(shí)現(xiàn)數(shù)學(xué)公式的檢索。 【參考文獻(xiàn)】 [1]李春偉.基于MathML的web數(shù)學(xué)公式的解決方案[J].中國科技信息,2008,10(17):78-82 [2]姜力.基于MathML的WEB數(shù)學(xué)公式表示[J].齊齊哈爾大學(xué)學(xué)報(bào),2006,9(06): 98-102. [3]童寧江,喻茜芝,凌代紅.WebEQ數(shù)學(xué)套件核心技術(shù)精解[J].中國科技信息, 2008,6(05). [責(zé)任編輯:楊玉潔]