可見,n越大時,表示這個單詞w與C的關系越大,而n小于1時,則與論文本身關系較大。可以看出,極端的情況,當n為0時,則w只與原論文有關系了,與我們獲得的那些評價都沒有關系了,因此獲得的句子實際上對其他論文也沒有什么影響了。因此,對于本實驗,應當將n設置的越大越好。 4.3算法的實現 具體實現算法時,會出現一些問題:我們假設一篇論文可以劃分成1000個句子,每個句子有20個不同單詞,我們總共有2000篇論文,那就有4億個單詞。那么,對于每一個句子s,我們在進行上面的算法時,需要進行如下一步 這就需要對這4億個單詞進行遍歷一遍,并且分別計算括號中的那一步。而每篇論文有1000個句子,就相當于要計算4000億次,這個計算量對我們來說太龐大了,因此,我在這里選取了一個簡便一點的方法,就是在上面的一步時,并不是對整個單詞空間進行計算,而只是對論文d和評論集合C中出現的所有單詞進行遍歷計算打分。 可以看出,對于一個既不在d中又不在C中的單詞, = 0.對結果也沒有影響。因此,上面的公式只是理論的公式,具體應用時,只需要對d和C中出現的單詞進行計算即可,這就節省了大量的計算量。整個流程如圖表 3,需要用到圖表 2中的前三步算法獲得的評論列表。這里之所以不用圖表 2的最終結果,是因為我們需要更多的信息,信息越多,獲得的概括越具有影響力。 圖表 4.4獲得基于影響的概括 通過上面的模型,可以對A中的每個句子進行打分,然后根據所得分數進行從大到小排序。這里因為每篇論文只有1000左右的句子,數量級并不是很大,就自己寫了一個簡單的冒泡排序算法來排序。之后,選擇其中得分最高的k個句子,組合在一起,就獲得了原文基于影響的概括了。從整個建模的過程中也可以看出,所謂基于影響,就是通過那些對A進行評價的句子集C,分別獲得Si與這些句子的相似程度,與其相似程度最高的,證明這個句子被其他作者提及的最多,影響最大。而這個概括與摘要的區別就是,影響較大的句子,可能原來的作者并沒有想到,因此在摘要中并沒有提及(正所謂無心插柳柳成蔭);而摘要中提及的部分,影響可能反而沒有那么大。 圖表 3
第5章 搭建搜索引擎 本章內容主要介紹如何利用PARADISE搜索引擎平臺來搭建我們的論文檢索系統。通過這段內容,我們可以了解到PARADISE使用的基本過程,最終我們會發現,如果想搭建其他方向的搜索引擎,使用PARADISE也是非常方便的。 5.1 PARADISE結構簡介 PARADISE系統,全稱是Platform for Applying, Researching And Developing Intelligent Search Engine, 是網絡實驗室搜索引擎組耗時一年多在一個國家863項目支持下開發的,其目的是建立一個搜索引擎平臺,將搜索引擎的各個部分模塊化,使得這個搜索引擎不只針對專一的某一個領域,而是可以針對各個領域。其功能有點類似于Lucene系統,與其不同的是PARADISE是用C++編寫的。PARADISE有以下幾大的模塊,見表格 3。 表格 3 analysis index search front_evidence (1)analysis是預處理模塊,用于對網頁進行去噪、消重以及編碼轉換等處理,如果是針對paper的pdf轉換后的text文件建立索引,這一步驟就可以省略了。 (2)index是索引模塊,用于將需要檢索的部分建立倒排索引。具體如何使用5.2會提到。 (3)search是搜索模塊,將index建成之后,就可以利用index數據開啟搜索服務,對于每一個詞,去倒排索引里面查找包含它的文檔id號(網頁中為url),從而完成檢索。 (4)front_evidence是前臺模塊,完成一個類似于天網搜索引擎的前臺界面。除了顯示結果之外,還進行摘要處理。這個地方需要注意的就是與index部分有一定的結合,會在后面提到。
除了以上4個大的模塊之外,PARADISE還提供了很多可供選擇以及繼承修改的小模塊。 例如,在search的語言模型這個部分,可以選擇需要的模型,也可以自己重寫一些語言模型。壓縮的時候,可以選擇vint、pfordelta等等各種壓縮算法PARADISE系統接口設計得非常好,當需要對上面任何一個模塊進行修改時,不需要修改源代碼,只需要自己重寫一些繼承的類就可以了。
5.2修改索引部分 對于本次的文獻檢索部分,只需要繼承一個索引部分的類就可以了,具體代碼如下(這里只貼出最關鍵的兩端代碼,中間還省略了一些代碼),其中黃色背景的是需要我們修改的部分。 void main(){ Analyzer* analyzer = new NaiveAnalyzer(); compressorFactory = new PForDeltaCompressorFactory(); IndexWriter * writer = new IndexWriter(fsdir, analyzer, compressorFactory); writer->setMergeThreshold(mergesize); PDFParser parser; if (begin != 0) { while (begin > 0) { parser.hasNext(); begin--;}} int doc_id = 1; Timer t; while (parser.hasNext()) { shared_ptr<paradise::PDFContent> pContent = parser.getContent(); addDocument(pContent, writer, doc_id); if (num >= 0 && doc_id >= num) { break;}} } 在上面的這段代碼中,可以看出,首先建立了一個分析模塊,然后選擇壓縮方式為pfordata,然后建立一個IndexWriter,這個是建立索引的類。而我們需要做的事情,就是: 重寫一個Parser類,這里的名稱為PDFParser,這個parser需要有hasNext,getContent這兩個函數即可。 重寫一個Content類,里面存有所需要建立索引的document的內容,由上面的getContent類返回。 重寫addDocument函數,如下,其中關鍵部分用黃色背景標注。 int addDocument(shared_ptr<paradise::PDFContent> pContent, IndexWriter* pWriter, int & doc_id) { paradise::index::document::Document document; 首頁 上一頁 1 2 3 4 5 6 下一頁 尾頁 4/6/6 相關論文
首頁 上一頁 1 2 3 4 5 6 下一頁 尾頁 4/6/6
本站部分文章來自網絡,如發現侵犯了您的權益,請聯系指出,本站及時確認刪除 E-mail:349991040@qq.com
論文格式網(www.donglienglish.cn--論文格式網拼音首字母組合)提供其他論文畢業論文格式,論文格式范文,畢業論文范文