網(wǎng)頁正文提取的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及爬詞技術(shù)領(lǐng)域,具體的涉及一種網(wǎng)頁正文提取的方法及裝置。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,網(wǎng)頁已成為人們獲取信息的重要來源。但不同于傳統(tǒng)文本,網(wǎng)頁中除包含有效信息(正文)外還包含大量無效信息(噪聲),例如網(wǎng)站的導(dǎo)航鏈接、廣告內(nèi)容與鏈接、版權(quán)信息等,這使得獲取有效信息的效率大幅降低。為有效利用網(wǎng)頁的信息,需提供一種快速準(zhǔn)確的正文自動提取方法對無效信息進(jìn)行過濾,提取出用戶真正需要的正文內(nèi)容,這也是影響輿情監(jiān)測與分析、基于互聯(lián)網(wǎng)大數(shù)據(jù)挖掘等領(lǐng)域分析結(jié)果的關(guān)鍵因素。
[0003]現(xiàn)有的網(wǎng)頁正文提取方式主要有基于DOM樹的方法和基于模板規(guī)則的方法?;贒OM樹的方法將網(wǎng)頁HTML文件解析為DOM樹,依據(jù)正文信息在DOM樹中的分布規(guī)律確定正文的位置,但這種方法由于要解析遍歷所有DOM樹使得正文提取速度較慢,且網(wǎng)頁結(jié)構(gòu)差異性大復(fù)雜度不同,特定的分布規(guī)律只能針對部分網(wǎng)頁有效,泛化能力一般。基于模板規(guī)則的方法一般通過人工為特定的網(wǎng)站配置提取模板規(guī)則,從而可以快速的在指定的區(qū)域內(nèi)將文本提取出來,但網(wǎng)站的不定時更新常導(dǎo)致模板失效而無法有效提取信息,并且規(guī)則比較固定導(dǎo)致提取的正文常含有不同程度的雜質(zhì)(主要為不規(guī)范的腳本),這種方法要維持較高的提取準(zhǔn)確度,需大量的人工投入以及優(yōu)質(zhì)的模板規(guī)則選擇,這在網(wǎng)絡(luò)信息爆炸的時代是極大的挑戰(zhàn)。
[0004]現(xiàn)有基于DOM樹結(jié)構(gòu)的網(wǎng)頁正文的提取方法存在以下缺點:1)D0M樹的構(gòu)建和遍歷效率低、速度慢;2)對于不規(guī)范的網(wǎng)頁,可能有構(gòu)建DOM樹失敗的風(fēng)險;3)該方法的正文分布規(guī)律不具有一般性,只對部分網(wǎng)頁具有較好的提取準(zhǔn)確率。
[0005]現(xiàn)有基于模板規(guī)則提取正文的方法存在以下缺點:I)人工維護(hù)模板規(guī)則工作量大;2)模板規(guī)則更新的及時性無法保障;3)模板規(guī)則的質(zhì)量難以保證。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的在于提供一種能解決上述技術(shù)問題的網(wǎng)頁正文提取的方法及裝置。
[0007]本發(fā)明的一方面一種網(wǎng)頁正文提取方法,包括以下步驟:
[0008]步驟SlOO:對網(wǎng)頁HTML文本進(jìn)行切片和過濾處理,得到文本切片列表sliceList,對文本切片列表sliceList中的不規(guī)范標(biāo)簽進(jìn)行修復(fù),得到修復(fù)切片列表rSliceList,對修復(fù)切片列表rSliceList中待清理標(biāo)簽進(jìn)行清理,得到清理切片列表cSliceList;
[0009]步驟S200:計算清理切片列表cSliceList中每個文本切片slice的特征值,對具有特征值的清理切片列表cSliceList進(jìn)行基于切片特征值的多次文本聚合,每次文本聚合后,從重新算每個文本切片si ice的特征值,得到聚合切片列表aggregateList;
[0010]步驟S300:遍歷聚合切片列表aggregateList,過濾其中的標(biāo)簽切片,對文本切片進(jìn)行規(guī)制校驗,如果滿足規(guī)則條件則過濾,如果不滿足就加入候選列表中,對候選列表按照文本有效字符長度從高到低進(jìn)行排序,取候選列表中排序第一的文本作為正文輸出。
[0011]進(jìn)一步地,步驟SlOO包括以下步驟:
[0012]步驟S110:根據(jù)網(wǎng)頁類型設(shè)置需要過濾的標(biāo)簽集合,逐字符讀取HTML文本,當(dāng)其字符為html文本分隔符“〈”時,將“〈”之前的文本構(gòu)造為一個文本切片并設(shè)置其標(biāo)簽類型為空插入文本切片列表sliceList中,記“〈”位置為標(biāo)簽起始位置并繼續(xù)查找html文本分隔符“〉”,記“〉”位置為標(biāo)簽結(jié)束位置,提取簽起始位置與標(biāo)簽結(jié)束位置之間文本的標(biāo)簽類型,比對標(biāo)簽類型是否屬于過濾標(biāo)簽集合,如果屬于則查找標(biāo)簽類型對應(yīng)的結(jié)束標(biāo)簽并將簽類型的標(biāo)簽起始位置與其對應(yīng)的結(jié)束標(biāo)簽的結(jié)束位置之間的文本過濾清除,如果不屬于則將簽起始位置與標(biāo)簽結(jié)束位置之間的文本及標(biāo)簽類型構(gòu)造為一個文本切片,若標(biāo)簽類型的第一個字符不是則將該切片記為開始標(biāo)簽切片BTag,否則將該切片記為結(jié)束標(biāo)簽切片ETag,插入文本切片列表sliceList中,遍歷html文本后輸出文本切片列表sliceList;
[0013]步驟S120:初始化堆桟stack,遍歷文本切片列表sliceList,若當(dāng)前文本切片si ice為BTag則將當(dāng)前文本切片si ice及其索引推入stack,若當(dāng)前文本切片si ice為ETag,則查找stack中是否有與當(dāng)前文本切片si ice的標(biāo)簽類型對應(yīng)的BTag切片,若有則對stack進(jìn)行出棧操作,一直到出棧的元素的標(biāo)簽類型與當(dāng)前ETag切片的標(biāo)簽類型相同為止,對于標(biāo)簽類型不相同的出棧的文本切片slice將其對應(yīng)的索引加入待修復(fù)列表,遍歷完畢得到待修復(fù)列表,對文本切片列表sliceList對應(yīng)位置的文本切片slice進(jìn)行刪除或補(bǔ)全操作,輸出修復(fù)切片列表rSliceList;
[0014]步驟S130:根據(jù)網(wǎng)頁類型初始化清理標(biāo)簽集合及清理器,遍歷修復(fù)切片列表rSliceList,若當(dāng)前文本切片si ice為BTag且其標(biāo)簽類型屬于清理標(biāo)簽集合,則使用該標(biāo)簽對應(yīng)的清理器進(jìn)行清理,清理器查找與當(dāng)前BTag切片標(biāo)簽類型對應(yīng)的ETag切片,并將當(dāng)前BTag切片索引位置與對應(yīng)ETag切片索引位置之間的所有BTag和ETag類型切片刪除,將其之間的所有標(biāo)簽類型為空的切片的文本進(jìn)行合并構(gòu)造新的文本切片加入清理切片列表cSliceList中,并返回對應(yīng)ETag切片索引位置的下一位置作為下一輪迭代的開始位置;若前文本切片slice不為BTag切片則將該文本切片加入清理切片列表cSliceList中,遍歷完畢輸出清理切片列表cSliceList。
[0015]進(jìn)一步地,特征值為:每個切片文本切片slice直接包含文本切片的數(shù)量、標(biāo)簽類型、是否為空標(biāo)簽、每個切片文本切片slice直接包含的標(biāo)簽數(shù)量、每個切片文本切片slice直接包含的a標(biāo)簽數(shù)量、標(biāo)簽路徑和包含的分割符數(shù)量。
[0016]進(jìn)一步地,步驟S200中多次文本聚合包括依序進(jìn)行的格式類標(biāo)簽文本聚合、轉(zhuǎn)義字符聚合、空標(biāo)簽過濾聚合、P標(biāo)簽聚合、div標(biāo)簽聚合和文本切片數(shù)量聚合。
[0017]進(jìn)一步地,規(guī)則包括通用規(guī)則與定制規(guī)則,通用規(guī)則為用于過濾網(wǎng)頁中常見的噪聲文本,定制規(guī)則為用于過濾不同類型網(wǎng)頁特定的噪聲。
[0018]本發(fā)明的另一方面還提供了一種如上述的方法用的網(wǎng)頁正文提取裝置,包括:
[0019]文本預(yù)處理模塊,用于對網(wǎng)頁HTML文本進(jìn)行切片和過濾處理,得到文本切片列表sliceList,對文本切片列表si iceList中的不規(guī)范標(biāo)簽進(jìn)行修復(fù),得到修復(fù)切片列表rSliceList,對修復(fù)切片列表rSliceList中待清理標(biāo)簽進(jìn)行清理,得到清理切片列表cSliceList;
[°02°]聚合模塊,用于計算清理切片列表cSliceList中每個文本切片slice的特征值,對具有特征值的清理切片列表cSliceList進(jìn)行基于切片特征值的多次文本聚合,每次文本聚合后,重新算每個文本切片si ice的特征值,得到聚合切片列表aggregateList;
[0021]過濾提取模塊,用于遍歷聚合切片列表aggregateList,過濾其中的標(biāo)簽切片,對文本切片進(jìn)行規(guī)制校驗,如果滿足規(guī)則條件則過濾,如果不滿足就加入候選列表中,對候選列表按照文本有效字符長度從高到低進(jìn)行排序,取候選列表中排序第一的文本作為正文輸出。
[0022]進(jìn)一步地,文本預(yù)處理模塊包括:
[0023]文本切片過濾模塊,用于根據(jù)網(wǎng)頁類型設(shè)置需要過濾的標(biāo)簽集合,逐字符讀取HTML文本,當(dāng)其字符為html文本分隔符“〈”時,將“〈”之前的文本構(gòu)造為一個文本切片并設(shè)置其標(biāo)簽類型為空插入文本切片列表sliceList中,記“〈”位置為標(biāo)簽起始位置并繼續(xù)查找html文本分隔符“〉”,記“〉”位置為標(biāo)簽結(jié)束位置,提取簽起始位置與標(biāo)簽結(jié)束位置之間文本的標(biāo)簽類型,比對標(biāo)簽類型是否屬于過濾標(biāo)簽集合,如果屬于則查找標(biāo)簽類型對應(yīng)的結(jié)束標(biāo)簽并將簽類型的標(biāo)簽起始位置與其對應(yīng)的結(jié)束標(biāo)簽的結(jié)束位置之間的文本過濾清除,如果不屬于則將簽起始位置與標(biāo)簽結(jié)束位置之間的文本及標(biāo)簽類型構(gòu)造為一個文本切片,若標(biāo)簽類型的第一個字符不是則將該切片記為開始標(biāo)簽切片BTag,否則將該切片記為結(jié)束標(biāo)簽切片ETag,插入文本切片列表sliceList中,遍歷html文本后輸出文本切片列表sliceList;;
[0024]標(biāo)簽修復(fù)模塊,用于初始化堆桟stack,遍歷文本切片列表sliceList,若當(dāng)前文本切片si ice為BTag則將當(dāng)前文本切片si ice及其索引推入stack,若當(dāng)前文本切片s I ice為ETag,則查找stack中是否有與當(dāng)前文本切片si ice的標(biāo)簽類型對應(yīng)的BTag切片,若有則對stack進(jìn)行出棧操作,一直到出棧的元素的標(biāo)簽類型與當(dāng)前ETag切片的標(biāo)簽類型相同為止,對于標(biāo)簽類型不相同的出棧的文本切片slice將其對應(yīng)的索引加入待修復(fù)列表,遍歷完畢得到待修復(fù)列表,對文本切片列表sliceList對應(yīng)位置的文本切片si ice進(jìn)行刪除或補(bǔ)全操作,輸出修復(fù)切片列表rSliceList;
[0025]標(biāo)簽清理模塊,用于根據(jù)網(wǎng)頁類型初始化清理標(biāo)簽集合及清理器,遍歷修復(fù)切片列表rSliceList,若當(dāng)前文本切片si ice為BTag且其標(biāo)簽類型屬于清理標(biāo)簽集合,則使用該標(biāo)簽對應(yīng)的清理器進(jìn)行清理,清理器查找與當(dāng)前BTag切片標(biāo)簽類型對應(yīng)的ETag切片,并將當(dāng)前BTag切片索引位置與對應(yīng)ETag切片索引位置之間的所有BTag和ETag類型切片刪除,將其之間的所有標(biāo)簽類型為空的切片的文本進(jìn)行合并構(gòu)造新的文本切片加入清理切片列表cSliceList中,并返回對應(yīng)ETag切片索引位置的下一位置作為下一輪迭代的開始位置;
[0026]若前文本切片slice不為BTag切片則將該文本切片加入清理切片列表cSliceList中,遍歷完畢輸出清理切片列表cSliceList。
[0027]本發(fā)明的技術(shù)效果:
[0028]本發(fā)明提供的網(wǎng)頁正文提取方法無需人工干預(yù)設(shè)置相應(yīng)的提取規(guī)則,即可實現(xiàn)網(wǎng)頁正文的快速自動提取,該提取方法可以適應(yīng)不斷更新的網(wǎng)站規(guī)則,很好的保留正文的格式信息,具有很高的準(zhǔn)確度和正文完整度。
[0029]本發(fā)明提供的網(wǎng)頁正文提取裝置無需人工干預(yù)設(shè)置相應(yīng)的提取規(guī)則,即可實現(xiàn)網(wǎng)頁