日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Apache Nutch 1.3 学习笔记十一(页面评分机制 OPIC)

發(fā)布時(shí)間:2025/5/22 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apache Nutch 1.3 学习笔记十一(页面评分机制 OPIC) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

1. Nutch 1.3 的頁(yè)面評(píng)分機(jī)制

? ?Nutch1.3目前默認(rèn)還是使用OPIC作為其網(wǎng)頁(yè)分?jǐn)?shù)算法,但其之后,已經(jīng)引入了PageRank-like算法,以彌補(bǔ)OPIC算法的不足,目前OPIC算法還是作為NutchScoreFilter擴(kuò)展點(diǎn)的一個(gè)擴(kuò)展來(lái)實(shí)現(xiàn)的,而新的LinkRank算法有一個(gè)叫做org.apache.nutch.scoring.webgraph的包來(lái)對(duì)網(wǎng)頁(yè)進(jìn)行分?jǐn)?shù)計(jì)算,它可以解決OPIC解決不了的問(wèn)題,一個(gè)是重復(fù)地抓取頁(yè)面,會(huì)引起那些被抓取的頁(yè)面重要性增加;另一個(gè)是同時(shí)新添加的頁(yè)面必須進(jìn)行抓取,這樣會(huì)使整個(gè)網(wǎng)絡(luò)的總cash流通量增加,這樣會(huì)造成那些沒(méi)有重復(fù)抓取的頁(yè)面重要性降低。

2. 什么是OPIC算法及其特點(diǎn)

下面內(nèi)容來(lái)自[http://www.endless-loops.com/2011/03/nutch%E6%BA%90%E7%A0%81%E4%B8%AD%E7%9A%84%E9%93%BE%E6%8E%A5%E5%88%86%E6%9E%90%E7%AE%97%E6%B3%95-497.html]

OPIC
算法是針對(duì)靜態(tài)圖的。OPIC算法的基本思想是:每個(gè)頁(yè)面都有一個(gè)初始的cash,在抓取某頁(yè)面時(shí),該頁(yè)面的cash會(huì)平均地分配到其所接向的頁(yè)面,總的整個(gè)網(wǎng)絡(luò)圖中總的cash量是個(gè)定值,在抓取網(wǎng)頁(yè)的過(guò)程這些一定量的cash在頁(yè)面之間流通,很直觀地,OPIC算法中頁(yè)面的重要性就定義為流通過(guò)程中流過(guò)該頁(yè)面的cash的總量在總流通量中占的比重。

對(duì)于每個(gè)網(wǎng)面(圖中的結(jié)點(diǎn))OPIC算法維護(hù)兩個(gè)值cashhistorycash是網(wǎng)頁(yè)當(dāng)前的cash值,history表示的則是該網(wǎng)頁(yè)從OPIC算法開(kāi)始到最后一次被抓取,獲得的cash的總和。cash的初始值一般為1/n (n為網(wǎng)頁(yè)總數(shù))history初始值為0

OPIC
算法使用兩個(gè)向量C[1,…,n] H[1,…,n]分別表示各個(gè)網(wǎng)頁(yè)的cash值和history值,為了優(yōu)化算法,還引入一個(gè)變量G,使每一次抓取網(wǎng)頁(yè)時(shí)都有G=|H|=∑i H[i],原論文中OPIC算法的偽代碼如下:

?

  • OPIC:????
  • ????On-line?Page?Importance?Computation????
  • ????for?each?i?let?C[i]?:=?1/n?;????
  • ????for?each?i?let?H[i]?:=?0?;????
  • ????let?G:=0?;????
  • ????do?forever????
  • ????begin????
  • ?????choose?some?node?i?;????
  • ?????%%?each?node?is?selected????
  • ?????%%?infinitely?often????
  • ?????H[i]?+=?C[i];????
  • ?????%%?single?disk?access?per?page????
  • ?????for?each?child?j?of?i,????
  • ?????do?C[j]?+=?C[i]/out[i];????
  • ?????%%?Distribution?of?cash????
  • ?????%%?depends?on?L????
  • ?????G?+=?C[i];????
  • ?????C[i]?:=?0?;????
  • ????end????
  • ?

    OPIC算法的幾個(gè)問(wèn)題:
    1.
    無(wú)外向鏈接的sink頁(yè)面處理:
    ?OPIC
    算法中有個(gè)虛擬網(wǎng)頁(yè) (virtual page)的概念,虛擬網(wǎng)頁(yè)與所有網(wǎng)頁(yè)之間都有雙向鏈接。
    2.
    收斂性:
    OPIC
    算法將網(wǎng)頁(yè)重要性的計(jì)算集成到了網(wǎng)頁(yè)抓取的過(guò)程中,OPIC算法依賴于反復(fù)的抓取,一個(gè)重要的問(wèn)題就是(*)式的值在頁(yè)面反復(fù)抓取過(guò)程中是收斂的,只有確保這一點(diǎn)算法才是正確有意義的,關(guān)于收斂性的證明,原論文里有嚴(yán)密的證明,這里只提示一下。
    3.
    抓取策略
    上面提到OPIC算法依賴于反復(fù)抓取,那么抓取策略就是個(gè)重要問(wèn)題了,抓取策略直接影響網(wǎng)面重要性(*)式的收斂速度,事實(shí)上,理論與實(shí)驗(yàn)都證明貪心法中是最好的策略,即優(yōu)先抓取那些cash值高的頁(yè)面。

    為了解決OPIC算法的收斂性問(wèn)題,后來(lái)有人提出了Adaptive OPIC算法,它主要引一個(gè)時(shí)間窗(time window)的概念,它的點(diǎn)主要在于將網(wǎng)頁(yè)重要性的計(jì)算集成到網(wǎng)頁(yè)抓取的過(guò)程中了,簡(jiǎn)化了模型,簡(jiǎn)化了網(wǎng)頁(yè)重要性值的求解。

    3. OPICNUTCH中的應(yīng)用

    ? ?Nutch1.3的源碼org.apache.nutch.scoring.opicOPICScoringFilter類的注釋里提到Nutch實(shí)現(xiàn)的鏈接分析算法是基于《Adaptive On-Line Page Importance Computaion》。Nutch把它做為一個(gè)ScoringFilter插件來(lái)對(duì)付,也就是說(shuō)用戶可以擴(kuò)展自已的分?jǐn)?shù)算法,
    ? ?
    其中ParseOutputFormat是用來(lái)為計(jì)算分?jǐn)?shù)做準(zhǔn)備,而FetchOutputFormat中的RecordWriter集成了ParseOutputFormat,抓取解析后的網(wǎng)頁(yè)都會(huì)通過(guò)ParseOutputFormat生成的RecordWriter寫出去,而這個(gè)計(jì)算OPIC的方法就是在這個(gè)RecordWriter中調(diào)用的。

    4. Nutch OPIC源代碼分析

    下面是OPICScoringFIlterdistributeScoreToOutlinks方法。源代碼如下:

    ?

  • ??float?score?=?scoreInjected;?//得到插入的分?jǐn)?shù),不過(guò)好像沒(méi)用??
  • //?得到解析后初始化的分?jǐn)?shù),這個(gè)分?jǐn)?shù)在FetchThread在對(duì)網(wǎng)頁(yè)解析之前進(jìn)行了設(shè)置??
  • //?scfilters.passScoreBeforeParsing(key,?datum,?content);??
  • ????String?scoreString?=?parseData.getContentMeta().get(Nutch.SCORE_KEY);??
  • ????if?(scoreString?!=?null)?{??
  • ??????try?{??
  • ????????score?=?Float.parseFloat(scoreString);??
  • ??????}?catch?(Exception?e)?{??
  • ????????e.printStackTrace(LogUtil.getWarnStream(LOG));??
  • ??????}??
  • ????}??
  • ????//?得到有效的網(wǎng)頁(yè)個(gè)數(shù)??
  • ????int?validCount?=?targets.size();??
  • ????if?(countFiltered)?{??
  • ??????score?/=?allCount;??
  • ????}?else?{??
  • ??????if?(validCount?==?0)?{??
  • ????????//?no?outlinks?to?distribute?score,?so?just?return?adjust??
  • ????????return?adjust;??
  • ??????}??
  • ??????score?/=?validCount;??
  • ????}??
  • ????//?internal?and?external?score?factor??
  • ????float?internalScore?=?score?*?internalScoreFactor;?//?設(shè)置內(nèi)鏈接的分?jǐn)?shù)值,乘以一個(gè)內(nèi)鏈接的權(quán)重因子,默認(rèn)為1.0f??
  • ????float?externalScore?=?score?*?externalScoreFactor;?//?設(shè)置外鏈接的分?jǐn)?shù)值,乘以一個(gè)外鏈接的權(quán)重因子,默認(rèn)為1.0f??
  • ????for?(Entry<Text,?CrawlDatum>?target?:?targets)?{??
  • ??????try?{??
  • ????????String?toHost?=?new?URL(target.getKey().toString()).getHost();??
  • ????????String?fromHost?=?new?URL(fromUrl.toString()).getHost();??
  • ????????if(toHost.equalsIgnoreCase(fromHost)){??
  • ??????????target.getValue().setScore(internalScore);????//?設(shè)置內(nèi)鏈接的貢獻(xiàn)值??
  • ????????}?else?{??
  • ??????????target.getValue().setScore(externalScore);????//?設(shè)置外鏈接的貢獻(xiàn)值??
  • ????????}??
  • ??????}?catch?(MalformedURLException?e)?{??
  • ????????e.printStackTrace(LogUtil.getWarnStream(LOG));??
  • ????????target.getValue().setScore(externalScore);??
  • ??????}??
  • ????}??
  • ????//?XXX?(ab)?no?adjustment??I?think?this?is?contrary?to?the?algorithm?descr.??
  • ????//?XXX?in?the?paper,?where?page?"loses"?its?score?if?it's?distributed?to??
  • ????//?XXX?linked?pages...??
  • ????return?adjust;??
  • ??}??
  • ?

    5. 總結(jié)

    ? ?在網(wǎng)頁(yè)抓取中,排序算法的好壞直接影響到搜索引擎出現(xiàn)的更新結(jié)果,特點(diǎn)是在聚焦爬蟲中更是這樣。可能在Nutch 2.0以后就不會(huì)用OPIC,而是使用新的評(píng)分功能,在org.apache.nutch.scoring.webgraph中可以發(fā)現(xiàn)。

    6. 參考

    [1] Fixing the OPIC algorithm in Nutch ?http://wiki.apache.org/nutch/FixingOpicScoring
    [2] Abiteboul et al., 2003 ?http://www2003.org/cdrom/papers/refereed/p007/p7-abiteboul.html
    [3] http://www.endless-loops.com/2011/03/nutch%E6%BA%90%E7%A0%81%E4%B8%AD%E7%9A%84%E9%93%BE%E6%8E%A5%E5%88%86%E6%9E%90%E7%AE%97%E6%B3%95-497.html
    [4] http://wiki.apache.org/nutch/FixingOpicScoring

    ?

    作者:http://blog.csdn.net/amuseme_lu

    ?

    ?


    ?

    ?

    ?

    ?

    ?

    相關(guān)文章閱讀及免費(fèi)下載:

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記目錄

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記一

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記二

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記三(Inject)

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記三(Inject CrawlDB Reader)

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記四(Generate)

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記四(SegmentReader分析)

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記五(FetchThread)

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記五(Fetcher流程)

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記六(ParseSegment)

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記七(CrawlDb - updatedb)

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記八(LinkDb)

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記九(SolrIndexer)

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記十(Ntuch 插件機(jī)制簡(jiǎn)單介紹)

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記十(插件擴(kuò)展)

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記十(插件機(jī)制分析)

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記十一(頁(yè)面評(píng)分機(jī)制 OPIC)

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記十一(頁(yè)面評(píng)分機(jī)制 LinkRank 介紹)

    ?

    ?

    ?

    Apache Nutch 1.3 學(xué)習(xí)筆記十二(Nutch 2.0 的主要變化)

    ?

    ?

    ?

    更多《Apache Nutch文檔》,盡在開(kāi)卷有益360 http://www.docin.com/book_360

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/ibook360/archive/2011/10/24/2222181.html

    總結(jié)

    以上是生活随笔為你收集整理的Apache Nutch 1.3 学习笔记十一(页面评分机制 OPIC)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。