周虎
摘要:隨著在線考試系統(tǒng)的不斷發(fā)展,試題庫建設(shè)問題也逐漸顯露出來,如何讓用戶方便,快捷的錄入試題,并能夠保留試卷原有的格式,尤其是包含圖片和公式的試卷,一直是開發(fā)者著力解決的主要問題。本文通過利用Word文檔來組建試卷,并在Word中設(shè)置起始標(biāo)志,對Word文檔標(biāo)簽的提取和過濾,本文實(shí)現(xiàn)了基于C#中將Word文檔中的包含圖片,表格,公式的試題批量導(dǎo)入數(shù)據(jù)庫的方法,大大提高了題庫建設(shè)的效率。
關(guān)鍵詞:在線考試系統(tǒng);試題導(dǎo)入;Word文檔;正則表達(dá)式;試題庫
中圖分類號: TP311.11 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)35-0008-03
Implementation Method of Word Test Question Import Database in C#
HU Zhou
(Jiangsu Lianhe Technical Institute Xuzhou branch of Finance, Xuzhou 221008,China)
Abstract: With the continuous development of online examination system, construction of database also gradually revealed, how to make users convenient, quick input questions, and can keep the original paper format, especially the formula contains pictures and papers, has been a major problem for developers to solve. In this paper, through the use of the Word document to form the papers, and set the initial signs in Word, extraction and filtering of Word document, the table contains pictures, C#, Word document based on the method of test batch import database formula, greatly improves the efficiency of database construction.
Key words: Online examination system; test paper import; Word document; regular expression; Examination question database;
1 引言
隨著互聯(lián)網(wǎng)的迅速發(fā)展,基于網(wǎng)絡(luò)的在線考試系統(tǒng)逐步發(fā)展起來,大大提高了考試的效率[1],但是對于題庫的建設(shè)一直是在線考試系統(tǒng)中的關(guān)鍵問題[2]。題庫建設(shè)的起步階段,大部分是靠在線手工逐題錄入的方式,采用這種方式錄入試題速度較慢,操作起來比較繁瑣,并且大部分只能提供純文字版試題。伴隨著信息技術(shù)的發(fā)展,使用Excel導(dǎo)入題庫的方式逐步出現(xiàn),采用這種方式,用戶可以提前把試題在Excel中整理好,最后通過文件上傳的方式將Excel中的試題導(dǎo)入到數(shù)據(jù)庫中[3],采用這種方式較在線錄入試題方式有了很大的進(jìn)步,但是對于包含圖片、公式、表格的試題,Excel試題導(dǎo)入的方式就無能為力了。針對Word文檔本身可以包含圖片、公式、表格等特殊對象的特點(diǎn),本文通過在Word中設(shè)置起始標(biāo)志,然后提取Word文檔中的有效標(biāo)簽和圖片對象,實(shí)現(xiàn)了將Word文檔中的包含圖片、表格、公式等特殊對象的題目導(dǎo)入數(shù)據(jù)庫的方法。
2 Word試題導(dǎo)入數(shù)據(jù)庫方法簡介
Word已經(jīng)成為大部分用戶經(jīng)常使用的文檔編輯工具[4],在Word中編輯試題也是目前所有試題編輯器中的最佳選擇,因?yàn)樵赪ord中可以添加圖片、表格、公式等多種對象,同時(shí)Word操作起來簡單并且方便快捷。
針對Word文檔在進(jìn)行復(fù)制操作時(shí)特點(diǎn),首先需要對導(dǎo)入數(shù)據(jù)庫的Word文檔執(zhí)行全選和復(fù)制操作,它會將文檔中的公式轉(zhuǎn)換為圖片對象,并且將所有的圖片對象復(fù)制到當(dāng)前用戶下面的“AppData/Local/Temp/”目錄下面,根據(jù)Word文檔標(biāo)簽中圖片的名稱和路徑,將圖片從臨時(shí)文件夾下復(fù)制到當(dāng)前指定目錄下面,然后將Word文檔標(biāo)簽中原圖片的絕對路徑地址替換成網(wǎng)站中圖片的相對路徑中,并將Word標(biāo)簽中多余無關(guān)的標(biāo)簽使用調(diào)用Web在線編輯器中處理Word的文檔標(biāo)簽的JS函數(shù)進(jìn)行過濾提取,然后根據(jù)指定的起始標(biāo)志,進(jìn)行正則匹配,并分離題目的類型、題干、答案、章節(jié)和難度系數(shù)等屬性,分離成功后將題目封裝到題目對象集合中去,最后統(tǒng)一保存到數(shù)據(jù)庫,并上傳分離圖片即可完成整個(gè)Word文檔導(dǎo)入數(shù)據(jù)庫的功能,最終在顯示題目時(shí)將圖片和文字以HTML方式顯示。具體步驟如圖1所示。
程序3 實(shí)現(xiàn)Word文檔中圖片復(fù)制操作并替換圖片路徑
3.3 分離題目到題目對象集合
當(dāng)Word文檔中圖片處理完成后,根據(jù)Word標(biāo)簽中指定的起始標(biāo)識再次使用正則表達(dá)式進(jìn)行匹配,如程序4所示。
public static MatchCollection GetValue(string str, string s, string e)
{
Regex rg = new Regex("(?<=(" + s + "))[.\\s\\S]*?(?=(" + e + "))", RegexOptions.Multiline | RegexOptions.Singleline);//根據(jù)開始和結(jié)束字符進(jìn)行匹配
return rg.Matches(str);
}
程序4 根據(jù)指定起始字符串進(jìn)行正則匹配
根據(jù)指定的起始標(biāo)志【開始】和【結(jié)束】,到Word文檔標(biāo)簽中進(jìn)行匹配遍歷,同時(shí)將題目信息分離到題目對象集合中去,最后直接將集合中的題目對象添加到數(shù)據(jù)庫中去,具體實(shí)現(xiàn)如程序5所示。
MatchCollection ls=GetValue(htm,"【開始】","【結(jié)束】");//獲取指定標(biāo)識集合
int x = 0;
List
foreach(Match m in ls )
{
string str1 = m.Value;
if (!TagsChecker.check(str1))
str1= TagsChecker.fix(str1);//修補(bǔ)HTML標(biāo)簽,
str1 = str1.Replace("", "");///去掉空行
lst.Add(getTopic(str1));//添加題目對象
x++;
3.4上傳分離圖片到服務(wù)器
當(dāng)Word試題已經(jīng)保存到數(shù)據(jù)庫后,需要將從Word文檔中分離出來的圖片上傳到服務(wù)器端網(wǎng)站的相對路徑中去。在上傳圖片時(shí)采用了WebClient.UploadData()方法,具體實(shí)現(xiàn)如程序6所示。
WebClient myWebClient = new WebClient();
myWebClient.Headers.Add("Content-Type","application/x-www-form-urlencoded");
myWebClient.QueryString["directory"] = directory;//文件夾
myWebClient.QueryString["extension"] = extension;//擴(kuò)展名
byte[] responseArray = myWebClient.UploadData(url, "POST", data);//提交數(shù)據(jù)
程序6 Word文檔圖片上傳
4 總結(jié)
題庫建設(shè)是建立現(xiàn)代考試系統(tǒng)的首要問題,本文針對題庫建設(shè)中使用Word文檔方式將包含圖片、表格和公式等復(fù)雜對象的試題導(dǎo)入到數(shù)據(jù)庫中,在考試過程中盡可能地保留了原有的Word文檔格式,通過對Word文檔的轉(zhuǎn)換,數(shù)據(jù)的提取和保存操作,實(shí)現(xiàn)了將Word試題批量導(dǎo)入數(shù)據(jù)庫的方法,一方面方便了用戶的操作,同時(shí)擴(kuò)展了試卷題目的多樣化。
參考文獻(xiàn):
[1] 黃芳,王曉霞.談高職院校課程考試中的題庫建設(shè)[J]. 山東省農(nóng)業(yè)管理干部學(xué)院學(xué)報(bào),2012(29):3.
[2] 李光明,關(guān)丹丹.關(guān)于題庫建設(shè)若干問題的思考[J].中國考試,2014(9):5.
[3]董園. 在線考試系統(tǒng)中的題庫建設(shè)相關(guān)技術(shù)的研究[J].電子世界,2015(6):112-115.
[4]馮立,張景韶,周利平.基于B/S模式下的網(wǎng)絡(luò)題庫臺研究與實(shí)踐[J].重慶師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2012,29(4):77-81.
[5]吳金彪. C#正則表達(dá)式匹配HTML中的圖片路徑[EB/OL].[2012-02-09].
[6]李永華.網(wǎng)絡(luò)化考試的題庫建設(shè)及應(yīng)用研究[J].高教論壇,2013(10).
[7]鄧永海.ASP_NET中將Word試卷逐題導(dǎo)入數(shù)據(jù)庫的實(shí)現(xiàn)方法[J].計(jì)算機(jī)與現(xiàn)代化,2010(12).
[8] 蔡曉云.基于知識的在線考試系統(tǒng)題庫設(shè)計(jì)[J].計(jì)算機(jī)與現(xiàn)代化,2011(8):197.