新聞中心

主題搜索引擎的探究

作者: 時(shí)間:2012-06-05 來源:網(wǎng)絡(luò) 收藏

是本上世紀(jì)90年代興起的信息檢索技術(shù),經(jīng)過十多年的發(fā)展,它已經(jīng)滲透到了人們生活的各個(gè)領(lǐng)域。然而,傳統(tǒng)的,也即通用,考慮了所有人的需求,即不管用戶是希望找計(jì)算機(jī)論文方面的信息還是要找籃球運(yùn)動(dòng)的信息都一致對待,這樣的搜索引擎需要耗費(fèi)巨大的資源而速度較慢。并且,由于通用搜索引擎所面向的領(lǐng)域太廣泛,某些利于用戶提高檢索精度和查全率的技術(shù),比如自動(dòng)分類,在其中的應(yīng)用效果不理想。

本文引用地址:http://www.butianyuan.cn/article/148952.htm

在Lucene API的基礎(chǔ)上開發(fā)面向的搜索引擎[1]是一種有效、低成本的選擇,因?yàn)長ucene全文數(shù)據(jù)庫采用倒排文件索引技術(shù)[2],所以查詢速度優(yōu)于關(guān)系型數(shù)據(jù)庫,而且可以免費(fèi)下載。基于Lucene的優(yōu)勢已有很多企業(yè)將其應(yīng)用到自己的搜索引擎中,如Eclipse開發(fā)環(huán)境的內(nèi)部搜索引擎就是用Lucene構(gòu)建的。但由于Lucene自帶的中文分詞只能將中文切成單字不能實(shí)現(xiàn)詞語的切分,因此,符合需求的中文分詞器有待人們?nèi)ラ_發(fā),并將其加入中文分詞模塊來實(shí)現(xiàn)更高效的檢索。

1 全文檢索引擎Lucene

1.1 Lucene簡介

Lucene是apache軟件基金會(huì)4jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開放源代碼的全文檢索引擎工具包,即它不是一個(gè)完整的全文檢索引擎,而是一個(gè)全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是為軟件開發(fā)人員提供一個(gè)簡單易用的工具包,以方便的在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。

Lucene是一個(gè)高性能、可伸縮的信息搜索(IR)庫。它使你可以為你的應(yīng)用程序添加索引和搜索能力。Lucene是用java實(shí)現(xiàn)的成熟的、免費(fèi)的開源項(xiàng)目,是著名的ApacheJakarta大家庭的一員,并且基于在Apache軟件許可[ASF,License].同樣,Lucene是當(dāng)前與近幾年內(nèi)非常流行的免費(fèi)的Java信息搜索(IR)庫。

1.2 Lucene系統(tǒng)結(jié)構(gòu)

Lucene系統(tǒng)結(jié)構(gòu)[2]如圖1所示。從圖1中可以看到,Lucene的系統(tǒng)由基礎(chǔ)結(jié)構(gòu)封裝、索引核心、對外接口三大部分組成。其中,直接操作索引文件的索引核心又是系統(tǒng)的重點(diǎn)。Lucene將所有源碼分為7個(gè)模塊(在Java語言中以包來表示),各個(gè)模塊所表示的系統(tǒng)部分見圖1.需要說明的是:org.apache.lucene.queryPaser是org.apache.lucene.search的語法解析器,不被系統(tǒng)之外實(shí)際調(diào)用,因此沒有當(dāng)作對外接口看待。從面向?qū)ο蟮挠^點(diǎn)來考慮,Lucene應(yīng)用了最基本的一條程序設(shè)計(jì)準(zhǔn)則:引入額外的抽象層以降低耦合性。首先,引入對索引文件的操作org.apache.lucene.STore的封裝,然后將索引部分的實(shí)現(xiàn)建立在org.apache.lucene.index之上,完成對索引核心的抽象。在索引核心的基礎(chǔ)上開始設(shè)計(jì)對外的接口org.apache.lucene.search及org.apache.lucene.analysis.

Lucene秉承了開放源代碼一貫的架構(gòu)優(yōu)良的優(yōu)勢,設(shè)計(jì)了一個(gè)合理而極具擴(kuò)充能力的面向?qū)ο蠹軜?gòu),程序員可以在Lucene的基礎(chǔ)上擴(kuò)充各種功能,比如擴(kuò)充中文處理能力,從文本擴(kuò)充到HTML、PDF等等文本格式的處理,編寫這些擴(kuò)展的功能不僅僅不復(fù)雜,而且由于Lucene恰當(dāng)合理的對系統(tǒng)設(shè)備做了程序上的抽象,擴(kuò)展的功能也能輕易的達(dá)到跨平臺(tái)的能力。

1.3 Lucene程序運(yùn)行機(jī)制

Lucene系統(tǒng)功能強(qiáng)大,實(shí)現(xiàn)復(fù)雜,但從根本上主要包括2個(gè)主要功能:(1)建立索引庫[4],也就是將待索引的純文本內(nèi)容經(jīng)切分詞后索引入庫;(2)檢索索引庫,即根據(jù)查詢條件從索引庫中找出符合條件的文檔。

在研究建立索引庫時(shí)首先要知道如圖2所示的Lucene索引機(jī)制的架構(gòu)。

從圖2可以看出,Lucene索引過程分為3個(gè)主要操作階段:將數(shù)據(jù)轉(zhuǎn)換成文本;分析文本;將分析過的文本保存到索引庫中。首先,Lucene使用各種解析器對各種不同類型的文檔進(jìn)行解析,如對于HTML文檔,HTML解析器會(huì)做一些預(yù)處理的工作,過濾文檔中的HTML標(biāo)簽等,然后輸出文本內(nèi)容,接著Lucene的分詞器從文本內(nèi)容中提取出索引項(xiàng)以及相關(guān)信息。

檢索索引庫的運(yùn)行邏輯如下:

(1)輸入查詢條件,如用戶希望查詢到含有詞編程和入門但不含詞Java的記錄,則輸入條件為編程+入門-Java;查詢條件輸入搜索器(lucene.search),搜索器里有1個(gè)查詢解析器(lucene.queryParser),搜索器調(diào)用這個(gè)查詢解析器來解析查詢條件。

(2)查詢條件編程+入門-Java被傳送到查詢解析器中,解析器將對編程+入門-Java進(jìn)行分析,首先分析器解析字符串的連接符,即加號和減號,然后調(diào)用語言解析器(lucene.analysis)對每個(gè)詞進(jìn)行切詞,一般英文將按空格來切詞,最后得到的查詢條件表示為:編程AND入門AND NOTJava.

(3)查詢器根據(jù)查詢條件檢索事先已建立好的索引庫,得到查詢結(jié)果,并返回結(jié)果集lucene.search.Hits,Hits類似于JDBC中的ResultSet.

2 中文分詞

因?yàn)長ucene提供的兩個(gè)中文分析器(ChineseAnalyzer和CJKAnalyzer)只能將中文切成單漢字,這對于絕大多數(shù)中文用戶來說很不方便,因此有必要開發(fā)適合自己的中文分析器。本系統(tǒng)基于字符串匹配的分詞技術(shù)實(shí)現(xiàn)了一個(gè)中文分詞器。它是按照一定的策略將待分析的漢字串與1個(gè)充分大的詞庫中的詞條進(jìn)行匹配。若在詞庫中找到某個(gè)字符串則匹配成功(識(shí)別出1個(gè)詞)。按照掃描方向的不同,串匹配分詞方法[5]可以分為正向匹配和逆向匹配;按照不同長度優(yōu)先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配。本研究使用的方式是采用基于字典的雙向匹配算法,即需要進(jìn)行正向和逆向2次匹配。傳統(tǒng)的方法都是先進(jìn)行1次正向匹配,然后再進(jìn)行逆向匹配,每次只有1個(gè)方向在進(jìn)行匹配,而另1個(gè)方向的匹配過程需要第1個(gè)結(jié)束后才開始。本文的設(shè)計(jì)方法是把多線程技術(shù)引入到中文分詞程序當(dāng)中[6].因此可以在正向匹配時(shí),同時(shí)并發(fā)地執(zhí)行逆向匹配,提高了運(yùn)行速度和執(zhí)行效率。以下為正向匹配和逆向匹配都將調(diào)用的核心程序:

載入處理完的文本,以字符數(shù)組的形式存儲(chǔ)起來。建立2個(gè)方法:(1)查找在文本中出現(xiàn)的詞,并且返回詞的長度;(2)用來統(tǒng)計(jì)詞出現(xiàn)的次數(shù)和控制程序進(jìn)度。

方法1:public int zhaoCi(char[] ch,int juli,TreeMap[] tmp)。


上一頁 1 2 下一頁

關(guān)鍵詞: 探究 搜索引擎 主題

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉