專利名稱::開源軟件獲取與搜索系統(tǒng)的實現(xiàn)方法
技術領域:
:本發(fā)明涉及一種開源軟件獲取與搜索系統(tǒng)的實現(xiàn)方法,特別是在跨多個開源社區(qū)的環(huán)境下,一種基于定向網(wǎng)絡爬蟲、信息抽取的開源軟件搜索系統(tǒng)的構造方法。
背景技術:
:近年來,國內外開源軟件運動取得了蓬勃發(fā)展,已經(jīng)形成眾多擁有大量開發(fā)人員、開源項目和開源社區(qū)的軟件開發(fā)和應用的開源軟件生態(tài)系統(tǒng)。目前開源軟件業(yè)界有如下發(fā)展趨勢I.開源項目和開發(fā)人員數(shù)量龐大并逐年穩(wěn)定增長;2.少數(shù)優(yōu)秀的開源項目發(fā)展迅速并且得到廣泛應用;3.多數(shù)開源項目處于較低的發(fā)展水平且處于緩慢發(fā)展狀態(tài);這些特征使得從海量開源軟件項目中發(fā)現(xiàn)和選擇高質量且滿足特定需求的開源軟件成為急需解決問題。傳統(tǒng)搜索引擎由于其缺乏針對性,搜索結果中有效信息含量不高,因此難以應對這樣的需求。開源軟件社區(qū)作為開源軟件的托管平臺,其頁面有著豐富的開源項目描述信息,對于開源軟件的共享、評價和選擇具有重要價值。開源社區(qū)大多集成了針對社區(qū)內開源軟件的搜索引擎和條件選擇服務,然而要在全球范圍內選擇和查找開源軟件,綜合跨社區(qū)的軟件信息,構建跨社區(qū)的開源軟件搜索引擎勢在必行。近年來,國內外針對跨社區(qū)的開源軟件頁面數(shù)據(jù)收集開展了大量的研究和實踐。美國Syracuse大學的FLOSSmole項目在該領域做出了突出成績。通過使用275個網(wǎng)絡爬蟲,該項目從20多個社區(qū)中爬取了近500,000個開源項目的頁面數(shù)據(jù)。但由于該工作只進行了數(shù)據(jù)的搜集,對外僅提供sql查詢接口和sql數(shù)據(jù)包的下載,而并沒有提供數(shù)據(jù)的綜合、展現(xiàn)、搜索等功能,因此并不能幫助人們搜索與獲取軟件。國內面向開源軟件的搜索引擎研究還處于起步階段,其中比較有影響力的包括開源中國社區(qū)、CSDN開源社區(qū)、中國Linux社區(qū)等。開源中國社區(qū)中的開源軟件信息主要來自用戶人工編輯,數(shù)目和質量上都有明顯的局限性;CSDN社區(qū)中的開源資源主要是用戶自行共享上傳的工具包或代碼庫;來源混雜,格式不統(tǒng)一,描述不完備;而Linux社區(qū)的開源軟件主要局限在Linux系統(tǒng)相關的包和工具??偟膩碚f,當前這些社區(qū)缺乏一個涵蓋面廣,數(shù)據(jù)全面,格式統(tǒng)一的開源軟件信息庫,以及基于該信息庫的一種為用戶查詢和選擇開源軟件提供推薦和幫助的搜索引擎技術。
發(fā)明內容本發(fā)明要解決的問題是針對現(xiàn)有技術在跨社區(qū)信息獲取和信息綜合展現(xiàn)方面的不足,提出一種開源軟件搜索系統(tǒng)的實現(xiàn)方法,使得能夠廣泛搜集多個社區(qū)的開源軟件信息,為預期用戶提供軟件查找和推薦服務。本發(fā)明的技術方案包括以下步驟步驟I、搭建數(shù)據(jù)服務。在企業(yè)級服務器上配置關系數(shù)據(jù)庫管理軟件,搭建關系與對象映射框架,使得上層應用程序對關系數(shù)據(jù)庫進行調用時能使業(yè)務層代碼能夠以對象的方式訪問和更新數(shù)據(jù)庫里的信息。步驟2、網(wǎng)頁獲取。接收用戶的輸入定義,確定一定數(shù)目的已知URL地址的開源社區(qū)集合,通過爬蟲抓取開源社區(qū)中的開源軟件主頁,將開源項目的爬取分為開源項目列表頁爬取和開源項目主頁爬取兩個階段。步驟3、開源屬性抽取。從爬取到的頁面中抽取開源軟件領域的信息即開源屬性,如項目編程語言、證書、運行環(huán)境、開發(fā)狀態(tài)、注冊時間、最新發(fā)布時間、下載次數(shù)、主頁鏈接坐寸o步驟4、對跨社區(qū)項目信息進行整合,當來自不同社區(qū)的項目具有不同的屬性時,取屬性并集;同時保存不同項目之間的依賴關系;步驟5、對獲取的開源屬性建立倒排索引,其中的每一項都包括一個屬性值和具有該屬性值的各記錄的地址,由屬性值來確定記錄的位置,而非由記錄來確定屬性值。步驟6、響應于用戶搜索輸入或預定義的排名機制,對需要展現(xiàn)的開源項目進行排序并顯示。進一步地,步驟2可以下列方式實現(xiàn)步驟21、根據(jù)社區(qū)的項目主頁URL模板進行匹配,抽取出項目主頁URL存放到數(shù)據(jù)庫,對不斷變化的社區(qū)開源項目主頁構成情況進行快照。步驟22、是爬取開源項目主頁。網(wǎng)頁爬蟲不斷從數(shù)據(jù)庫中取出項目主頁URL進行定向爬取,將爬取到的完整HTML頁面文本保存到數(shù)據(jù)庫。更為具體地,步驟3通過下列步驟進行。步驟31、模板探測。發(fā)現(xiàn)每個開源社區(qū)用于顯示開源屬性的網(wǎng)頁模板,可以是HTML樹中的標簽路徑,也可以是HTML文本中的正則表達式,作為抽取開源屬性的規(guī)則。具體來說有兩種獲取方式。步驟311、基于人工觀察的方法。通過觀察來自開源社區(qū)的少量網(wǎng)頁樣本,發(fā)現(xiàn)各個開源屬性所在的頁面位置或其出現(xiàn)的正則表達式模式。步驟312、基于種子集合的方法。獲取開源屬性的可列屬性值,使用字符串相似度匹配算法,自動的在網(wǎng)頁集合中發(fā)現(xiàn)開源屬性值所在標簽路徑,采用最大支持度方法(即在某位置具有最高匹配次數(shù)則認為在此具有最大支持度)篩選出唯一的網(wǎng)頁模板。其中,所述字符串的相似度匹配可以通過兩字符串對應q-gram集合的雅加達(Jaccard)系數(shù)作為兩字符串匹配度數(shù)值,當該數(shù)值若高于預定義的某閾值則認為匹配。步驟32、標簽定位。通過已獲取的模板定位到開源屬性值的HTML標簽。如果確定的模版是通過人工觀察并確定的正則表達式,則進行步驟321基于正則表達式的定位方法。使用正則表達式定位規(guī)則在目標網(wǎng)頁中發(fā)現(xiàn)屬性值標簽節(jié)點;如果確定的模版是通過種子集合方法確定出的標簽路徑,則進行步驟322基于標簽路徑的定位方法,根據(jù)html頁面的文檔對象模型(DOM)樹形結構,將每個標簽位置表示為從頁面根節(jié)點html到屬性值所在節(jié)點的標簽路徑,借助支持該路徑的網(wǎng)頁解析工具(如D0M4J)進行標簽定位與獲取,從而獲取屬性值對應的文本標簽。進一步地,所述步驟6中,如果接收到用戶的搜索輸入,則通過計算用戶輸入的關鍵字與倒排索引數(shù)據(jù)集合之間的字符串匹配情況,計算關鍵字與數(shù)據(jù)集合中軟件項目的結果的相關度進行排序;如果沒有接收到用戶搜索輸入,則依據(jù)項目的開源參與程度和信息完備程度定義的項目排名機制,項目進行排序與展示。進一步地,所述項目的開源參與程度由一個項目所用于托管的社區(qū)數(shù),其所關聯(lián)的其他開源項目數(shù)來量化;所述信息完備程度由項目的開源屬性個數(shù)來量化。最終開發(fā)相應的用戶交互界面,負責接收來自用戶輸入,同時負責接收來自搜索引擎的排序結果,對開源社區(qū)中的軟件項目進行組織和展示。圖I為本發(fā)明跨社區(qū)開源軟件搜索系統(tǒng)實現(xiàn)方法的流程圖;圖2為根據(jù)本發(fā)明的實施例的獲取不同社區(qū)開源軟件項目的流程圖。圖3為根據(jù)本發(fā)明的實施例的對獲取后的開源軟件項目進行管理和組織的流程圖。具體實施例方式如圖I所示,為開源軟件獲取與搜索系統(tǒng)及方法實現(xiàn)的流程圖,具體實施以下步驟步驟I、搭建數(shù)據(jù)服務。開源軟件信息庫具有數(shù)據(jù)量大(>100GB),更新頻繁,并發(fā)查詢處理能力強,例如在互聯(lián)網(wǎng)上提供面向海量用戶的訪問服務等方面的要求。因此需要采用企業(yè)級的高效的數(shù)據(jù)庫管理軟件來搭建數(shù)據(jù)服務,在本發(fā)明中將數(shù)據(jù)服務部署在企業(yè)級刀片服務器上,具有8核CPU,內存32GB,硬盤2TB??梢允褂藐P系數(shù)據(jù)庫或面向對象數(shù)據(jù)庫,當使用關系數(shù)據(jù)庫時,還需要搭建關系與對象映射框架,以方便上層應用程序對關系數(shù)據(jù)庫進行調用,使業(yè)務層代碼能夠以對象的方式訪問和更新數(shù)據(jù)庫里的信息。步驟2、網(wǎng)頁獲取。通過爬蟲抓取開源社區(qū)中的開源軟件主頁,由于目標頁面URL集合是已知的,因此可以對傳統(tǒng)通用爬蟲的爬取方式進行修改,去除其中如URL合法性判斷,新URL發(fā)現(xiàn)等不適用的常規(guī)部件,而使用由人工事先對每個開源社區(qū)預定義,進而確定需要爬取的URL的生成方法?;陂_源社區(qū)中項目不斷增加的特征,將開源項目的爬取嚴格劃分為開源項目列表頁爬取和開源項目主頁爬取兩個階段。步驟21、第一階段的目標是分析社區(qū)中的所有項目列表頁,對于同一社區(qū),其項目列表頁在命名上是具有一定規(guī)律和相對固定的,例如對于sourceforge社區(qū)來說,其項目列表頁的格式為www.sourceforge.net/search/I.html,可能發(fā)生變化的可能僅僅是html文本的數(shù)字編號。根據(jù)社區(qū)的項目主頁URL模板進行匹配,抽取出項目主頁URL存放到數(shù)據(jù)庫,起到對不斷變化的社區(qū)開源項目主頁構成情況進行快照的作用。步驟22、第二階段的目標是爬取開源項目主頁。網(wǎng)頁爬蟲不斷從數(shù)據(jù)庫中取出項目主頁URL進行定向爬取,將爬取到的完整HTML頁面文本保存到數(shù)據(jù)庫。爬取時采用多線程爬取技術,以提高爬取效率。步驟3、開源屬性抽取。從爬取到的頁面中抽取開源軟件領域的信息即開源屬性,如項目編程語言、證書、界面、運行環(huán)境、本地化、數(shù)據(jù)庫、開發(fā)狀態(tài)、注冊時間、最新發(fā)布時間、下載次數(shù)、主頁鏈接等。更為具體地,通過下列步驟進行。步驟31、模板探測。發(fā)現(xiàn)每個開源社區(qū)用于顯示開源屬性的網(wǎng)頁模板,可以是HTML樹中的標簽路徑,也可以是HTML文本中的正則表達式,作為抽取開源屬性的規(guī)則。具體來說有兩種獲取方式。步驟311、基于人工觀察的方法。通過觀察來自開源社區(qū)的少量網(wǎng)頁樣本,發(fā)現(xiàn)各個開源屬性所在的頁面位置或其出現(xiàn)的正則表達式模式。該方法較為簡易,但可靠性不高,適用于網(wǎng)頁結構簡單,模板明晰的社區(qū)模板探測。步驟312、基于種子集合的方法。獲取開源屬性的可列屬性值,使用字符串相似度匹配算法,自動的在網(wǎng)頁集合中發(fā)現(xiàn)開源屬性值所在標簽路徑,采用最大支持度方法(即在某位置具有最高匹配次數(shù)則認為在此具有最大支持度)篩選出唯一的網(wǎng)頁模板。字符串的相似度匹配可以通過兩字符串對應q-gram集合的雅加達(Jaccard)系數(shù)作為兩字符串匹配度數(shù)值,當該數(shù)值若高于預定義的某閾值則認為匹配。例如,設種子屬性值為“GPLLicense",該方法則負責發(fā)現(xiàn)“GPLLicense”在目標社區(qū)中所有出現(xiàn)及各個出現(xiàn)的標簽路徑,選擇出現(xiàn)次數(shù)最多的路徑,如“/html/body/table/tr/td/text()”,作為該屬性的抽取規(guī)則和抽取位置。步驟32、標簽定位。通過已獲取的模板定位到開源屬性值的HTML標簽。如果確定的模版是通過人工觀察并確定的正則表達式,則進行步驟321基于正則表達式的定位方法。使用正則表達式定位規(guī)則在目標網(wǎng)頁中發(fā)現(xiàn)屬性值標簽節(jié)點。如有html片段“<li>License<ahref=“/categories/license/gpl,,>GPLLicense〈/a>,,,其對應的“License”屬性值正則表達式定位規(guī)則可能為“<Li>License<ahref=\“/categories/license/[a-zA-Z|0-9]+\”>[a_zA-Z10-9]+〈/a>”,該表達式將定位到所有的“License”屬性所在標簽。如果確定的模版是通過種子集合方法確定出的標簽路徑,則進行步驟322基于標簽路徑的定位方法。根據(jù)html頁面的文檔對象模型(DOM)樹形結構,將每個標簽位置表示為從頁面根節(jié)點(<html>)到屬性值所在節(jié)點的標簽路徑,借助支持該路徑的網(wǎng)頁解析工具(如D0M4J)進行標簽定位與獲取,從而獲取屬性值對應的文本標簽。步驟4、信息綜合與挖掘。步驟401、跨社區(qū)項目信息整合。即對抽取得到的信息進行整合處理。實施例中,設開源項目xwiki在社區(qū)sourceforge.net中抽取的主題為“Database,DynamicContent,SiteManagement”,在ow2.org中其主題為“DynamicContent”,通過取并集獲取項目xwiki跨此兩個社區(qū)的主題集合為(“Database,DynamicContent,SiteManagement”)。步驟402、挖掘項目協(xié)同關系??缟鐓^(qū)地發(fā)現(xiàn)項目描述提到其他項目的情形,發(fā)現(xiàn)各個開源項目之間的協(xié)同關系。在實施例中,設項目xwikimantis在其描述中有陳述“XwikiMantispluginintegratesmantisintoxwiki,,,將保存xwikimantis至丨Jxwiki的依賴關系,在用戶搜索結果中進行呈現(xiàn)。步驟5、建立倒排索引。對步驟3獲取的開源屬性建立倒排索弓丨,這種索引表中的每一項都包括一個屬性值和具有該屬性值的各記錄的地址。由屬性值來確定記錄、的位置,而不是由記錄來確定屬性值。對項目xwiki來說,其在sourceforge.net,ow2.org,freshmeat.net獲取的屬性有(project-real-nameinsourceforge,“xwiki,,),(user-interfaceinsourceforge,“web-based,,),(licenseinow2,“gpl,,),(programming-language-in-freshmeat,“java,,),(description-in-sourceforge,“XWikiisthenextgenerationenterprisewiki,”)。在此對這些屬性建立倒排索引。當搜索系統(tǒng)用戶輸入查詢關鍵詞“enterprisewiki”時,系統(tǒng)將根據(jù)索引中含有該關鍵詞的項目信息按一定的排序算法有序返回。本實施例中xwiki的描述信息索引中含有“enterprisewiki”關鍵詞,因此xwiki將會被作為結果之一返回給用戶。步驟6、實現(xiàn)排序。步驟601、基于關鍵字匹配的搜索結果排序方法。該方法即通過計算用戶輸入的關鍵字與倒排索引數(shù)據(jù)集合之間的字符串匹配情況,計算關鍵字與數(shù)據(jù)集合中軟件項目的結果的相關度進行排序。步驟602、無關鍵字的項目排名算法??梢跃C合考慮一個項目的開源參與程度和信息完備程度定義項目排名機制,根據(jù)項目不同的相關信息分配相應的權重,加權計算得分,用于在用戶不輸入關鍵字的情況下,對項目進行排序與展示。其中,項目的開源參與程度由一個項目所用于托管的社區(qū)數(shù),其所關聯(lián)的其他開源項目數(shù)來量化;而信息完備程度由項目的開源屬性個數(shù)來量化。根據(jù)本發(fā)明的實施例,可以實現(xiàn)專門針對開源軟件的搜索和獲取,從而使得開發(fā)人員對于開源軟件的查找和利用更為便利。最后所應說明的是,以上實施例僅用以說明本發(fā)明的技術方案而非限制,盡管參照較佳實施例對本發(fā)明進行了詳細說明,本領域的普通技術人員應當理解,可以對本發(fā)明的技術方案進行修改或者等同替換,而不脫離本發(fā)明技術方案的精神和范圍。權利要求1.一種開源軟件獲取與搜索系統(tǒng)的實現(xiàn)方法,包括下列步驟步驟I、搭建數(shù)據(jù)服務,在企業(yè)級服務器上配置關系數(shù)據(jù)庫管理軟件,搭建關系與對象映射框架,使得上層應用程序對關系數(shù)據(jù)庫進行調用時能使業(yè)務層代碼能夠以對象的方式訪問和更新數(shù)據(jù)庫里的信息;步驟2、網(wǎng)頁獲取,接收用戶的輸入定義,確定一定數(shù)目的已知URL地址的開源社區(qū)集合,通過爬蟲抓取開源社區(qū)中的開源軟件主頁,將開源項目的爬取分為開源項目列表頁爬取和開源項目主頁爬取兩個階段。步驟3、開源屬性抽取,從爬取到的頁面中抽取開源軟件領域的信息即開源屬性;步驟4、對跨社區(qū)項目信息進行整合,當來自不同社區(qū)的項目具有不同的屬性時,取屬性并集;同時保存不同項目之間的依賴關系;步驟5、對獲取的開源屬性建立倒排索引,其中的每一項都包括一個屬性值和具有該屬性值的各記錄的地址,由屬性值來確定記錄的位置,而非由記錄來確定屬性值。步驟6、響應于用戶搜索輸入或預定義的排名機制,對需要展現(xiàn)的開源項目進行排序并顯不。2.如權利要求I所述的方法,其中所述開源屬性包括項目編程語言、證書、運行環(huán)境、開發(fā)狀態(tài)、注冊時間、最新發(fā)布時間、下載次數(shù)、主頁鏈接等。3.如權利要求I所述的方法,其中步驟2進一步包括爬取開源項目列表頁,根據(jù)社區(qū)的項目主頁URL模板進行匹配,抽取項目主頁URL存放到數(shù)據(jù)庫,對不斷變化的社區(qū)開源項目主頁構成情況進行快照;爬取開源項目主頁,從數(shù)據(jù)庫中取出項目主頁URL進行定向爬取,將爬取到的完整HTML頁面文本保存到數(shù)據(jù)庫。4.如權利要求I所述的方法,其中所述步驟3進一步包括步驟31、模板探測,發(fā)現(xiàn)每個開源社區(qū)用于顯示開源屬性的網(wǎng)頁模板,可以是HTML樹中的標簽路徑,也可以是HTML文本中的正則表達式,作為抽取開源屬性的規(guī)則。步驟32、通過已獲取的模板定位到開源屬性值的HTML標簽以進行標簽定位。5.如權利要求4所述的方法,其中所述正則表達式通過人工觀察確定。6.如權利要求4所述的方法,其中所述標簽路徑通過種子集合確定,。獲取開源屬性的可列屬性值,使用字符串相似度匹配算法,自動的在網(wǎng)頁集合中發(fā)現(xiàn)開源屬性值所在標簽路徑,當在某位置具有最高匹配次數(shù)時確定該位置從而篩選出唯一的網(wǎng)頁模板。7.如權利要求6所述的方法,其中所述字符串的相似度匹配通過兩字符串對應q-gram集合的雅加達(Jaccard)系數(shù)作為兩字符串匹配度數(shù)值,當該數(shù)值若高于預定義的某閾值則認為匹配。8.如權利要求4所述的方法,其中所述標簽定位通過正則表達式定位規(guī)則在目標網(wǎng)頁中發(fā)現(xiàn)屬性值標簽節(jié)點;或者,所述標簽定位根據(jù)html頁面的文檔對象模型樹形結構,將每個標簽位置表示為從頁面根節(jié)點到屬性值所在節(jié)點的標簽路徑,借助支持該路徑的網(wǎng)頁解析工具進行標簽定位與獲取。9.如權利要求I所述的方法,其中所述步驟6進一步包括,如果接收到用戶的搜索輸入,則通過計算用戶輸入的關鍵字與倒排索引數(shù)據(jù)集合之間的字符串匹配確定的相關度進行排序;如果沒有接收到用戶搜索輸入,則依據(jù)項目的開源參與程度和信息完備程度定義的項目排名機制,進行排序與展示。10.如權利要求9所述的方法,其中所述項目的開源參與程度由一個項目所用于托管的社區(qū)數(shù),其所關聯(lián)的其他開源項目數(shù)來量化;所述信息完備程度由項目的開源屬性個數(shù)來量化。全文摘要一種開源軟件獲取與搜索系統(tǒng)的實現(xiàn)方法,包括在企業(yè)級服務器上配置關系數(shù)據(jù)庫管理軟件,使得上層應用程序對關系數(shù)據(jù)庫進行調用時能使業(yè)務層代碼能夠以對象的方式訪問和更新數(shù)據(jù)庫里的信息;接收用戶的輸入定義,確定一定數(shù)目的已知URL地址的開源社區(qū)集合,通過爬蟲抓取開源社區(qū)中的開源軟件主頁;從爬取到的頁面中抽取開源軟件領域的信息即開源屬性;對跨社區(qū)項目信息進行整合,當來自不同社區(qū)的項目具有不同的屬性時,取屬性并集,同時保存不同項目之間的依賴關系;對獲取的開源屬性建立倒排索引;響應于用戶搜索輸入或預定義的排名機制,對需要展現(xiàn)的開源項目進行排序并顯示,從而實現(xiàn)對開源軟件項目的獲取與搜索。文檔編號G06F17/30GK102760151SQ201210097169公開日2012年10月31日申請日期2012年4月5日優(yōu)先權日2012年4月5日發(fā)明者余躍,劉惠,史殿習,尹剛,朱沿旭,李翔,滕猛,王懷民,王濤,袁霖申請人:中國人民解放軍國防科學技術大學