回顧以上的網頁分析,如果按照文字密度來找提取正文,那麼就是寫這麼乙個演算法,能夠從過濾html標籤後的文字中找到正文文字的起止行號,行號之間的文字就是網頁正文部分。
還是從上面三個網頁的分析結果看,他們都有這麼乙個特性:正文部分的文字密度要高出非正文部分很多。我們按照這個特性就可以很容易將演算法實現,那就是基於閾(讀音:yu)值去分析正文所在的位置。
那麼接下來就需要解決一些問題:
閾值的確定可以通過統計分析得出乙個比較好的值,我在實際處理過程中,發現這個值取180是比較合適的,也就是分析文字的時候,如果所分析的文字超過了180,那麼就可以認為到達了正文部分。
再有就是如何分析的問題,這個其實比較容易確定,一行行的分析效果肯定不好,如果在按行分析的過程中往下在分析幾行作為一次分析效果比較好。也就是一次性分析上5行左右,將字元累加起來,看看有沒有達到設定的閾值,如果達到了,那麼認為已經進入正文部分了。
importrefrom bs4 import
beautifulsoup,comment
import
requests
authorset =
defgetcontentfromweb(src):
obj =requests.get(src)
return
obj.text
deffilter_tags(html_str):
soup =beautifulsoup(html_str)
title =soup.title.string.encode().decode('
utf-8')
[script.extract()
for script in soup.findall('
script')]
[style.extract()
for style in soup.findall('
style')]
comments = soup.findall(text=lambda
text: isinstance(text, comment))
[comment.extract()
for comment in
comments]
reg1 = re.compile("
<[^>]*>")
content = reg1.sub('', soup.prettify()).split('\n'
)
return
title,content
defgetcontent(lst,title,authorset):
lstlen = [len(x) for x in
lst]
threshold=50startindex =0
maxindex =lstlen.index(max(lstlen))
endindex =0
for i,v in enumerate(lstlen[:maxindex-3]):
if v> threshold and lstlen[i+1]>5 and lstlen[i+2]>5 and lstlen[i+3]>5:
startindex =i
break
for i,v in
enumerate(lstlen[maxindex:]):
if v< threshold and lstlen[maxindex+i+1]<10 and lstlen[maxindex+i+2]<10 and lstlen[maxindex+i+3]<10:
endindex =i
break
content =['
'+x.strip()+'
'for x in lst[startindex:endindex+maxindex] if len(x.strip())>0]
return
content
defrun(url):
ctthtml=getcontentfromweb(url)
title,content =filter_tags(ctthtml)
newcontent =getcontent(content,title,authorset)
ctt =''
.join(newcontent)
return title,ctt
基於文字密度的新聞正文抽取方法之Python實現
回顧以上的網頁分析,如果按照文字密度來找提取正文,那麼就是寫這麼乙個演算法,能夠從過濾html標籤後的文字中找到正文文字的起止行號,行號之間的文字就是網頁正文部分。還是從上面三個網頁的分析結果看,他們都有這麼乙個特性 正文部分的文字密度要高出非正文部分很多。我們按照這個特性就可以很容易將演算法實現,...
基於行塊分布函式的正文抽取
的正文抽取演算法思路 1 預處理 剔除網頁html標籤,去掉所有的空白符 n,r,t等 2 依據 n 分行,若某文字行的上下存在兩個空行,且此文本行長度小於閾值40,則刪除此文本行 3 設定三行為一行塊,計算每段行塊的長度 4 找出每個連續有字元的段落,並找到起點和終點 要求 行塊長度大於0 段落開...
基於行塊分布函式的通用網頁正文抽取
基於行塊分布函式的通用網頁正文抽取 線性時間 不建dom樹 與html標籤無關 對於web資訊檢索來說,網頁正文抽取是後續處理的關鍵。雖然使用正規表示式可以準確的抽取某一固定格式的頁面,但面對形形色色的html,使用規則處理難免捉襟見肘。能不能高效 準確的將乙個頁面的正文抽取出來,並做到在大規模網頁...