• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Lucene的教學(xué)資源垂直檢索的研究與實(shí)現(xiàn)

      2018-09-29 02:38安倩楠高東懷劉健
      關(guān)鍵詞:教學(xué)資源

      安倩楠 高東懷 劉健

      摘 要:隨著網(wǎng)絡(luò)教學(xué)資源的與日俱增,如何在海量的教學(xué)資源中找到用戶所需要的信息成為當(dāng)下關(guān)注的熱點(diǎn)。本文基于全文檢索工具包Lucene,結(jié)合XML文檔在教學(xué)資源中的廣泛使用,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)面向教學(xué)資源的垂直檢索系統(tǒng)。首先,設(shè)計(jì)系統(tǒng)總體架構(gòu)和業(yè)務(wù)流程;然后,分析研究全文檢索工具包Lucene和XML檢索技術(shù);最后,完成系統(tǒng)中索引模塊和檢索模塊的實(shí)現(xiàn)。

      關(guān)鍵詞:教學(xué)資源; 垂直檢索; Lucene; XML

      Abstract: With the increasing number of teaching resources on the Internet, how to find the information needed by users in a vast amount of teaching resources has become the focus of attention. This paper is based on the full-text search tool package Lucene, combined with the extensive use of XML documents in teaching resources, designs and implements a vertical retrieval system oriented to educational resources. Firstly, it designs the overall structure and business process of the system; then, it analyzes and researches Lucene and XML retrieval technology of the full text retrieval toolkit; finally, it completes the implementation of the system indexing module and the retrieval module.

      Key words: teaching resources; vertical retrieval; Lucene; XML

      引言

      隨著信息技術(shù)的進(jìn)步,網(wǎng)絡(luò)上的教學(xué)資源數(shù)量逐年呈指數(shù)級(jí)增加,越來(lái)越多的用戶通過(guò)互聯(lián)網(wǎng)接受在線教育[1]。面對(duì)數(shù)目巨大的信息,用戶需要快速準(zhǔn)確地找到自己需要的教學(xué)資源。盡管傳統(tǒng)的檢索系統(tǒng)(如百度、谷歌等)信息覆蓋面很廣,但其檢索結(jié)果的準(zhǔn)確性較差,用戶仍需要從浩瀚的結(jié)果中找出自己所需要的資源,而垂直檢索系統(tǒng)可以提供針對(duì)某一行業(yè)或特定領(lǐng)域的更高質(zhì)量的檢索服務(wù),提高用戶的學(xué)習(xí)效率。

      在上述背景下,本文結(jié)合XML文檔在教學(xué)資源上的廣泛使用,基于全文檢索工具包Lucene,設(shè)計(jì)并且實(shí)現(xiàn)了一個(gè)面向教學(xué)資源的垂直檢索系統(tǒng),其目的是為廣大學(xué)習(xí)者提供一個(gè)能夠準(zhǔn)確定位、交互性較好的信息檢索服務(wù)。

      1 教學(xué)資源垂直檢索系統(tǒng)的設(shè)計(jì)

      1.1 系統(tǒng)業(yè)務(wù)流程設(shè)計(jì)

      信息檢索系統(tǒng)的架構(gòu)按照功能可以分為查詢語(yǔ)句分析模塊、搜索模塊、建立索引模塊和XML文檔提取模塊。本系統(tǒng)的業(yè)務(wù)流程主要分2部分。

      (1)處理文檔集合。首先將文檔集合經(jīng)過(guò)預(yù)處理和信息抽取后,轉(zhuǎn)換成為L(zhǎng)ucene可以讀取的Document流,然后利用解析XML格式文檔的開(kāi)源工具——Dom4j提取文檔部分內(nèi)容,寫入到相應(yīng)的域中,最后選取文檔中部分內(nèi)容作為索引,并添加到索引庫(kù)。

      (2)處理用戶輸入的查詢。系統(tǒng)根據(jù)全文檢索工具包Lucene內(nèi)置的QueryPaser類,對(duì)用戶輸入的查詢語(yǔ)句解析成為若干個(gè)關(guān)鍵字,在建好的索引庫(kù)中找出關(guān)鍵字所在的位置及相應(yīng)文檔,并根據(jù)一定的排序算法給用戶返回相應(yīng)的文檔[2]。

      系統(tǒng)的體系架構(gòu)如圖1所示。

      1.2 功能模塊設(shè)計(jì)

      1.2.1 文檔提取模塊

      XML格式的文檔帶有特殊的結(jié)構(gòu),每一個(gè)開(kāi)始標(biāo)簽和相對(duì)應(yīng)的結(jié)束標(biāo)簽中間都是所對(duì)應(yīng)的內(nèi)容。實(shí)現(xiàn)自動(dòng)化地讀取并且提取標(biāo)簽之間的文本內(nèi)容,是建立索引之前的一個(gè)重要工作。圖2給出一篇XML文檔的基本結(jié)構(gòu)。

      目前出現(xiàn)了多種對(duì)XML文檔抽取信息的開(kāi)源工具,其中Dom4j是一個(gè)用于讀寫XML文檔的Java API工具。Dom4j是SourceForge旗下的一個(gè)開(kāi)放源代碼軟件,專為Java平臺(tái)設(shè)計(jì),采用Java集合框架,如今Dom4j越來(lái)越多地被用來(lái)在Java環(huán)境下提取XML文檔。所以,本系統(tǒng)采用開(kāi)源工具包Dom4j去掉XML文檔中的標(biāo)簽,并且將文檔中的文本內(nèi)容提取出來(lái),為創(chuàng)建索引做好準(zhǔn)備。

      1.2.2 建立索引模塊

      建立索引是檢索系統(tǒng)的核心部分[4],其具體步驟是:先對(duì)文檔進(jìn)行分詞,去掉停用詞和標(biāo)點(diǎn)符號(hào);然后創(chuàng)建一個(gè)存放索引的文件;接著,通過(guò)配置管理類和索引目錄創(chuàng)建IndexWriter對(duì)象,IndexWriter類創(chuàng)建一個(gè)索引器,其是用來(lái)向索引中添加新的索引目錄,同時(shí)還提供了對(duì)外實(shí)現(xiàn)創(chuàng)建索引的接口;最后,向document里面添加新建的索引文件。

      1.2.3 更新索引模塊

      通常情況下,檢索系統(tǒng)中的教學(xué)資源不是一成不變的,如果教學(xué)資源出現(xiàn)了新增、修改、刪除等變化,那么在用戶進(jìn)行查詢操作之前,就應(yīng)該對(duì)索引庫(kù)進(jìn)行及時(shí)的更新,以保證用戶能夠及時(shí)獲取最新的信息。

      在全文檢索工具包Lucene中,IndexWriter類封裝了對(duì)索引的幾個(gè)基本操作:增加索引和刪除索引。但是Lucene本身并不支持對(duì)索引的更新,更新索引的方法是:首先刪掉之前建立好的所有索引,然后利用Lucene內(nèi)置的方法重新對(duì)文檔集合建立索引表。由于手工更新索引費(fèi)時(shí)費(fèi)力,所以一般可以設(shè)置定時(shí)器,3天進(jìn)行1次或者每周進(jìn)行1次索引更新。一般來(lái)說(shuō),索引更新的時(shí)間應(yīng)該挑選在客戶端比較空閑的時(shí)候,夜晚進(jìn)行索引庫(kù)的更新能夠降低對(duì)用戶使用的影響。

      2 Lucene與XML技術(shù)研究

      2.1 Lucene介紹

      Lucene由Dong Cuutting開(kāi)發(fā),在2001年成為Apache軟件基金會(huì)的一個(gè)項(xiàng)目[5]。Lucene并不是一個(gè)完整的應(yīng)用程序,而是由Java編寫、具有高性能、可擴(kuò)展性的全文檢索工具包。

      從組織結(jié)構(gòu)來(lái)看,Lucene主要包含索引核心、對(duì)外接口、基礎(chǔ)結(jié)構(gòu)封裝3個(gè)部分,其中設(shè)計(jì)者將源碼分成了7個(gè)子模塊,每個(gè)模塊功能定義明確、復(fù)用性強(qiáng)、相對(duì)獨(dú)立。各源碼塊之間的關(guān)系如圖3所示。

      上圖中,Org.apache.lucene.index(索引)模塊主要負(fù)責(zé)對(duì)初始文檔進(jìn)行建立索引、刪除索引、更新索引等操作,其中包含IndexReader和IndexWriter 2個(gè)類,IndexReader主要對(duì)已生成的索引進(jìn)行優(yōu)化、刪除、更新等操作,IndexWriter主要對(duì)文本創(chuàng)建索引。

      Org.apache.lucene.search(搜索)模塊主要負(fù)責(zé)將用戶查詢(query)在Analysis模塊解析后,在生成的索引文件進(jìn)行搜索,并按照一定的評(píng)分機(jī)制,對(duì)結(jié)果排序返回給用戶。對(duì)索引的檢索利用IndexSearch類來(lái)實(shí)現(xiàn)。

      Org.apache.lucene.analysis(分析)模塊主要負(fù)責(zé)對(duì)用戶查詢和建立的索引中的文本內(nèi)容進(jìn)行切詞、去掉停用詞和標(biāo)點(diǎn)符號(hào)、過(guò)濾等一系列操作,最終都轉(zhuǎn)換成基本單元Term。

      Org.apache.lucene.queryPaser(查詢解析)模塊主要負(fù)責(zé)對(duì)用戶查詢請(qǐng)求進(jìn)行語(yǔ)法解析,完成詞項(xiàng)之間的邏輯計(jì)算。

      Org.apache.lucene.store(數(shù)據(jù)存儲(chǔ))模塊主要負(fù)責(zé)創(chuàng)建索引時(shí)底層的I/O操作。

      Org.apache.lucene.document(文檔)模塊主要負(fù)責(zé)存儲(chǔ)索引時(shí)的文本文件管理,把各個(gè)類型的文本經(jīng)過(guò)解析器轉(zhuǎn)換為Document流。

      Org.apache.lucene.util(工具)模塊主要提供了相關(guān)公用的工具類,如高亮顯示查詢項(xiàng)等。

      2.2 XML文檔提取

      XML(eXtensible Markup Language)是一種可擴(kuò)展標(biāo)記性語(yǔ)言,可以用來(lái)標(biāo)記電子文檔并使其具有結(jié)構(gòu)特點(diǎn)。隨著互聯(lián)網(wǎng)上信息的大幅度增加,XML技術(shù)已經(jīng)在各行各業(yè)中得到深入、廣泛的應(yīng)用,傳統(tǒng)的基于純文本和HTML的檢索系統(tǒng)已無(wú)法滿足人們的信息獲取需求。XML具有簡(jiǎn)單性、高可擴(kuò)展性、互操作性強(qiáng)和開(kāi)放性等優(yōu)勢(shì),在某些應(yīng)用領(lǐng)域中正在逐漸替代純文本和HTML,成為網(wǎng)絡(luò)上信息表示的主要形式之一。

      XML文檔是具備嚴(yán)格語(yǔ)法規(guī)則的結(jié)構(gòu)化文檔,所以對(duì)XML文檔的檢索就是結(jié)構(gòu)化檢索[6]。結(jié)構(gòu)化檢索相對(duì)于非結(jié)構(gòu)化檢索的一大難點(diǎn)是用戶希望返回文檔的其中一部分,而不是整篇文檔。比如,用戶在書(shū)架中查找一本書(shū),用戶可能更希望得到的信息是書(shū)名,而不是作者和出版社。返回文檔的哪些部分給用戶,所對(duì)應(yīng)的問(wèn)題是,對(duì)于文檔的哪些部分建立索引。這都需要在具有嵌套關(guān)系的XML文檔中提取出文檔的部分內(nèi)容??梢?jiàn),提取包含信息的最小單位的文檔內(nèi)容是具有極大價(jià)值和難度。

      XML解析就是從XML文檔中提取出部分需要的數(shù)據(jù)?,F(xiàn)在出現(xiàn)了多種對(duì)XML文檔抽取信息的開(kāi)源工具,Dom4j是一個(gè)用于讀寫XML文檔的Java API工具。由于Dom4j具備性能卓越、功能強(qiáng)大、操作簡(jiǎn)單便捷等優(yōu)點(diǎn),已經(jīng)越來(lái)越多地被用在Java環(huán)境下提取XML文檔。

      根據(jù)圖2中所示的XML文檔,要提取該文檔中< abstract >…< abstract >標(biāo)簽中的內(nèi)容,實(shí)現(xiàn)代碼如下所示:

      SAXReader iread = new SAXReader();------------------①

      Document document = iread.read( fileList.get(i)); ------------------②

      Element root = document.getRootElement();-----------------③

      String abStract=root.selectSingleNode("/article/front/article-meta/abstract/p").getText();-----------------④

      ① 創(chuàng)建SAXReader對(duì)象。

      ② 讀取一篇文檔,并且轉(zhuǎn)換成為Document。

      ③ 獲取根節(jié)點(diǎn)元素對(duì)象。

      ④ 從根節(jié)點(diǎn)出發(fā),按照XML結(jié)構(gòu)提取出文檔摘要這一單個(gè)節(jié)點(diǎn)的內(nèi)容。

      3 教學(xué)資源垂直檢索系統(tǒng)實(shí)現(xiàn)

      3.1 創(chuàng)建索引

      建立索引是構(gòu)建教學(xué)資源檢索系統(tǒng)的關(guān)鍵環(huán)節(jié),通過(guò)Lucene的IndexWrier索引器可以進(jìn)行創(chuàng)建索引、刪除索引等操作。創(chuàng)建索引的具體過(guò)程如圖4所示。

      [PS安倩楠4.EPS;S*2;X*2,BP#]

      實(shí)現(xiàn)建立索引的主要功能代碼如下:

      Directory directory = null;

      indexWrite = null;

      directory = FSDirectory.open(new File("D:\\\\LuceneDemo\\\\aaa"));------------------①

      indexWrite = new IndexWriter(directory, indexWriteConfig); ------------------②

      Field abstract=new TextField("abStract", entry.getValue(), Store.YES,

      Field.Index.NOT_ANALYZED);-----------------③

      ①創(chuàng)建存放索引的文件,存放在"D:\\\\LuceneDemo\\\\aaa"路徑下

      ② 創(chuàng)建索引器

      ③ 針對(duì)文檔摘要(abstract)建立一個(gè)域

      如果索引器IndexWriter檢測(cè)到directory目錄中還沒(méi)有建立索引時(shí),就會(huì)自動(dòng)創(chuàng)建一個(gè)新索引;如果directory目錄中已經(jīng)包含索引時(shí),那么IndexWriter就會(huì)向已經(jīng)生成的索引只增加新的內(nèi)容。

      3.2 檢索

      進(jìn)行檢索時(shí),系統(tǒng)會(huì)先對(duì)用戶輸入的查詢做分析處理,將整個(gè)查詢語(yǔ)句劃分為幾個(gè)關(guān)鍵詞(檢索時(shí)用的分詞器與建立索引時(shí)的分詞器是一致的);隨后在之前建立的索引文件中依次遍歷,找出每一個(gè)關(guān)鍵詞在索引文件所對(duì)應(yīng)的位置和出現(xiàn)頻率等信息;接下來(lái)在數(shù)據(jù)庫(kù)中提取出與關(guān)鍵詞匹配的文檔信息;最后,根據(jù)Lucene中的匹配算法和排序算法,將相關(guān)文檔返回給用戶。

      下面給出實(shí)現(xiàn)檢索功能的一個(gè)例子:

      Directory directory = null;

      directory = FSDirectory.open(new File("D:\\\\LuceneDemo\\\\aaa"));------------------①

      DirectoryReader dReader = DirectoryReader.open(directory);

      QueryParser parser = new QueryParser(Version.LUCENE_43, "abstract", analyzer); ------------------②

      Query query = parser.parse("biological");-----------------③

      TopDocs topDocs = searcher.search(query,50); -----------------④

      ① 打開(kāi)建立好的索引文件

      ② 輸入要搜索的域

      ③ 用戶輸入的查詢關(guān)鍵詞

      ④ 查找滿足條件的前50條記錄

      [LL]3.3 界面呈現(xiàn)

      教學(xué)資源垂直檢索系統(tǒng)界面主要功能是和用戶交互,包括一個(gè)輸入框和一個(gè)“檢索”按鈕。用戶在輸入框中輸入查詢關(guān)鍵詞,并點(diǎn)擊“檢索”按鈕,就可以把查詢請(qǐng)求交給系統(tǒng)處理。例如,輸入查詢關(guān)鍵字“l(fā)ung cancer”,點(diǎn)擊“檢索”按鈕,系統(tǒng)將跳轉(zhuǎn)到顯示結(jié)果的列表頁(yè)面。檢索出的前3條結(jié)果列表如圖5所示,從圖中可以看出,每一條檢索結(jié)果都包含文檔標(biāo)題和文檔摘要2個(gè)部分,當(dāng)返回的檢索結(jié)果比較多時(shí),可以進(jìn)行分頁(yè)處理,也可以預(yù)覽文檔的縮略信息。

      4 結(jié)束語(yǔ)

      本文基于全文檢索工具包Lucene,結(jié)合XML文檔在教學(xué)資源中的廣泛應(yīng)用,實(shí)現(xiàn)了一個(gè)面向教學(xué)資源的垂直檢索系統(tǒng),避免用戶在海量的信息資源中逐一篩選,從而提高學(xué)習(xí)效率。同時(shí),該系統(tǒng)的實(shí)現(xiàn)也對(duì)其它提供教學(xué)資源檢索服務(wù)的各類平臺(tái)具有較強(qiáng)的借鑒意義。

      參考文獻(xiàn)

      [1] 葉浩明. 面向高等教育領(lǐng)域的垂直搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)[D]. 成都:電子科技大學(xué),2014.

      [2] 張錦. 基于教育領(lǐng)域的垂直搜索引擎的研究與設(shè)計(jì)[D]. 蘭州:蘭州交通大學(xué),2014.

      [3] 劉喜平. XML文檔搜索中的查詢處理技術(shù)研究[D]. 南昌:江西財(cái)經(jīng)大學(xué),2010.

      [4] 楊月華,杜軍平,平源. 基于本體的智能信息檢索系統(tǒng)[J]. 軟件學(xué)報(bào),2015,26(7):1675-1687.

      [5] 王屾. 基于Lucene的同義詞擴(kuò)展檢索的研究與實(shí)現(xiàn)[D]. 天津:天津財(cái)經(jīng)大學(xué),2011.

      [6] 王磊. 基于XML的Web信息采集系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 齊齊哈爾大學(xué)學(xué)報(bào)(自然科學(xué)版),2017,33(2):25-28.

      猜你喜歡
      教學(xué)資源
      新能源汽車技術(shù)專業(yè)教學(xué)資源開(kāi)發(fā)
      高職教學(xué)翻轉(zhuǎn)課堂中數(shù)字化教學(xué)資源的開(kāi)發(fā)
      新型教學(xué)資源在綜合課程中的應(yīng)用
      新型教學(xué)資源在語(yǔ)文教學(xué)中的應(yīng)用
      初中數(shù)學(xué)數(shù)字化教學(xué)資源的建設(shè)與應(yīng)用
      對(duì)初中數(shù)學(xué)教學(xué)資源開(kāi)發(fā)與利用的思考
      来宾市| 乐东| 会宁县| 德清县| 梅州市| 濮阳市| 吉林市| 团风县| 泰州市| 探索| 伊川县| 焉耆| 双流县| 莱西市| 迁西县| 驻马店市| 英超| 肇东市| 西安市| 柳江县| 大名县| 桐庐县| 雷山县| 盖州市| 岳西县| 南川市| 三江| 通化市| 黄浦区| 东明县| 宁远县| 伽师县| 历史| 岢岚县| 榆树市| 河源市| 康定县| 稷山县| 同仁县| 黄龙县| 西宁市|