統(tǒng)計十篇新聞TF-IDF

統(tǒng)計TF-IDF詞頻,每篇文章的 top10 的高頻詞存儲為 json 文件
TF-IDF
TF-IDF(term frequency–inverse document frequency)是一種用于資訊檢索與文本挖掘的常用加權(quán)技術(shù)。TF-IDF是一種統(tǒng)計方法,用以評估一字詞對于一個文件集或一個語料庫中的其中一份文件的重要程度。字詞的重要性隨著它在文件中出現(xiàn)的次數(shù)成正比增加,但同時會隨著它在語料庫中出現(xiàn)的頻率成反比下降。TF-IDF加權(quán)的各種形式常被搜索引擎應(yīng)用,作為文件與用戶查詢之間相關(guān)程度的度量或評級。除了TF-IDF以外,互聯(lián)網(wǎng)上的搜索引擎還會使用基于連結(jié)分析的評級方法,以確定文件在搜尋結(jié)果中出現(xiàn)的順序。
假如一篇文件的總詞語數(shù)是100個,而詞語“母牛”出現(xiàn)了3次,那么“母牛”一詞在該文件中的詞頻就是3/100=0.03。一個計算文件頻率(DF)的方法是測定有多少份文件出現(xiàn)過“母牛”一詞,然后除以文件集里包含的文件總數(shù)。所以,如果“母牛”一詞在1,000份文件出現(xiàn)過,而文件總數(shù)是10,000,000份的話,其逆向文件頻率就是log(10,000,000 / 1,000)=4。最后的TF-IDF的分數(shù)為0.03 * 4=0.12。 —— [ 維基百科 ]
博主選擇的是chinadaily的十篇新聞.
1.使用http request請求
2.使用Beautiful Soup來抓取文章標題和內(nèi)容
3.統(tǒng)計TF-IDF
4.保存到j(luò)son文件中
代碼塊
@requires_authorization
#coding=utf-8
import requests
import bs4
import sys
import math
import json
reload(sys)
sys.setdefaultencoding('utf-8')
url_list = ['http://www.chinadaily.com.cn/china/2016-04/20/content_24701635.htm',
'http://www.chinadaily.com.cn/china/2016-04/20/content_24700746.htm',
'http://www.chinadaily.com.cn/china/2016-04/20/content_24681482.htm',
'http://www.chinadaily.com.cn/china/2016-04/19/content_24675530.htm',
'http://www.chinadaily.com.cn/china/2016-04/19/content_24675455.htm',
'http://www.chinadaily.com.cn/china/2016-04/19/content_24674074.htm',
'http://www.chinadaily.com.cn/china/2016-04/19/content_24655536.htm',
'http://www.chinadaily.com.cn/china/2016-04/18/content_24643685.htm',
'http://www.chinadaily.com.cn/china/2016-04/18/content_24636917.htm',
'http://www.chinadaily.com.cn/china/2016-04/15/content_24562198.htm'
]
articles_title = []
articles_content = []
for pos,url in enumerate(url_list):
r = requests.get(url)
soup1 = bs4.BeautifulSoup(r.text)
soup2 = bs4.BeautifulSoup(str(soup1.find_all(id="Title_e")))
articles_title.append(soup2.h2.string)
mystr = ""
soup3 = bs4.BeautifulSoup(str(soup1.find_all(id="Content")))
for x in soup3.find_all("p"):
mystr = mystr + x.string
str_p = ""
contents = []
for pos,x in enumerate(mystr):
if x == '.' or x == ',':
if pos < (len(mystr) - 1) and mystr[pos+1] >= '0' and mystr[pos+1] <= '9':
str_p = str_p + x
elif str_p == "":
continue
else:
contents.append(str_p)
str_p = ""
elif x == '(' or x == ')' or x == ' ' or x == '"' or x == '[' or x == ']' or x == '-':
if str_p == "":
continue
else:
contents.append(str_p)
str_p = ""
else:
str_p = str_p + x
articles_content.append(contents)
Dict_idf = {}
DictList = []
for content in articles_content:
Dict_tf = {}
for x in content:
if not Dict_tf.has_key(x):
Dict_tf[x] = 1.0
if not Dict_idf.has_key(x):
Dict_idf[x] = 1.0
else:
Dict_idf[x] += 1.0
else:
Dict_tf[x] += 1.0
for k, v in Dict_tf.items():
Dict_tf[k] = v / len(content)
DictList.append(Dict_tf)
for k, v in Dict_idf.items():
Dict_idf[k] = math.log(float(len(url_list)) / v)
for pos,x in enumerate(DictList):
for k,v in x.items():
DictList[pos][k] = v*Dict_idf[k]
DictList[pos] = sorted(x.iteritems(), key=lambda d: d[1], reverse=True)
"""
[
[
article_titile:"XXXX"
[
{
word:"hello"
value:3.5
}
{
word:"hello"
value:3.5
}
{
word:"hello"
value:3.5
}
...
]
]
]
"""
data = []
for pos in range(10):
data2=[]
data2.append("article_titile:")
data2.append(articles_title[pos])
data2.append([{"word": k,"value":round(v,4)} for k,v in DictList[pos][:10]])
data.append(data2)
# Writing JSON data
with open('data.json', 'w') as f:
json.dump(data, f)
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當前標題:Python爬取十篇新聞統(tǒng)計TF-IDF-創(chuàng)新互聯(lián)
當前URL:http://chinadenli.net/article48/ddpphp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、標簽優(yōu)化、域名注冊、商城網(wǎng)站、靜態(tài)網(wǎng)站、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容