版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
中國(guó)礦業(yè)大學(xué)計(jì)算機(jī)學(xué)院2018級(jí)本科生課程報(bào)告課程名稱信息內(nèi)容安全報(bào)告題目基于豆瓣長(zhǎng)影評(píng)的內(nèi)容推薦報(bào)告時(shí)間2021.7.6姓名周宗文學(xué)號(hào)08182901任課教師曹天杰2020-2021(二)《信息內(nèi)容安全》課程報(bào)告評(píng)分表序號(hào)畢業(yè)要求課程教學(xué)目標(biāo)考查方式與考查點(diǎn)占比得分12.3目標(biāo)1:掌握信息內(nèi)容安全的基本概念、分類、原理和相關(guān)技術(shù),能夠根據(jù)課程基本知識(shí)對(duì)信息內(nèi)容安全領(lǐng)域出現(xiàn)的問(wèn)題進(jìn)行歸類、分析、并有初步分析和解決問(wèn)題的能力。通過(guò)課堂講授和課堂研討掌握信息內(nèi)容安全概念和理論知識(shí)。40%3.2目標(biāo)2:掌握信息內(nèi)容安全處理相關(guān)的理論、技術(shù)以及健全的評(píng)價(jià)體系,能夠根據(jù)具體問(wèn)題分析算法、設(shè)計(jì)算法、實(shí)現(xiàn)算法并能綜合評(píng)價(jià)算法。24.3目標(biāo)3:掌握信息內(nèi)容安全的基礎(chǔ)知識(shí),針對(duì)具體問(wèn)題和要求選擇正確的技術(shù)路線,通過(guò)在實(shí)驗(yàn)環(huán)境中進(jìn)行仿真實(shí)驗(yàn)并能根據(jù)算法特點(diǎn)進(jìn)行攻擊測(cè)試和綜合性能評(píng)價(jià),得到具有參考價(jià)值的結(jié)論。課程報(bào)告;實(shí)現(xiàn)有關(guān)信息內(nèi)容安全的一個(gè)軟件系統(tǒng)。分析和對(duì)比各項(xiàng)技術(shù),選擇相應(yīng)的技術(shù)進(jìn)行算法設(shè)計(jì)并在實(shí)驗(yàn)環(huán)境中進(jìn)行仿真實(shí)驗(yàn)和性能評(píng)價(jià),得到有效結(jié)論。60%總分100%評(píng)閱人:2021年7月10日目錄報(bào)告摘要 4報(bào)告正文 51.程序流程 52.爬蟲部分 62.1分析和爬取豆瓣電影長(zhǎng)評(píng)頁(yè)面 62.2爬取豆瓣詳細(xì)評(píng)論 72.3應(yīng)對(duì)反爬蟲措施 82.4爬蟲部分代碼 83.推薦部分 103.1.文章結(jié)構(gòu)化 103.2計(jì)算相似度矩陣 123.3用戶矩陣 123.4計(jì)算推薦度 134.實(shí)現(xiàn)效果 13報(bào)告摘要關(guān)鍵詞:豆瓣長(zhǎng)影評(píng);爬蟲;影評(píng)推薦;基于內(nèi)容的推薦;根據(jù)在課堂上所學(xué)的內(nèi)容,觀察豆瓣長(zhǎng)影評(píng)論頁(yè)面的特征,編寫了一個(gè)爬蟲實(shí)現(xiàn)可以自動(dòng)爬取豆瓣某一電影下的所有長(zhǎng)影評(píng),實(shí)現(xiàn)對(duì)這些評(píng)論的分析,根據(jù)TD-IDF算法提取關(guān)鍵詞作為特征向量,計(jì)算各文章的相似度,最終實(shí)現(xiàn)對(duì)用戶推薦用戶沒(méi)有看過(guò)的,推薦度高的文章。
報(bào)告正文程序流程根據(jù)課堂上所學(xué)的知識(shí),以及我的理解,我設(shè)計(jì)的程序流程是這樣的圖1程序流程圖以上就是我設(shè)計(jì)的程序流程。接下來(lái)就解析各部分的實(shí)現(xiàn)過(guò)程,這里簡(jiǎn)化了程序,這個(gè)程序只爬取5篇評(píng)論,提取前10個(gè)關(guān)鍵詞進(jìn)行相似度矩陣的計(jì)算,然后隨機(jī)生成5個(gè)用戶的用戶矩陣進(jìn)行推薦度計(jì)算,然后根據(jù)計(jì)算出來(lái)的推薦值的大小,給用戶進(jìn)行推薦。2.爬蟲部分2.1分析和爬取豆瓣電影長(zhǎng)評(píng)頁(yè)面首先構(gòu)造url,觀察豆瓣的長(zhǎng)影評(píng)基本都是/subject/+電影id+/reviews?start=,start值為評(píng)論頁(yè)數(shù),這種格式,構(gòu)造url把電影頁(yè)面的html文件爬取下來(lái),分析我們要爬取的內(nèi)容所在的元素。圖2豆瓣電影頁(yè)面例如這個(gè)頁(yè)面,它是不顯示這篇文章的詳細(xì)內(nèi)容的,只有一個(gè)展開,我們爬下它的html頁(yè)面進(jìn)行分析圖3需要爬取的標(biāo)簽對(duì)于在這個(gè)頁(yè)面的評(píng)論,我只爬取每個(gè)評(píng)論下的<ahref="/people/204500361/"class="name">夏風(fēng)已至</a><h2><ahref="/review/13611559/">后半段高潮迭起</a></h2><spanclass="allstar40main-title-rating"title="推薦"></span>這幾個(gè)標(biāo)簽,代表評(píng)價(jià)的用戶名,文章具體鏈接,以及對(duì)這個(gè)電影的評(píng)價(jià),這里評(píng)價(jià)會(huì)在之后作為文章的特征向量,文章具體鏈接用于再次構(gòu)造請(qǐng)求爬取具體整篇文章。這里有一個(gè)特殊的地方,就是豆瓣長(zhǎng)評(píng)可能會(huì)有無(wú)評(píng)價(jià)等級(jí)的評(píng)論,就是沒(méi)有<spanclass="allstar40main-title-rating"title="推薦"></span>這項(xiàng)標(biāo)簽,會(huì)對(duì)我們的爬蟲,對(duì)應(yīng)每個(gè)評(píng)論的信息有影響,通過(guò)分析,這種評(píng)論一般會(huì)帶有<spancontent="2021-06-14"class="main-meta">這樣的標(biāo)簽,通過(guò)檢測(cè)這個(gè)標(biāo)簽,就可以知道有那個(gè)評(píng)論說(shuō)沒(méi)有給出評(píng)價(jià)等級(jí)的。爬取效果如下圖4爬取電影評(píng)論頁(yè)面效果2.2爬取豆瓣詳細(xì)評(píng)論 根據(jù)爬取的文章id構(gòu)造/review/文章id,進(jìn)行請(qǐng)求,根據(jù)爬取下來(lái)的html進(jìn)行分析(圖5),我們需要爬取<divclass="review-contentclearfix"data-author=""data-url=""data-original="0">這個(gè)html標(biāo)簽下的內(nèi)容,就是完整文章,爬取完整的文章然后進(jìn)行詞頻統(tǒng)計(jì),去除停止詞后通過(guò)TD-IDF算法提取關(guān)鍵詞,并且通過(guò)結(jié)巴分詞存儲(chǔ)詞頻,形成一個(gè)詞頻詞典,作為文章結(jié)構(gòu)化時(shí)的特征向量。圖5html分析圖6爬取每篇評(píng)論的效果2.3應(yīng)對(duì)反爬蟲措施豆瓣的影評(píng)經(jīng)過(guò)我多次爬取,貌似沒(méi)有什么反爬蟲措施,這里使用了fake_useragent這個(gè)庫(kù),隨機(jī)生成瀏覽器的ua放在請(qǐng)求頭中,每次使用一個(gè)隨機(jī)的ua進(jìn)行請(qǐng)求。然后利用不同的cookie進(jìn)去請(qǐng)求。2.4爬蟲部分代碼
#爬取某篇電影下的評(píng)論html
=
get_movie_html(34913671,0)
html1
=
html.text.encode(encoding="utf-8")
(type(html1))
(html1)
#file
=
open(r"J:\\vscode\爬蟲\test.txt",
"w+b")
#file.write(html1)
soup
=
BeautifulSoup(html.text,
'lxml')
#使用soup庫(kù)
title
=
soup.title.string
#獲取網(wǎng)頁(yè)標(biāo)題,得到評(píng)論數(shù)以及電影名
title
=
title.replace('
',
'')
title
=
title.replace('\n',
'')
len_title
=
len(title)
for
i
in
range
(0,len_title):
if(title[i]
==
'('):
flag1=i
if(title[i]
==
')'):
flag2=i
#print(str(flag1)+'
'+str(flag2))
movie_name
=
title[0:flag1-3]
('電影名:'+
movie_name)
('該電影的評(píng)論數(shù)為'+title[flag1+1:flag2])
reviewer_id=[]
#用戶id
review_level=[]
#評(píng)價(jià)等級(jí)
review_detailed_id=[]
#文章id
reviewer_ids=soup.find_all('a',class_="name")
for
reviewer_id_1
in
reviewer_ids:
#爬出用戶
reviewer_id.append(reviewer_id_1.text)
#print(reviewer_id_1.text)
#爬出評(píng)價(jià)等級(jí)
review_levels=soup.find_all('header',class_="main-hd")
'''
力薦=5星
推薦=4星
還行=3星
較差=2星
很差=1星
'''
for
review_level_1
in
review_levels:
review_level_1=review_level_1.find('span')
if
review_level_1['class'][0]
==
'main-meta':
#經(jīng)過(guò)研究如果用戶沒(méi)有給評(píng)價(jià)就會(huì)具有這個(gè)特征
review_level.append('無(wú)評(píng)價(jià)')
else
:
review_level.append(review_level_1['title'])
#print(review_level_1['class'][0])
review_detailed_ids=soup.find_all('div',class_="review-short")
#爬取評(píng)論文章的id
for
review_detailed_ids_1
in
review_detailed_ids:
review_detailed_id.append(review_detailed_ids_1['data-rid'])
#print(review_detailed_ids_1['data-rid'])
for
i
in
range(0,10):
(reviewer_id[i]+'
評(píng)價(jià):'+review_level[i]+'
詳細(xì)評(píng)價(jià)文章url的id
:'+review_detailed_id[i])
#爬取5篇該電影下的詳細(xì)文章for
i
in
range(0,5):
('正在爬取第
'+str(i+1)+'
篇詳細(xì)評(píng)論')
html_detail
=
get_movie_full_review(review_detailed_id[i])
#爬取評(píng)論細(xì)節(jié)
(html_detail.text)
html_detail
=
html_detail.text.encode(encoding="utf-8")
soup_review
=
BeautifulSoup(html_detail,
'lxml')
#使用soup庫(kù)
review_alls=soup_review.find_all('div',class_="review-content
clearfix")
review_all_title=soup_review.find('meta',property="og:title")
movie_review_title.append(review_all_title['content'])
movie_full_review_all.append(review_all_title['content'])
(review_all_title['content'])
for
review_all
in
review_alls:
#把標(biāo)題和評(píng)論細(xì)節(jié)一起爬下來(lái),然后都添加在review_fenci_all中
'''title_de
=
soup_review.title.string
title_de
=
title_de.replace('
',
'')
title_de
=
title_de.replace('\n',
'')'''
(title_de)
(review_all.text)
#movie_full_review_all.append(title_de)
movie_full_review_all[i]
+=
''
movie_full_review_all[i]
+=
review_all.text
(movie_full_review_all[i])
list_fenci.append(fenci_plv(movie_full_review_all[i]))
("詞典已記錄")
review_fenci_all+=movie_full_review_all[i]3.推薦部分3.1.文章結(jié)構(gòu)化首先根據(jù)之前爬取的評(píng)論,統(tǒng)計(jì)爬取的全部評(píng)論的TD-IDF前10的關(guān)鍵詞,作為關(guān)鍵詞列表。(這里的TD-IDF是使用的結(jié)巴分詞自帶的預(yù)料庫(kù),根據(jù)我的測(cè)試,提取出來(lái)的關(guān)鍵詞很符合文章特征)然后根據(jù)各個(gè)評(píng)論詞頻前10的關(guān)鍵詞進(jìn)行對(duì)比,取具有相同關(guān)鍵詞的詞頻作為關(guān)鍵詞矩陣的向量,這里只爬取5篇評(píng)論,制作出來(lái)的矩陣如下,這里取之前爬取的評(píng)價(jià)星級(jí)作為最后一個(gè)向量參數(shù)。 以上面爬取的《哆啦a夢(mèng),伴我同行》這部電影形成的文章關(guān)鍵詞矩陣如下圖7關(guān)鍵詞矩陣計(jì)算關(guān)鍵詞的矩陣的部分代碼,使用之前爬取評(píng)論時(shí)創(chuàng)建的分詞字典
jvzhen_list=[[0]
*
11
for
i
in
range(5)]
#創(chuàng)建的臨接矩陣值
'''
list_fenci
0.第幾個(gè)評(píng)論
1.評(píng)論關(guān)鍵詞
2.評(píng)論關(guān)鍵詞頻率
review_fenci_all_list
0.總評(píng)論關(guān)鍵詞
1.關(guān)鍵詞頻率
'''
flag_pinlun=0
for
z
in
range
(0,5):
#表示第幾個(gè)評(píng)論
for
j
in
range
(0,10):
#表示矩陣的列(第z個(gè)評(píng)論的詞頻)
#jvzhen_list[z].append(0)
#先填充0
for
i
in
range
(0,10):
#循環(huán),與總詞頻率對(duì)比
(review_fenci_all_list[j][0])
(list_fenci[0][i][0]+'\n')
if
list_fenci[z][i][0]
==
review_fenci_all_list[j][0]:
jvzhen_list[z][j]
=
round(list_fenci[z][i][1],2)
(1)
(jvzhen_list)
#把之前爬取的評(píng)價(jià)加入臨接矩陣
'''
力薦=5星
推薦=4星
還行=3星
較差=2星
很差=1星
'''
for
i
in
range(0,5):
(jvzhen_list[i][10])
if
review_level[i]
==
"力薦"
:
jvzhen_list[i][10]
=
5
elif
review_level[i]
==
"推薦"
:
jvzhen_list[i][10]
=
4
elif
review_level[i]
==
"還行"
:
jvzhen_list[i][10]
=
3
elif
review_level[i]
==
"較差"
:
jvzhen_list[i][10]
=
2
elif
review_level[i]==
"很差"
:
jvzhen_list[i][10]
=
1
else:
jvzhen_list[i][10]
=
03.2計(jì)算相似度矩陣 得到文章的關(guān)鍵詞向量矩陣后,通過(guò)余弦計(jì)算公式計(jì)算每個(gè)關(guān)鍵詞向量的相似度圖8余弦公式根據(jù)上面爬出來(lái)的數(shù)據(jù),計(jì)算得出的評(píng)論相似度矩陣如下圖9根據(jù)余弦公式計(jì)算的相似度矩陣部分代碼如下
#創(chuàng)建相似度的矩陣,循環(huán)計(jì)算余弦相似度
cos_jvzhen=[[0]
*
5
for
i
in
range(5)]
for
i
in
range(0,5):
#表示第幾個(gè)評(píng)論和第j個(gè)評(píng)論的相似度
for
j
in
range(0,5):
cos_jvzhen[i][j]
=
round(cosine_similarity(np.array(jvzhen_list[i]),np.array(jvzhen_list[j])),2)3.3用戶矩陣由于我不能獲取豆瓣用戶的詳細(xì)操作數(shù)據(jù),所以用戶矩陣只能我自己進(jìn)行模擬,然后根據(jù)用戶的評(píng)分進(jìn)行推薦度計(jì)算,這里由于豆瓣的影評(píng)只有“有用”和“沒(méi)用”2種,這里設(shè)有用為1,沒(méi)用為-1,沒(méi)看過(guò)該影評(píng)為0,模擬5個(gè)用戶的評(píng)價(jià)創(chuàng)建一個(gè)矩陣。圖10模擬的用戶矩陣3.4計(jì)算推薦度根據(jù)下面這個(gè)公式計(jì)算每個(gè)用戶沒(méi)看過(guò)影評(píng)與其看過(guò)影評(píng)的相似度的權(quán)值計(jì)算出用戶沒(méi)看過(guò)影評(píng)的相似度,然后再進(jìn)行排序,得出推薦影評(píng)論列表沒(méi)看過(guò)影評(píng)的推薦度=(與每個(gè)看過(guò)影評(píng)的相似度部分代碼如下#計(jì)算推薦度
tuijian=[[]
for
i
in
range(5)]
#創(chuàng)建推薦度的列表
for
z
in
range(0,5):
#表示用戶矩陣
for
i
in
range(0,5):
#看第幾個(gè)評(píng)論為0
if
user_jvzhen[z][i]
==
0:
(i)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版酒店紅酒供貨合同
- 2025年度新能源汽車充電樁運(yùn)營(yíng)管理合同重點(diǎn)條款探討3篇
- 2024政府機(jī)關(guān)綠化工程采購(gòu)合同范本二零二四2篇
- 二零二五版合同能源服務(wù)與節(jié)能產(chǎn)品推廣協(xié)議模板3篇
- 2025年度智能場(chǎng)館場(chǎng)地租賃合同范本3篇
- 2024自建房施工合同包工包料合同
- 二零二四年度35kv架空線路施工工程設(shè)計(jì)與施工協(xié)調(diào)合同
- 2025年度金融機(jī)構(gòu)外匯借款合同模板12篇
- 勞動(dòng)合同編號(hào):XX-2025年度-001
- 2025年智能燃?xì)獗硗茝V與應(yīng)用居民供氣合同3篇
- 城市軌道交通的網(wǎng)絡(luò)安全與數(shù)據(jù)保護(hù)
- 英國(guó)足球文化課件
- 《行政職業(yè)能力測(cè)驗(yàn)》2023年公務(wù)員考試新疆維吾爾新疆生產(chǎn)建設(shè)兵團(tuán)可克達(dá)拉市預(yù)測(cè)試題含解析
- 醫(yī)院投訴案例分析及處理要點(diǎn)
- 燙傷的安全知識(shí)講座
- 工程變更、工程量簽證、結(jié)算以及零星項(xiàng)目預(yù)算程序?qū)嵤┘?xì)則(試行)
- 練習(xí)20連加連減
- 五四制青島版數(shù)學(xué)五年級(jí)上冊(cè)期末測(cè)試題及答案(共3套)
- 員工內(nèi)部崗位調(diào)換申請(qǐng)表
- 商法題庫(kù)(含答案)
- 鋼結(jié)構(gòu)用高強(qiáng)度大六角頭螺栓連接副 編制說(shuō)明
評(píng)論
0/150
提交評(píng)論