基于Web搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文.doc_第1頁(yè)
基于Web搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文.doc_第2頁(yè)
基于Web搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文.doc_第3頁(yè)
基于Web搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文.doc_第4頁(yè)
基于Web搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文.doc_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

本科畢業(yè)論文(設(shè)計(jì)、創(chuàng)作)題目: 基于Web搜索引擎的設(shè)計(jì)與實(shí)現(xiàn) Design and Implementation of Web-based search engine 學(xué)生姓名: 楊衛(wèi)中 學(xué)號(hào): 0802115 所在院系: 信息與通信技術(shù)系 專(zhuān)業(yè):電子信息工程 入學(xué)時(shí)間: 2008 年 9 月導(dǎo)師姓名: 雷迎科 職稱(chēng)/學(xué)位: 博士 導(dǎo)師所在單位: 信息與通信技術(shù)系 完成時(shí)間: 2012 年 5 月安徽三聯(lián)學(xué)院教務(wù)處 制摘 要 網(wǎng)絡(luò)中的資源非常豐富,但是如何有效的搜索信息卻是一件困難的事情。建立搜索引擎就是解決這個(gè)問(wèn)題的最好方法。本文首先詳細(xì)介紹了基于英特網(wǎng)的搜索引擎的系統(tǒng)結(jié)構(gòu),然后從網(wǎng)絡(luò)機(jī)器人、索引引擎、Web服務(wù)器三個(gè)方面進(jìn)行詳細(xì)的說(shuō)明。在次基礎(chǔ)上設(shè)計(jì)并實(shí)現(xiàn)了一種快捷高效的新聞搜索引擎,該搜索引擎是從指定的Web頁(yè)面中按照超連接進(jìn)行解析、搜索,并把搜索到的每條新聞進(jìn)行索引后加入數(shù)據(jù)庫(kù),然后通過(guò)Web服務(wù)器接受客戶(hù)端請(qǐng)求后從索引數(shù)據(jù)庫(kù)中搜索出所匹配的新聞。關(guān)鍵詞:搜索引擎;網(wǎng)絡(luò)機(jī)器人;索引引擎 ;Web服務(wù)器33Abstact The network resources are very rich, but how effective search information is a difficult thing. Build a search engine is the best way to solve the problem. This paper first introduced the Internet search engine based on the structure of the system, and then from the network robots, indexing engine, the Web server of the three aspects of the detailed instructions. Based on the time designed and realized a quick and efficient news search engine, the search engine from the Web page in accordance with specified in the connection for analytical, search, and the search to every news indexing of add to the database. Then through the Web server accept client requests from database search index after the news of the match.Keywords: search engine; Network robot; Indexing engine; Web server目 錄摘要2目錄4第一章 緒論61.1搜索引擎出現(xiàn)的背景及意義61.2搜索引擎的發(fā)展歷史及趨勢(shì)6第二章 搜索引擎的結(jié)構(gòu)92.1系統(tǒng)概述92.2搜索引擎的構(gòu)成92.2.1網(wǎng)絡(luò)機(jī)器人92.2.2索引與搜索92.2.3 Web服務(wù)器102.3搜索引擎的主要指標(biāo)及分析102.4小結(jié)10第三章 網(wǎng)絡(luò)機(jī)器人113.1什么是網(wǎng)絡(luò)機(jī)器人113.2網(wǎng)絡(luò)機(jī)器人的結(jié)構(gòu)分析113.2.1如何解析HTML113.2.2 Spider程序結(jié)構(gòu)123.2.3如何構(gòu)造Spider程序133.2.4如何提高程序性能153.2.5網(wǎng)絡(luò)機(jī)器人的代碼分析163.3小結(jié)18第四章 基于LUCENE的索引與搜索194.1什么是Lucene全文檢索194.2 Lucene的原理分析194.2.1全文檢索的實(shí)現(xiàn)機(jī)制194.2.2 Lucene的索引效率194.2.3 中文切分詞機(jī)制214.3 Lucene與Spider的結(jié)合224.4小結(jié)25第五章 基于TOMCAT的WEB服務(wù)器265.1什么是基于Tomcat的Web服務(wù)器265.2用戶(hù)接口設(shè)計(jì)265.2.1客戶(hù)端設(shè)計(jì)265.2.2服務(wù)端設(shè)計(jì)275.3在Tomcat上部署項(xiàng)目305.4小結(jié)30第六章 項(xiàng)目總結(jié)以及未來(lái)工作展望316.1項(xiàng)目總結(jié)31 6.2未來(lái)工作展望31參考文獻(xiàn)32致謝33第一章 緒論1.1搜索引擎出現(xiàn)的背景及意義 網(wǎng)絡(luò)的出現(xiàn)以及發(fā)展對(duì)于世界發(fā)展的意義是極其重要的,它讓地球村的理念變成現(xiàn)實(shí),信息的傳輸不再受到時(shí)間和空間的限制。在沒(méi)有搜索引擎的時(shí)代,用戶(hù)希望尋找某方面的信息,就必須通過(guò)各種途徑或者是網(wǎng)站之間的連接尋找,可以這樣說(shuō),脫離了搜索引擎的網(wǎng)站,就像是信息海洋中的一個(gè)一個(gè)孤島,用戶(hù)必將面臨巨大的搜索成本,同時(shí)必須付出大量的時(shí)間和精力。搜索引擎的出現(xiàn)改變了上述的現(xiàn)象,它通過(guò)程序的自動(dòng)搜尋并建立索引,將這些信息孤島聯(lián)系起來(lái),形成了一張巨大的信息網(wǎng),并且運(yùn)用分布式計(jì)算的巨大力量,能夠讓用戶(hù)從海量數(shù)據(jù)中摒除垃圾信息,獲取想要的知識(shí)。搜索引擎不僅僅是節(jié)省了用戶(hù)的時(shí)間,通過(guò)挖掉搜尋成本這座墻,它讓許許多多的不可能成為可能。1.2搜索引擎的發(fā)展歷史及趨勢(shì) 搜索經(jīng)歷了三代的更新和發(fā)展: 第一代搜索引擎出現(xiàn)于1994年。這類(lèi)搜索引擎一般都索引少于1,000,000個(gè)網(wǎng)頁(yè),極少重新搜集網(wǎng)頁(yè)并去刷新索引。而且其檢索速度非常慢,一般都要等待10秒甚至更長(zhǎng)的時(shí)間。 第二代搜索出現(xiàn)在1996年。這類(lèi)搜索引擎系統(tǒng)大多采用分布式方案(多個(gè)微型計(jì)算機(jī)協(xié)同工作)來(lái)提高數(shù)據(jù)規(guī)模、響應(yīng)速度和用戶(hù)數(shù)量,它們一般都保持一個(gè)大約50,000,000網(wǎng)頁(yè)的索引數(shù)據(jù)庫(kù),每天能夠響應(yīng)10,000,000次用戶(hù)檢索請(qǐng)求。 第三代搜索引擎年代的劃分和主要特性至今沒(méi)有統(tǒng)一的認(rèn)識(shí),不過(guò)至少可以肯定的是:第三代搜索引擎是對(duì)第二代搜索引擎在搜索技術(shù)上的改進(jìn),主要增加了互動(dòng)性和個(gè)性化等高級(jí)的技術(shù),為用戶(hù)使用搜索引擎獲取信息獲得更好的體驗(yàn)。至于互動(dòng)性的評(píng)價(jià)標(biāo)準(zhǔn)是什么,以及第三代搜索引擎到底比第二代搜索引擎增加了多少價(jià)值尤其是為企業(yè)利用搜索引擎開(kāi)展網(wǎng)絡(luò)營(yíng)銷(xiāo)增加了哪些價(jià)值,目前并沒(méi)有非常令人信服的研究結(jié)論。這也就是目前所謂的第三代搜索引擎并沒(méi)有表現(xiàn)出太多優(yōu)勢(shì)的原因之一?,F(xiàn)在,網(wǎng)絡(luò)上有很多著名的搜索引擎,百度,google等等,百度從2005年誕生到現(xiàn)在成為全球最大的中文搜索引擎,可想而知,發(fā)展的速度是多么的快,人們對(duì)搜索引擎的的需求是多么的大,百度的日點(diǎn)擊率我無(wú)法在找到確切的數(shù)字,但是我們可以計(jì)算一下,截至2008年底,中國(guó)網(wǎng)民規(guī)模達(dá)到2.98億人,每個(gè)網(wǎng)民上網(wǎng)點(diǎn)擊百度的次數(shù)應(yīng)該不少于十次吧,像我們要在百度上找資料的網(wǎng)名點(diǎn)擊率百次不止,所以百度的日點(diǎn)擊率是多么驚人。搜索引擎經(jīng)過(guò)幾年的發(fā)展和摸索,越來(lái)越貼近人們的需求,搜索引擎的技術(shù)也得到了很大的發(fā)展。搜索引擎在將來(lái)的的發(fā)展趨勢(shì)大概有以下幾個(gè)方面:1.提高對(duì)用戶(hù)輸入的理解為了提高搜索引擎對(duì)用戶(hù)檢索提問(wèn)的理解,就必須有一個(gè)好的檢索提問(wèn)語(yǔ)言,為了克服關(guān)鍵詞檢索和目錄查詢(xún)的缺點(diǎn),現(xiàn)在已經(jīng)出現(xiàn)了自然語(yǔ)言智能答詢(xún)。用戶(hù)可以輸入簡(jiǎn)單的疑問(wèn)句,比如“how can kill virus of computer?”。搜索引擎在對(duì)提問(wèn)進(jìn)行結(jié)構(gòu)和內(nèi)容的分析之后,或直接給出提問(wèn)的答案,或引導(dǎo)用戶(hù)從幾個(gè)可選擇的問(wèn)題中進(jìn)行再選擇。自然語(yǔ)言的優(yōu)勢(shì)在于,一是使網(wǎng)絡(luò)交流更加人性化,二是使查詢(xún)變得更加方便、直接、有效。就以上面的例子來(lái)講,如果用關(guān)鍵詞查詢(xún),多半人會(huì)用“virus”這個(gè)詞來(lái)檢索,結(jié)果中必然會(huì)包括各類(lèi)病毒的介紹、病毒是怎樣產(chǎn)生的等等許多無(wú)效信息,而用“how can kill virus of computer?”,搜索引擎會(huì)將怎樣殺病毒的信息提供給用戶(hù),提高了檢索效率。2.對(duì)檢索的結(jié)果進(jìn)行處理對(duì)檢索的結(jié)果處理,有以下幾個(gè)方向:其一,使用鏈接評(píng)價(jià),就是將網(wǎng)頁(yè)的鏈接數(shù)量算作網(wǎng)頁(yè)評(píng)分因素之一,這樣搜索的結(jié)果就更加的能夠滿足用戶(hù)的要求,在這個(gè)方面google()的“鏈接評(píng)價(jià)體系”已經(jīng)做出了相當(dāng)出色的成績(jī)。其二,使用大眾訪問(wèn)性,就是將訪問(wèn)數(shù)量(也可以叫做點(diǎn)擊數(shù)量)算作網(wǎng)頁(yè)評(píng)分的因素之一,這樣想這樣的網(wǎng)站的分?jǐn)?shù)會(huì)很高,而這樣的網(wǎng)站很多時(shí)候都是用戶(hù)想找的,這樣能夠提高搜索引擎的準(zhǔn)確率。其三,去掉結(jié)果中的附加信息。有調(diào)查指出,過(guò)多的附加信息加重了用戶(hù)的信息負(fù)擔(dān),為了去掉這些過(guò)多的附加信息,可以采用用戶(hù)定制、內(nèi)容過(guò)濾等檢索技術(shù)。3.確定搜集返回,提高針對(duì)性在這個(gè)方面現(xiàn)在的發(fā)展的方向是:其一,垂直主題搜索。垂直主題的搜索引擎以其高度的目標(biāo)化和專(zhuān)業(yè)化在各類(lèi)搜索引擎中占據(jù)了一系席之地,比如象股票、天氣、新聞等類(lèi)的搜索引擎,具有很高的針對(duì)性,用戶(hù)對(duì)查詢(xún)結(jié)果的滿意度較高。其二,非www信息的搜索。搜索引擎提供了例如ftp等非www信息的搜索。其三,多媒體搜索。搜索引擎還提供了例如包括聲音、圖像等等多媒體信息的檢索。4.提供更優(yōu)化的檢索結(jié)果在這個(gè)方面有兩個(gè)主要的發(fā)展方向:其一,純凈搜索引擎。這類(lèi)搜索引擎沒(méi)有自己的信息采集系統(tǒng),利用別人現(xiàn)有的索引數(shù)據(jù)庫(kù),主要關(guān)注檢索的理念、技術(shù)和機(jī)制等。其二,元搜索引擎。元搜索引擎(metasearch enging)是將用戶(hù)提交的檢索請(qǐng)求到多個(gè)獨(dú)立的搜索引擎上去搜索,并將檢索結(jié)果集中統(tǒng)一處理,以統(tǒng)一的格式提供給用戶(hù),因此有搜索引擎之上的搜索引擎之稱(chēng)。它的主要精力放在提高搜索速度、智能化處理搜索結(jié)果、個(gè)性搜索功能的設(shè)置和用戶(hù)檢索界面的友好性上,查全率和查準(zhǔn)率都比較高。第二章 搜索引擎的結(jié)構(gòu)2.1系統(tǒng)概述 搜索引擎是根據(jù)用戶(hù)的查詢(xún)請(qǐng)求,按照一定算法從索引數(shù)據(jù)中查找信息返回給用戶(hù)。為了保證用戶(hù)查找信息的精度和新鮮度,搜索引擎需要建立并維護(hù)一個(gè)龐大的索引數(shù)據(jù)庫(kù)。一般的搜索引擎由網(wǎng)絡(luò)機(jī)器人程序、索引與搜索程序、索引數(shù)據(jù)庫(kù)等部分組成。WWW文檔網(wǎng)絡(luò)機(jī)器人程序建立Lucene索引從數(shù)據(jù)庫(kù)中搜索信息Tomcat服務(wù)器Lucene索引數(shù)據(jù)庫(kù)WWW瀏覽器WWW瀏覽器JSP網(wǎng)絡(luò)機(jī)器人程序圖1 搜索引擎的系統(tǒng)結(jié)構(gòu)2.2搜索引擎的構(gòu)成2.2.1網(wǎng)絡(luò)機(jī)器人 網(wǎng)絡(luò)機(jī)器人也稱(chēng)為“網(wǎng)絡(luò)蜘蛛”(Spider),是一個(gè)功能很強(qiáng)的WEB掃描程序。它可以在掃描WEB頁(yè)面的同時(shí)檢索其內(nèi)的超鏈接并加入掃描隊(duì)列等待以后掃描。因?yàn)閃EB中廣泛使用超鏈接,所以一個(gè)Spider程序理論上可以訪問(wèn)整個(gè)WEB頁(yè)面。 為了保證網(wǎng)絡(luò)機(jī)器人遍歷信息的廣度和深度需要設(shè)定一些重要的鏈接并制定相關(guān)的掃描策略。2.2.2索引與搜索 網(wǎng)絡(luò)機(jī)器人將遍歷得到的頁(yè)面存放在臨時(shí)數(shù)據(jù)庫(kù)中,如果通過(guò)SQL直接查詢(xún)信息速度將會(huì)難以忍受。為了提高檢索效率,需要建立索引,按照倒排文件的格式存放。如果索引不及時(shí)更新的話,這樣用戶(hù)用搜索引擎也不能檢索到。 用戶(hù)輸入搜索條件后搜索程序?qū)⑼ㄟ^(guò)索引數(shù)據(jù)庫(kù)進(jìn)行檢索然后把符合查詢(xún)要求的數(shù)據(jù)庫(kù)按照一定的策略進(jìn)行分級(jí)排列并且返回給用戶(hù)。2.2.3 Web服務(wù)器 客戶(hù)一般通過(guò)瀏覽器進(jìn)行查詢(xún),這就需要系統(tǒng)提供Web服務(wù)器并且與索引數(shù)據(jù)庫(kù)進(jìn)行連接??蛻?hù)在瀏覽器中輸入查詢(xún)條件,Web服務(wù)器接收到客戶(hù)的查詢(xún)條件后在索引數(shù)據(jù)庫(kù)中進(jìn)行查詢(xún)、排列然后返回給客戶(hù)端。2.3搜索引擎的主要指標(biāo)及分析搜索引擎的主要指標(biāo)有響應(yīng)時(shí)間、召回率、準(zhǔn)確率、相關(guān)度等。這些指標(biāo)決定了搜索引擎的技術(shù)指標(biāo)。搜索引擎的技術(shù)指標(biāo)決定了搜索引擎的評(píng)價(jià)指標(biāo)。好的搜索引擎應(yīng)該是具有較快的反應(yīng)速度和高召回率、準(zhǔn)確率,當(dāng)然這些都需要搜索引擎技術(shù)指標(biāo)來(lái)保障。召回率:一次搜索結(jié)果中符合用戶(hù)要求的數(shù)目與用戶(hù)查詢(xún)相關(guān)信息的總數(shù)之比準(zhǔn)確率:一次搜索結(jié)果中符合用戶(hù)要求的數(shù)目與該次搜索結(jié)果總數(shù)之比相關(guān)度:用戶(hù)查詢(xún)與搜索結(jié)果之間相似度的一種度量精確度:對(duì)搜索結(jié)果的排序分級(jí)能力和對(duì)垃圾網(wǎng)頁(yè)的抗干擾能力2.4小結(jié) 以上是對(duì)于基于因特網(wǎng)的搜索引擎的結(jié)構(gòu)和性能指標(biāo)進(jìn)行了分析,本人在這些研究的基礎(chǔ)上利用JavaTM技術(shù)和一些Open Source工具實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的搜索引擎新聞搜索引擎。在接下來(lái)的幾章里將會(huì)就本人的設(shè)計(jì)進(jìn)行詳細(xì)的分析。第三章 網(wǎng)絡(luò)機(jī)器人3.1什么是網(wǎng)絡(luò)機(jī)器人網(wǎng)絡(luò)機(jī)器人又稱(chēng)為Spider程序,是一種專(zhuān)業(yè)的Bot程序。用于查找大量的Web頁(yè)面。它從一個(gè)簡(jiǎn)單的Web頁(yè)面上開(kāi)始執(zhí)行,然后通過(guò)其超鏈接訪問(wèn)其他頁(yè)面,如此反復(fù),理論上可以掃描互聯(lián)網(wǎng)上的所有頁(yè)面。基于因特網(wǎng)的搜索引擎是Spider的最早應(yīng)用。例如搜索巨頭Google公司,就利用網(wǎng)絡(luò)機(jī)器人程序來(lái)遍歷Web站點(diǎn),以創(chuàng)建并維護(hù)這些大型數(shù)據(jù)庫(kù)。網(wǎng)絡(luò)機(jī)器人還可以通過(guò)掃描Web站點(diǎn)的主頁(yè)來(lái)得到這個(gè)站點(diǎn)的文件清單和層次機(jī)構(gòu)。還可以掃描出中斷的超鏈接和拼寫(xiě)錯(cuò)誤等。3.2網(wǎng)絡(luò)機(jī)器人的結(jié)構(gòu)分析 Internet是建立在很多相關(guān)協(xié)議基礎(chǔ)上的,而更復(fù)雜的協(xié)議又建立在系統(tǒng)層協(xié)議之上。Web就是建立在HTTP ( Hypertext Transfer Protocol ) 協(xié)議基礎(chǔ)上,而HTTP又是建立在TCP/IP ( Transmission Control Protocol / Internet Protocol ) 協(xié)議之上,它同時(shí)也是一種Socket協(xié)議。所以網(wǎng)絡(luò)機(jī)器人本質(zhì)上是一種基于Socket的網(wǎng)絡(luò)程序。3.2.1如何解析HTML因?yàn)閃eb中的信息都是建立在HTML協(xié)議之上的,所以網(wǎng)絡(luò)機(jī)器人在檢索網(wǎng)頁(yè)時(shí)的第一個(gè)問(wèn)題就是如何解析HTML。在解決如何解析之前,先來(lái)介紹下HTML中的幾種數(shù)據(jù)。我們?cè)谶M(jìn)行解析的時(shí)候不用關(guān)心所有的標(biāo)簽,只需要對(duì)其中幾種重要的進(jìn)行解析即可。文本:除了腳本和標(biāo)簽之外的所有數(shù)據(jù)注釋?zhuān)撼绦騿T留下的說(shuō)明文字,對(duì)用戶(hù)是不可見(jiàn)的簡(jiǎn)單標(biāo)簽:由單個(gè)表示的HTML標(biāo)簽開(kāi)始標(biāo)簽和結(jié)束標(biāo)簽:用來(lái)控制所包含的HTML代碼我們?cè)诰唧w解析這些HTMl標(biāo)簽有兩種方法:通過(guò)JavaTM中的Swing類(lèi)來(lái)解析或者通過(guò)Bot包中的HTMLPage類(lèi)來(lái)解析,本人在實(shí)際編程中采用后者。Bot包中的HTMLPage類(lèi)用來(lái)從指定URL中讀取數(shù)據(jù)并檢索出有用的信息。下面給出該類(lèi)幾種重要的方法。HTMLPage構(gòu)造函數(shù):構(gòu)造對(duì)象并指定用于通訊的HTTP對(duì)象Public HTMLPage(HTTP http)GetForms方法:獲取最后一次調(diào)用Open方法檢索到的表單清單Public Vector getForms()GetHTTP方法:獲取發(fā)送給構(gòu)造函數(shù)的HTTP對(duì)象Public HTTP getHTTP()GetImage方法:獲取指定頁(yè)面的圖片清單Public Vector getImage()GetLinks方法:獲取指定頁(yè)面的連接清單Public Vector getLinks()Open方法:打開(kāi)一個(gè)頁(yè)面并讀入該頁(yè)面,若指定了回調(diào)對(duì)象則給出所有該對(duì)象數(shù)據(jù)Public void open(String url,HTMLEditorKit.ParserCallback a)3.2.2 Spider程序結(jié)構(gòu)網(wǎng)絡(luò)機(jī)器人必須從一個(gè)網(wǎng)頁(yè)遷移到另一個(gè)網(wǎng)頁(yè),所以必須找到該頁(yè)面上的超連接。程序首先解析網(wǎng)頁(yè)的HTML代碼,查找該頁(yè)面內(nèi)的超連接然后通過(guò)遞歸和非遞歸兩種結(jié)構(gòu)來(lái)實(shí)現(xiàn)Spider程序。雖然這里只描述了一個(gè)隊(duì)列,但在實(shí)際編程中用到了四個(gè)隊(duì)列,他們每個(gè)隊(duì)列都保存著同一處理狀態(tài)的URL。等待隊(duì)列:在這個(gè)隊(duì)列中,URL等待被Spider程序處理。新發(fā)現(xiàn)的URL也被加入到這個(gè)隊(duì)列中。處理隊(duì)列: 當(dāng)Spider程序開(kāi)始處理時(shí),他們被送到這個(gè)隊(duì)列中錯(cuò)誤隊(duì)列: 如果在解析網(wǎng)頁(yè)時(shí)出錯(cuò),URL將被送到這里。該隊(duì)列中的URL不能被移入其他隊(duì)列中完成隊(duì)列: 如果解析網(wǎng)頁(yè)沒(méi)有出錯(cuò),URL將被送到這里。該隊(duì)列中的URL不能被移入其它隊(duì)列中在同一時(shí)間URL只能在一個(gè)隊(duì)列中,我們把它稱(chēng)為URL的狀態(tài)。發(fā)現(xiàn)URL等待隊(duì)列運(yùn)行隊(duì)列完成隊(duì)列錯(cuò)誤隊(duì)列完成URL圖1 隊(duì)列的變化過(guò)程以上的圖表示了隊(duì)列的變化過(guò)程,在這個(gè)過(guò)程中,當(dāng)一個(gè)URL被加入到等待隊(duì)列中時(shí)Spider程序就會(huì)開(kāi)始運(yùn)行。只要等待隊(duì)列中有一個(gè)網(wǎng)頁(yè)或Spider程序正在處理一個(gè)網(wǎng)頁(yè),程序就會(huì)繼續(xù)他的工作。當(dāng)?shù)却?duì)列為空并且當(dāng)前沒(méi)有任何網(wǎng)頁(yè)時(shí),Spider程序就會(huì)停止它的工作。3.2.3如何構(gòu)造Spider程序在構(gòu)造Spider程序之前我們先了解下程序的各個(gè)部分是如何共同工作的。以及如何對(duì)這個(gè)程序進(jìn)行擴(kuò)展。流程圖如下所示:把URL加入等待隊(duì)列Spider程序工作完成等待隊(duì)列中是否有URL?否下載從等待隊(duì)列中得到的網(wǎng)頁(yè),并將他送入運(yùn)行隊(duì)列中。是這個(gè)網(wǎng)頁(yè)包含其他超級(jí)連接嗎?將這一網(wǎng)頁(yè)送入完成隊(duì)列并繼續(xù)查看網(wǎng)頁(yè)上的下一個(gè)超連接是否為指向Web的連接?報(bào)告其他類(lèi)型連接連接是否與網(wǎng)頁(yè)所在主機(jī)不同且只處理本地連接?報(bào)告外部連接報(bào)告網(wǎng)頁(yè)連接將連接加入等候隊(duì)列否是否是否是圖2 Spider程序流程圖Ispider Reportable接口5這是一個(gè)必須實(shí)現(xiàn)的接口,可以通過(guò)回調(diào)函數(shù)接受Spider所遇到的頁(yè)面。接口定義了Spider向他的控制者發(fā)送的幾個(gè)事件。通過(guò)提供對(duì)每個(gè)事件的處理程序,可以創(chuàng)建各種Spider程序。下面是他的接口聲明:public interface IspiderReportablepublic boolean foundInternalLink(String url);public boolean foundExternalLink(String url);public boolean foundOtherLink(String url);public void processPage(HTTP page);public void completePage(HTTP page,boolean error);public boolean getRemoveQuery();public void SpiderComplete();3.2.4如何提高程序性能Internet中擁有海量的Web頁(yè)面,如果開(kāi)發(fā)出高效的Spider程序是非常重要的。下面就來(lái)介紹下幾種提高性能的技術(shù):Java的多線程技術(shù)線程是通過(guò)程序的一條執(zhí)行路線。多線程是一個(gè)程序同時(shí)運(yùn)行多個(gè)任務(wù)的能力。它是在一個(gè)程序的內(nèi)部進(jìn)行分工合作。優(yōu)化程序的通常方法是確定瓶頸并改進(jìn)它。瓶頸是一個(gè)程序中最慢的部分,它限制了其他任務(wù)的運(yùn)行。據(jù)個(gè)例子說(shuō)明:一個(gè)Spider程序需要下載十個(gè)頁(yè)面,要完成這一任務(wù),程序必須向服務(wù)器發(fā)出請(qǐng)求然后接受這些網(wǎng)頁(yè)。當(dāng)程序等待響應(yīng)的時(shí)候其他任務(wù)不能執(zhí)行,這就影響了程序的效率。如果用多線程技術(shù)可以讓這些網(wǎng)頁(yè)的等待時(shí)間合在一起,不用互相影響,這就可以極大的改進(jìn)程序性能。數(shù)據(jù)庫(kù)技術(shù)當(dāng)Spider程序訪問(wèn)一個(gè)大型Web站點(diǎn)時(shí),必須使用一種有效的方法來(lái)存儲(chǔ)站點(diǎn)隊(duì)列。這些隊(duì)列管理Spider程序必須維護(hù)大型網(wǎng)頁(yè)的列表。如果把他們放在內(nèi)存中將會(huì)是性能下降,所以我們可以把他們放在數(shù)據(jù)庫(kù)中減少系統(tǒng)資源的消耗。3.2.5網(wǎng)絡(luò)機(jī)器人的代碼分析程序結(jié)構(gòu)圖如下: 圖3 網(wǎng)絡(luò)機(jī)器人程序結(jié)構(gòu)圖程序代碼實(shí)現(xiàn)如下:package news;/* * 新聞搜索引擎* 計(jì)算機(jī)99630 沈晨 * 版本 1.0 */import com.heaton.bot.HTTP;import com.heaton.bot.HTTPSocket;import com.heaton.bot.ISpiderReportable;import com.heaton.bot.IWorkloadStorable;import com.heaton.bot.Spider;import com.heaton.bot.SpiderInternalWorkload;/* * 構(gòu)造一個(gè)Bot程序 */public class Searcher implements ISpiderReportable public static void main(String args) throws Exception IWorkloadStorable wl = new SpiderInternalWorkload(); Searcher _searcher = new Searcher(); Spider _spider = new Spider(_searcher, /news.htm, new HTTPSocket(), 100, wl); _spider.setMaxBody(100); _spider.start(); / 發(fā)現(xiàn)內(nèi)部連接時(shí)調(diào)用,url表示程序發(fā)現(xiàn)的URL,若返回true則加入作業(yè)中,否則不加入。 public boolean foundInternalLink(String url) return false; / 發(fā)現(xiàn)外部連接時(shí)調(diào)用,url表示程序所發(fā)現(xiàn)的URL,若返回true則把加入作業(yè)中,否則不加入。 public boolean foundExternalLink(String url) return false; / 當(dāng)發(fā)現(xiàn)其他連接時(shí)調(diào)用這個(gè)方法。其他連接指的是非HTML網(wǎng)頁(yè),可能是E-mail或者FTP public boolean foundOtherLink(String url) return false; / 用于處理網(wǎng)頁(yè),這是Spider程序要完成的實(shí)際工作。 public void processPage(HTTP http) System.out.println(掃描網(wǎng)頁(yè): + http.getURL(); new HTMLParse(http).start(); / 用來(lái)請(qǐng)求一個(gè)被處理的網(wǎng)頁(yè)。 public void completePage(HTTP http, boolean error) / 由Spider程序調(diào)用以確定查詢(xún)字符串是否應(yīng)刪除。如果隊(duì)列中的字符串應(yīng)當(dāng)刪除,方法返回真。 public boolean getRemoveQuery() return true; / 當(dāng)Spider程序沒(méi)有剩余的工作時(shí)調(diào)用這個(gè)方法。 public void spiderComplete() 3.3小結(jié)在本章中,首先介紹了網(wǎng)絡(luò)機(jī)器人的基本概念,然后具體分析了Spider程序的結(jié)構(gòu)和功能。在最后還結(jié)合具體代碼進(jìn)行了詳細(xì)說(shuō)明。本人在編程中運(yùn)用了JavaTM技術(shù),主要涉及到了net和io兩個(gè)包。此外還用了第三方開(kāi)發(fā)包Bot。第四章 基于Lucene的索引與搜索4.1什么是Lucene全文檢索Lucene是Jakarta Apache的開(kāi)源項(xiàng)目。它是一個(gè)用Java寫(xiě)的全文索引引擎工具包,可以方便的嵌入到各種應(yīng)用中實(shí)現(xiàn)針對(duì)應(yīng)用的全文索引/檢索功能。4.2 Lucene的原理分析4.2.1全文檢索的實(shí)現(xiàn)機(jī)制Lucene的API接口設(shè)計(jì)的比較通用,輸入輸出結(jié)構(gòu)都很像數(shù)據(jù)庫(kù)的表=記錄=字段,所以很多傳統(tǒng)的應(yīng)用的文件、數(shù)據(jù)庫(kù)等都可以比較方便的映射到Lucene的存儲(chǔ)結(jié)構(gòu)和接口中??傮w上看:可以先把Lucene當(dāng)成一個(gè)支持全文索引的數(shù)據(jù)庫(kù)系統(tǒng)。索引數(shù)據(jù)源:doc(field1,field2.) doc(field1,field2.) indexer / _ | Lucene Index| - / searcher 結(jié)果輸出:Hits(doc(field1,field2) doc(field1.)Document:一個(gè)需要進(jìn)行索引的“單元”,一個(gè)Document由多個(gè)字段組成Field:字段Hits:查詢(xún)結(jié)果集,由匹配的Document組成4.2.2 Lucene的索引效率 由于數(shù)據(jù)庫(kù)索引不是為全文索引設(shè)計(jì)的,因此,使用like %keyword%時(shí),數(shù)據(jù)庫(kù)索引是不起作用的,在使用like查詢(xún)時(shí),搜索過(guò)程又變成類(lèi)似于一頁(yè)頁(yè)翻書(shū)的遍歷過(guò)程了,所以對(duì)于含有模糊查詢(xún)的數(shù)據(jù)庫(kù)服務(wù)來(lái)說(shuō),LIKE對(duì)性能的危害是極大的。如果是需要對(duì)多個(gè)關(guān)鍵詞進(jìn)行模糊匹配:like%keyword1% and like %keyword2% .其效率也就可想而知了。所以建立一個(gè)高效檢索系統(tǒng)的關(guān)鍵是建立一個(gè)類(lèi)似于科技索引一樣的反向索引機(jī)制,將數(shù)據(jù)源(比如多篇文章)排序順序存儲(chǔ)的同時(shí),有另外一個(gè)排好序的關(guān)鍵詞列表,用于存儲(chǔ)關(guān)鍵詞=文章映射關(guān)系,利用這樣的映射關(guān)系索引:關(guān)鍵詞=出現(xiàn)關(guān)鍵詞的文章編號(hào),出現(xiàn)次數(shù)(甚至包括位置:起始偏移量,結(jié)束偏移量),出現(xiàn)頻率,檢索過(guò)程就是把模糊查詢(xún)變成多個(gè)可以利用索引的精確查詢(xún)的邏輯組合的過(guò)程。從而大大提高了多關(guān)鍵詞查詢(xún)的效率,所以,全文檢索問(wèn)題歸結(jié)到最后是一個(gè)排序問(wèn)題。由此可以看出模糊查詢(xún)相對(duì)數(shù)據(jù)庫(kù)的精確查詢(xún)是一個(gè)非常不確定的問(wèn)題,這也是大部分?jǐn)?shù)據(jù)庫(kù)對(duì)全文檢索支持有限的原因。Lucene最核心的特征是通過(guò)特殊的索引結(jié)構(gòu)實(shí)現(xiàn)了傳統(tǒng)數(shù)據(jù)庫(kù)不擅長(zhǎng)的全文索引機(jī)制,并提供了擴(kuò)展接口,以方便針對(duì)不同應(yīng)用的定制。可以通過(guò)一下表格對(duì)比一下數(shù)據(jù)庫(kù)的模糊查詢(xún): 表1 Lucene全文索引引擎和數(shù)據(jù)庫(kù)的模糊查詢(xún)對(duì)比Lucene全文索引引擎數(shù)據(jù)庫(kù)索引將數(shù)據(jù)源中的數(shù)據(jù)都通過(guò)全文索引一一建立反向索引對(duì)于LIKE查詢(xún)來(lái)說(shuō),數(shù)據(jù)傳統(tǒng)的索引是根本用不上的。數(shù)據(jù)需要逐個(gè)便利記錄進(jìn)行GREP式的模糊匹配,比有索引的搜索速度要有多個(gè)數(shù)量級(jí)的下降。匹配效果通過(guò)詞元(term)進(jìn)行匹配,通過(guò)語(yǔ)言分析接口的實(shí)現(xiàn),可以實(shí)現(xiàn)對(duì)中文等非英語(yǔ)的支持。使用:like %net% 會(huì)把netherlands也匹配出來(lái),多個(gè)關(guān)鍵詞的模糊匹配:使用like %com%net%:就不能匹配詞序顛倒的匹配度有匹配度算法,將匹配程度(相似度)比較高的結(jié)果排在前面。沒(méi)有匹配程度的控制:比如有記錄中net出現(xiàn)5次和出現(xiàn)1次的,結(jié)果是一樣的。結(jié)果輸出通過(guò)特別的算法,將最匹配度最高的頭100條結(jié)果輸出,結(jié)果集是緩沖式的小批量讀取的。返回所有的結(jié)果集,在匹配條目非常多的時(shí)候(比如上萬(wàn)條)需要大量的內(nèi)存存放這些臨時(shí)結(jié)果集??啥ㄖ菩酝ㄟ^(guò)不同的語(yǔ)言分析接口實(shí)現(xiàn),可以方便的定制出符合應(yīng)用需要的索引規(guī)則(包括對(duì)中文的支持)沒(méi)有接口或接口復(fù)雜,無(wú)法定制結(jié)論高負(fù)載的模糊查詢(xún)應(yīng)用,需要負(fù)責(zé)的模糊查詢(xún)的規(guī)則,索引的資料量比較大使用率低,模糊匹配規(guī)則簡(jiǎn)單或者需要模糊查詢(xún)的資料量少4.2.3 中文切分詞機(jī)制對(duì)于中文來(lái)說(shuō),全文索引首先還要解決一個(gè)語(yǔ)言分析的問(wèn)題,對(duì)于英文來(lái)說(shuō),語(yǔ)句中單詞之間是天然通過(guò)空格分開(kāi)的,但亞洲語(yǔ)言的中日韓文語(yǔ)句中的字是一個(gè)字挨一個(gè),所以,首先要把語(yǔ)句中按“詞”進(jìn)行索引的話,這個(gè)詞如何切分出來(lái)就是一個(gè)很大的問(wèn)題。首先,肯定不能用單個(gè)字符作為索引單元,否則查“上?!睍r(shí),不能讓含有“海上”也匹配。但一句話:“北京天安門(mén)”,計(jì)算機(jī)如何按照中文的語(yǔ)言習(xí)慣進(jìn)行切分呢?“北京 天安門(mén)” 還是“北 京 天安門(mén)”?讓計(jì)算機(jī)能夠按照語(yǔ)言習(xí)慣進(jìn)行切分,往往需要機(jī)器有一個(gè)比較豐富的詞庫(kù)才能夠比較準(zhǔn)確的識(shí)別出語(yǔ)句中的單詞。另外一個(gè)解決的辦法是采用自動(dòng)切分算法:將單詞按照2元語(yǔ)法方式切分出來(lái),比如:北京天安門(mén) = 北京 京天 天安 安門(mén)。這樣,在查詢(xún)的時(shí)候,無(wú)論是查詢(xún)北京 還是查詢(xún)天安門(mén),將查詢(xún)?cè)~組按同樣的規(guī)則進(jìn)行切分:北京,天安安門(mén),多個(gè)關(guān)鍵詞之間按與and的關(guān)系組合,同樣能夠正確地映射到相應(yīng)的索引中。這種方式對(duì)于其他亞洲語(yǔ)言:韓文,日文都是通用的。表2 自動(dòng)切分與詞表切分比較自動(dòng)切分詞表切分實(shí)現(xiàn)實(shí)現(xiàn)非常簡(jiǎn)單實(shí)現(xiàn)復(fù)雜查詢(xún)?cè)黾恿瞬樵?xún)分析的復(fù)雜程度,適于實(shí)現(xiàn)比較復(fù)雜的查詢(xún)語(yǔ)法規(guī)則存儲(chǔ)效率索引冗余大,索引幾乎和原文一樣大索引效率高,為原文大小的30左右維護(hù)成本無(wú)詞表維護(hù)成本詞表維護(hù)成本非常高:中日韓等語(yǔ)言需要分別維護(hù)。還需要包括詞頻統(tǒng)計(jì)等內(nèi)容適用領(lǐng)域嵌入式系統(tǒng):運(yùn)行環(huán)境資源有限分布式系統(tǒng):無(wú)詞表同步問(wèn)題多語(yǔ)言環(huán)境:無(wú)詞表維護(hù)成本對(duì)查詢(xún)和存儲(chǔ)效率要求高的專(zhuān)業(yè)搜索引擎4.3 Lucene與Spider的結(jié)合首先構(gòu)造一個(gè)Index類(lèi)用來(lái)實(shí)現(xiàn)對(duì)內(nèi)容進(jìn)行索引。圖1 Index類(lèi)程序結(jié)構(gòu)圖代碼分析如下:package news;/* * 新聞搜索引擎* 計(jì)算機(jī)99630 沈晨 * 版本1.0 */import java.io.IOException;import .ChineseAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.index.IndexWriter;public class Index IndexWriter _writer = null; Index() throws Exception _writer = new IndexWriter(c:Newsindex, new ChineseAnalyzer(), true); /* * 把每條新聞加入索引中 * param url 新聞的url * param title 新聞的標(biāo)題 * throws java.lang.Exception */ void AddNews(String url, String title) throws Exception Document _doc = new Document(); _doc.add(Field.Text(title, title); _doc.add(Field.UnIndexed(url, url); _writer.addDocument(_doc); /* * 優(yōu)化并且清理資源 * throws java.lang.Exception */ void close() throws Exception _writer.optimize(); _writer.close(); 然后構(gòu)造一個(gè)HTML解析類(lèi),把通過(guò)bot程序收集的新聞內(nèi)容進(jìn)行索引。圖2 HTML解析類(lèi)程序結(jié)構(gòu)圖代碼分析如下:package news;/* * 新聞搜索引擎* 計(jì)算機(jī)99630 沈晨 * 版本1.0 */import java.util.Iterator;import java.util.Vector;import com.heaton.bot.HTMLPage;import com.heaton.bot.HTTP;import com.heaton.bot.Link;public class HTMLParse HTTP _http = null; public HTMLParse(HTTP http) _http = http; /* * 對(duì)Web頁(yè)面進(jìn)行解析后建立索引 */ public void start() try HTMLPage _page = new HTMLPage(_http); _page.open(_http.getURL(), null); Vector _links = _page.getLinks(); Index _index = new Index(); Iterator _it = _links.iterator(); int n = 0; while (_it.hasNext() Link _link = (Link) _it.next(); String _herf = input(_link.getHREF().trim(); String _title = input(_link.getPrompt().trim(); _index.AddNews(_herf, _title); n+; System.out.println(共掃描到 + n + 條新聞); _index.close(); catch (Exception ex) System.out.println(ex); /* * 解決java中的中文問(wèn)題 * param str 輸入的中文 * return 經(jīng)過(guò)解碼的中文 */ public static String input(String str) String temp = null; if (str != null) try temp = new String(str.getBytes(ISO8859_1); catch (Exception e) return temp; 4.4小結(jié)本章提出了使用全文搜索引擎Lucene進(jìn)行索引、搜索。最后,還結(jié)合了具體代碼說(shuō)明了如何把Lucene全文搜索引擎和Spider程序互相集合來(lái)實(shí)現(xiàn)新聞搜索的功能。第5章 基于Tomcat的Web服務(wù)器5.1什么是基于Tomcat的Web服務(wù)器Web服務(wù)器是在網(wǎng)絡(luò)中為實(shí)現(xiàn)信息發(fā)布、資料查詢(xún)、數(shù)據(jù)處理等諸多應(yīng)用搭建基本平臺(tái)的服務(wù)器。Web服務(wù)器如何工作:在Web頁(yè)面處理中大致可分為三個(gè)步驟,第一步,Web瀏覽器向一個(gè)特定的服務(wù)器發(fā)出Web頁(yè)面請(qǐng)求;第二步,Web服務(wù)器接收到Web頁(yè)面請(qǐng)求后,尋找所請(qǐng)求的Web頁(yè)面,并將所請(qǐng)求的Web頁(yè)面?zhèn)魉徒oWeb瀏覽器;第三步,Web服務(wù)器接收到所請(qǐng)求的Web頁(yè)面,并將它顯示出來(lái)。Tomcat是一個(gè)開(kāi)放源代碼、運(yùn)行servlet和JSP Web應(yīng)用軟件的基于Java的Web應(yīng)用軟件容器。Tomcat由Apache-Jakarta子項(xiàng)目支持并由來(lái)自開(kāi)放性源代碼Java社區(qū)的志愿者進(jìn)行維護(hù)。Tomcat Server是根據(jù)servlet和JSP規(guī)范進(jìn)行執(zhí)行的,因此我們就可以說(shuō)Tomcat Server也實(shí)行了Apache-Jakarta規(guī)范且比絕大多數(shù)商業(yè)應(yīng)用軟件服務(wù)器要好。5.2用戶(hù)接口設(shè)計(jì)5.2.1客戶(hù)端設(shè)計(jì)一個(gè)良好的查詢(xún)界面非常重要,例如Googl就以它簡(jiǎn)潔的查詢(xún)界面而聞名。我在設(shè)計(jì)的時(shí)候也充分考慮了實(shí)用性和簡(jiǎn)潔性。查詢(xún)界面截圖如下: 圖1 查詢(xún)界面截圖 搜索結(jié)果截圖如下:圖2 搜索結(jié)果截圖5.2.2服務(wù)端設(shè)計(jì)主要利用JavaTM Servlet技術(shù)實(shí)現(xiàn),用戶(hù)通過(guò)GET方法從客戶(hù)端向服務(wù)端提交查詢(xún)條件,服務(wù)端通過(guò)Tomcat的Servlet容器接受并分析提交參數(shù),再調(diào)用lucene的開(kāi)發(fā)包進(jìn)行搜索操作。最后把搜索的結(jié)果以HTTP消息包的形式發(fā)送至客戶(hù)端,從而完成一次搜索操作。服務(wù)端Servlet程序的結(jié)構(gòu)如下:圖3 服務(wù)端Servlet程序的結(jié)構(gòu)實(shí)現(xiàn)的關(guān)鍵代碼如下:public void Search(String qc, PrintWriter out) throws Exception / 從索引目錄創(chuàng)建索引 IndexSearcher _searcher = new IndexSearcher(c:newsindex); / 創(chuàng)建標(biāo)準(zhǔn)分析器 Analyzer analyzer = new ChineseAnalyzer(); / 查詢(xún)條件 String line = qc; / Query是一個(gè)抽象類(lèi) Query query = QueryParser.parse(line, title, analyzer); out.println(); out.println(搜索結(jié)果); out.println(); out.println( + + 新聞搜索引擎: + + + ); out.println(搜索關(guān)鍵字: + query.toString(title) + ); Hits hits = _searcher.search(query); out.println( 總共找到 + hits.length() + 條新聞); final int HITS_PER_PAGE = 10; for (int start = 0; start hits.length(); start += HITS_PER_PAGE) int end = Math.min(hits.length(), start + HITS_PER_PAGE); for (int i = start; i end; i+) Document doc = hits.doc(i); String url = doc.get(url); if (url != null) out.println( (i + 1) + + replace(doc.get(title), qc) + ); else System.out.println(沒(méi)有找到!); out.println(); _searcher.close(); ;5.3在Tomcat上部署項(xiàng)目Tomcat中的應(yīng)用程序是一個(gè)WAR(Web Archive)文件。WAR是Sun提出的一種Web應(yīng)用程序格式,與JAR類(lèi)似,也是許多文件的一個(gè)壓縮包。這個(gè)包中的文件按一定目錄結(jié)構(gòu)來(lái)組織:通常其根目錄下包含有Html和Jsp文件或者包含這兩種文件的目錄,另外還會(huì)有一個(gè)WEB-INF目錄,這個(gè)目錄很重要。通常在WEB-INF目錄下有一個(gè)web.xml文件和一個(gè)classes目錄,web.xml是這個(gè)應(yīng)用的配置文件,而classes目錄下則包含編譯好的Servlet類(lèi)和Jsp或Servlet所依賴(lài)的其它類(lèi)(如JavaBean)。通常這些所依賴(lài)的類(lèi)也可以打包成JAR放到WEB-INF下的lib目錄下,當(dāng)然也可以放到系統(tǒng)的CLASSPATH中。在Tomcat中,應(yīng)用程序的部署很簡(jiǎn)單,你只需將你的WAR放到To

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論