企業(yè)負(fù)面信息采集和分級(jí)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)《網(wǎng)站規(guī)劃與設(shè)計(jì)》期末論文3
圖3-8??三層DFD圖?負(fù)詞庫(kù)管理系統(tǒng)
3.1.3??數(shù)據(jù)模型
1.??數(shù)據(jù)字典
表3-1??negative_infos表
字段名 | 含義 | 類(lèi)型 | 非空 | 依賴(lài) |
ID | 負(fù)面信息ID | INT?UNSIGEND | 是 | 主鍵 |
TITLE | 負(fù)面信息標(biāo)題 | VARCHER(50) | 是 | |
SOURCE | 負(fù)面信息來(lái)源 | VARCHER(100) | 是 | |
TIME | 負(fù)面信息發(fā)表時(shí)間 | DATE | 是 | |
CONTENT | 負(fù)面信息正文 | TEXT | 是 | |
LEVEL | 負(fù)面信息負(fù)面程度 | INT | 否 | |
COMPANY | 負(fù)面信息涉及公司 | VARCHAR(20) | 否 | |
CREATED_AT | 本記錄創(chuàng)建時(shí)間 | TIMESTAMP | 是 | |
UPDATED_AT | 本記錄更新時(shí)間 | TIMESTAMP | 是 |
表3-2??negative_words表
字段名 | 含義 | 類(lèi)型 | 非空 | 依賴(lài) |
ID | 負(fù)詞ID | INT?UNSIGEND | 是 | 主鍵 |
CONTENT | 負(fù)詞內(nèi)容 | VARCHAR(10) | 是 | |
LEVEL | 負(fù)詞負(fù)面等級(jí) | INT | 否 | |
CREATE_AT | 本記錄創(chuàng)建時(shí)間 | TIMESTAMP | 是 | |
UPADTE_AT | 本記錄更新時(shí)間 | TIMESTAMP | 是 |
表3-3?users表
字段名 | 含義 | 類(lèi)型 | 非空 | 依賴(lài) |
ID | 用戶(hù)ID | INT?UNSIGEND | 是 | 主鍵 |
NAME | 用戶(hù)名稱(chēng) | VARCHAR(10) | 是 | |
用戶(hù)郵箱 | VARCHAR(50) | 是 | 主鍵、外鍵 | |
PASSWORD | 用戶(hù)密碼 | VARCHAR(30) | 是 | |
REMEMBER_TOKEN | 用戶(hù)標(biāo)識(shí) | VARCHAR(100) | 是 | |
CREATED_AT | 本記錄創(chuàng)建時(shí)間 | TIMESTAMP | 是 | |
UPDATE_AT | 本記錄更新時(shí)間 | TIMESTAMP | 是 |
表3-4??password_resets表
字段名 | 含義 | 類(lèi)型 | 非空 | 依賴(lài) |
用戶(hù)郵箱 | VARCHAR(50) | 是 | 主鍵,參照user表 | |
TOKEN | 用戶(hù)標(biāo)識(shí) | VARCHAR(100) | 是 | |
CREATED_AT | 本記錄創(chuàng)建時(shí)間 | TIMESTAMP | 是 |
3.2??非功能性需求
3.2.1??易用性
對(duì)于用戶(hù),在使用系統(tǒng)時(shí),應(yīng)該是無(wú)學(xué)習(xí)成本的。用戶(hù)不需要了解系統(tǒng)的架構(gòu)與實(shí)現(xiàn)。界面應(yīng)盡可能的簡(jiǎn)潔,以減少無(wú)效信息對(duì)用戶(hù)的干擾和誤導(dǎo),讓用戶(hù)可以一眼發(fā)現(xiàn)需要的功能。
3.2.2??通用性
系統(tǒng)的使用應(yīng)該與設(shè)備及平臺(tái)無(wú)關(guān)。在不同平臺(tái),不同設(shè)備,不同瀏覽器上,系統(tǒng)應(yīng)盡可能的展現(xiàn)給用戶(hù)相同的界面,至少要保證使用邏輯是相同的。
3.2.3??可維護(hù)性
系統(tǒng)在建成之后,應(yīng)該是可維護(hù)的。對(duì)于新添加的功能,可以在不影響原有功能的情況下正常運(yùn)行。系統(tǒng)出現(xiàn)重大問(wèn)題時(shí),可以通過(guò)回滾或DeBug的手段重新上線。
3.2.4??性能
系統(tǒng)應(yīng)該在用戶(hù)可接受的時(shí)間內(nèi)完成用戶(hù)請(qǐng)求的業(yè)務(wù)。系統(tǒng)應(yīng)該能長(zhǎng)時(shí)間的持續(xù)運(yùn)行。系統(tǒng)應(yīng)該具有足夠的容量來(lái)保存處理業(yè)務(wù)的過(guò)程中產(chǎn)生的數(shù)據(jù)。
3.2.5??時(shí)效
由于業(yè)務(wù)的特殊性,系統(tǒng)中的數(shù)據(jù)應(yīng)是新鮮的。對(duì)于老舊數(shù)據(jù)應(yīng)該清理或保存到靜態(tài)存儲(chǔ)作為資料備份。在線數(shù)據(jù)的產(chǎn)生時(shí)間應(yīng)該是較近的。
4??詳細(xì)設(shè)計(jì)
4.1??系統(tǒng)業(yè)務(wù)流程
本系統(tǒng)由用戶(hù)通過(guò)瀏覽器訪問(wèn)服務(wù)器地址開(kāi)始業(yè)務(wù)流程。對(duì)于游客,需要首先注冊(cè)成為系統(tǒng)的用戶(hù)。用戶(hù)需要進(jìn)行登錄,以完成身份驗(yàn)證。然后根據(jù)角色的不同,分別進(jìn)入普通用戶(hù)的業(yè)務(wù)流程和管理員的業(yè)務(wù)流程。對(duì)于普通用戶(hù),登錄后,用戶(hù)進(jìn)入展示了負(fù)面信息列表的主頁(yè)面,通過(guò)搜索框,可以篩選出經(jīng)過(guò)聚集的負(fù)面信息列表,然后通過(guò)點(diǎn)擊負(fù)面信息標(biāo)題,用戶(hù)可以查看負(fù)面信息的詳細(xì)內(nèi)容,關(guān)閉頁(yè)面后流程結(jié)束。對(duì)于管理員,除了普通用戶(hù)的全部流程,管理員可以啟用后臺(tái)管理流程。管理員進(jìn)入后臺(tái)管理頁(yè)面后,可以選擇負(fù)面信息管理、負(fù)詞庫(kù)管理及爬蟲(chóng)這三個(gè)不同的功能,每個(gè)功能具有不同的子流程。關(guān)閉頁(yè)面后,流程結(jié)束。為了直觀的描述系統(tǒng)業(yè)務(wù)流程,繪制如圖4-1所示的流程圖。
圖4-1?系統(tǒng)業(yè)務(wù)流程圖
在負(fù)面信息管理子流程中,流程開(kāi)始于管理員進(jìn)入負(fù)面信息管理模塊。在負(fù)面信息管理模塊中,首先需要進(jìn)行功能選擇。對(duì)于修改和新增負(fù)面信息,本質(zhì)是以數(shù)據(jù)庫(kù)中的表字段為最小單位進(jìn)行增量更新,故接下來(lái)進(jìn)入相同流程。首先展示信息表單,之后填寫(xiě)信息增量并保存,流程結(jié)束。而刪除負(fù)面信息是以數(shù)據(jù)庫(kù)表中的元組為單位進(jìn)行操作,故進(jìn)入不同流程。由于刪除操作具有原子性,故刪除過(guò)程結(jié)束后,直接結(jié)束。流程圖如圖4-2。
圖4-2?負(fù)面信息管理子流程
在負(fù)詞庫(kù)管理子流程中,流程開(kāi)始于管理員進(jìn)入負(fù)詞庫(kù)管理模塊。在負(fù)詞庫(kù)管理模塊中,首先需要進(jìn)行功能選擇。對(duì)于修改和新增負(fù)詞,本質(zhì)是以數(shù)據(jù)庫(kù)中的表字段為最小單位進(jìn)行增量更新,故接下來(lái)進(jìn)入相同流程。先展示負(fù)詞的表單,之后填寫(xiě)負(fù)詞增量并做保存,流程結(jié)束。而刪除負(fù)詞是以數(shù)據(jù)庫(kù)表中的元組為單位進(jìn)行操作,故進(jìn)入不同流程。由于刪除操作具有原子性,故刪除果程結(jié)束后,直接結(jié)束。流程圖如圖4-3所示。
圖4-3?負(fù)詞庫(kù)管理子流程
在爬蟲(chóng)管理子流程中,流程開(kāi)始于管理員進(jìn)入爬蟲(chóng)管理模塊。之后管理員輸入企業(yè)名稱(chēng),把名稱(chēng)發(fā)送到后端。然后后端執(zhí)行爬蟲(chóng),對(duì)負(fù)面信息搜索并分級(jí)。之后進(jìn)行保存。保存的過(guò)程中存在一個(gè)校驗(yàn)的子過(guò)程,在系統(tǒng)實(shí)現(xiàn)部分進(jìn)行描述。至此流程結(jié)束。如圖4-4所示。
圖4-4?爬蟲(chóng)子流程
4.2??系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
4.3.1??系統(tǒng)結(jié)構(gòu)圖
圖4-5?系統(tǒng)結(jié)構(gòu)圖
4.3.2??數(shù)據(jù)訪問(wèn)
本系統(tǒng)使用的數(shù)據(jù)存儲(chǔ)工具是MySQL數(shù)據(jù)庫(kù),但是所實(shí)現(xiàn)的數(shù)據(jù)訪問(wèn)方式是數(shù)據(jù)庫(kù)無(wú)關(guān)的。Laravel提供了Eloquent,它實(shí)現(xiàn)了一種?ORM(對(duì)象關(guān)系映射)的方法,其效果等同于創(chuàng)建了一個(gè)虛擬對(duì)象數(shù)據(jù)庫(kù)。ORM主要傳達(dá)三個(gè)思想:?首先是簡(jiǎn)單。在建模的時(shí)候保存最基本的信息即實(shí)體,對(duì)于約束、關(guān)聯(lián)等,則在ORM系統(tǒng)中考慮。其次是表現(xiàn)力。對(duì)于文檔化的數(shù)據(jù)庫(kù)結(jié)構(gòu),應(yīng)該足夠清晰易懂。最后是精確性?;诤?jiǎn)單數(shù)據(jù)模型構(gòu)建的ORM應(yīng)該完整的傳達(dá)數(shù)據(jù)庫(kù)模型所想表達(dá)的信息和約束。通過(guò)Eloquent,我們可以創(chuàng)建一個(gè)模型與數(shù)據(jù)表關(guān)聯(lián)。通過(guò)模型我們可以直接使用面向?qū)ο蟮姆绞?,?shí)現(xiàn)對(duì)數(shù)據(jù)表的增刪改查及關(guān)系映射等。
4.3.3??身份認(rèn)證
身份認(rèn)證子系統(tǒng)主要由三個(gè)模塊構(gòu)成,包括登錄、注冊(cè)及忘記密碼。對(duì)于沒(méi)有登錄的情況,我們會(huì)給出一個(gè)登錄頁(yè)面,在登錄之前,系統(tǒng)不允許使用者使用除登錄注冊(cè)和忘記密碼外的其他功能。
- 未登錄或者登錄過(guò)期的使用者,在訪問(wèn)服務(wù)器后,首先被給出一個(gè)登錄界面,使用者在此輸入賬號(hào)密碼。點(diǎn)擊Login后,信息將通過(guò)表單提交給服務(wù)器,之后服務(wù)器進(jìn)行驗(yàn)證。
- 如果忘記密碼,用戶(hù)可以點(diǎn)擊Forgot?Your?Password鏈接進(jìn)行密碼重置。進(jìn)入密碼重置的頁(yè)面后,用戶(hù)輸入注冊(cè)時(shí)的郵箱。郵箱地址通過(guò)表單提交給服務(wù)器。如果郵箱存在,在通過(guò)郵件驗(yàn)證后,系統(tǒng)為用戶(hù)重置密碼并要求設(shè)置新密碼。設(shè)置完成并提交后,密碼更新。
- 點(diǎn)擊右上角的Register按鈕可以進(jìn)入注冊(cè)頁(yè)面。在此,系統(tǒng)要求使用者填寫(xiě)注冊(cè)信息。使用者填寫(xiě)并提交后,系統(tǒng)會(huì)驗(yàn)證信息是否合法。對(duì)于合法的注冊(cè)信息,允許注冊(cè),注冊(cè)成功后會(huì)自動(dòng)登錄并進(jìn)入信息展示頁(yè)。
4.3.4??負(fù)面信息展示
- 1.?已登錄用戶(hù)自動(dòng)跳轉(zhuǎn)到一個(gè)負(fù)面信息列表,系統(tǒng)在此展示一些負(fù)面信息的概要信息。包括負(fù)面信息的標(biāo)題,時(shí)間,來(lái)源,相關(guān)企業(yè),負(fù)面等級(jí)。
- 用戶(hù)可以點(diǎn)擊負(fù)面信息標(biāo)題來(lái)進(jìn)入負(fù)面信息詳情頁(yè)面查看具體內(nèi)容。在用戶(hù)點(diǎn)擊標(biāo)題后,前端向服務(wù)器提交一個(gè)GET請(qǐng)求,請(qǐng)求中附帶所點(diǎn)擊的負(fù)面信息的ID。服務(wù)器通過(guò)ID,在數(shù)據(jù)庫(kù)中查找對(duì)應(yīng)的負(fù)面信息并返回到瀏覽器。
- 用戶(hù)可以在篩選框內(nèi)輸入企業(yè)名稱(chēng),點(diǎn)擊篩選負(fù)面信息后,頁(yè)面向服務(wù)器提交一個(gè)POST請(qǐng)求,請(qǐng)求中包含用戶(hù)提交的企業(yè)名稱(chēng)。服務(wù)器接收這個(gè)請(qǐng)求后,通過(guò)該字段對(duì)負(fù)面信息表進(jìn)行聚集,之后返回給前端,瀏覽器就會(huì)展示篩選后的負(fù)面信息列表。
4.3.5??負(fù)面信息管理
- 用戶(hù)點(diǎn)擊后臺(tái)管理按鈕可以進(jìn)入后臺(tái)管理模塊。在后臺(tái)管理模塊中,有具體的三個(gè)模塊的入口。
- 點(diǎn)擊負(fù)面信息管理,可以進(jìn)入負(fù)面信息管理模塊。在此處展示了負(fù)面信息的標(biāo)題以及管理模塊的子功能入口。
- 點(diǎn)擊新增,系統(tǒng)展示一個(gè)表單,要求用戶(hù)填寫(xiě)需要所新增負(fù)面信息的詳情。其中包括標(biāo)題、來(lái)源、發(fā)布時(shí)間、企業(yè)名稱(chēng)、詳細(xì)內(nèi)容。用戶(hù)填寫(xiě)后,點(diǎn)擊新增負(fù)面信息。此時(shí)頁(yè)面會(huì)向服務(wù)器發(fā)出一個(gè)POST請(qǐng)求來(lái)提交剛剛填寫(xiě)的表單。服務(wù)器接收表單后,通過(guò)數(shù)據(jù)訪問(wèn)層,把收到的信息保存到數(shù)據(jù)庫(kù)。頁(yè)面返回到負(fù)面信息管理。
- 點(diǎn)擊修改,頁(yè)面向服務(wù)器發(fā)送一個(gè)GET請(qǐng)求,請(qǐng)求中包含對(duì)應(yīng)負(fù)面信息的ID,之后服務(wù)器獲取ID所對(duì)應(yīng)的信息后,返回一個(gè)填入那些信息的表單。用戶(hù)可以對(duì)信息進(jìn)行更改。點(diǎn)擊提交修改后,頁(yè)面發(fā)出一個(gè)POST請(qǐng)求。服務(wù)器收到請(qǐng)求后,把修改寫(xiě)入數(shù)據(jù)庫(kù)。頁(yè)面返回到負(fù)面信息管理。
- 點(diǎn)擊刪除,頁(yè)面向服務(wù)器發(fā)送一個(gè)偽造的請(qǐng)求。請(qǐng)求中包含負(fù)面信息ID,偽造的請(qǐng)求類(lèi)型為DELETE。服務(wù)器收到請(qǐng)求后,執(zhí)行刪除操作,對(duì)該ID對(duì)應(yīng)的記錄進(jìn)行刪除。頁(yè)面返回到負(fù)面信息管理。
4.3.6??負(fù)詞庫(kù)管理
- 點(diǎn)擊負(fù)詞庫(kù)管理,可以進(jìn)入負(fù)詞庫(kù)管理模塊。在此處展示了負(fù)詞內(nèi)容以及管理模塊的子功能入口。
- 點(diǎn)擊新增,系統(tǒng)展示一個(gè)表單,要求用戶(hù)填寫(xiě)需要所新增負(fù)面信息的詳情。其中包括負(fù)詞和分級(jí)。用戶(hù)填寫(xiě)后,點(diǎn)擊提交負(fù)詞。此時(shí)頁(yè)面會(huì)向服務(wù)器發(fā)出一個(gè)POST請(qǐng)求來(lái)提交剛剛填寫(xiě)的表單。服務(wù)器接收表單后,通過(guò)數(shù)據(jù)訪問(wèn)層,把收到的信息保存到數(shù)據(jù)庫(kù)。頁(yè)面返回到負(fù)詞庫(kù)管理。
- 點(diǎn)擊編輯,頁(yè)面向服務(wù)器發(fā)送一個(gè)GET請(qǐng)求,請(qǐng)求中包含對(duì)應(yīng)負(fù)詞的ID,之后服務(wù)器獲取ID所對(duì)應(yīng)的信息后,返回一個(gè)填入那些信息的表單。用戶(hù)可以對(duì)信息進(jìn)行更改。點(diǎn)擊提交修改后,頁(yè)面發(fā)出一個(gè)POST請(qǐng)求。服務(wù)器收到請(qǐng)求后,把修改寫(xiě)入數(shù)據(jù)庫(kù)。頁(yè)面返回到負(fù)詞庫(kù)管理。
- 點(diǎn)擊刪除,頁(yè)面向服務(wù)器發(fā)送一個(gè)偽造的請(qǐng)求。請(qǐng)求中包含負(fù)詞ID,偽造的請(qǐng)求類(lèi)型為DELETE。服務(wù)器收到請(qǐng)求后,執(zhí)行刪除操作,對(duì)該ID對(duì)應(yīng)的記錄進(jìn)行刪除。頁(yè)面返回到負(fù)詞庫(kù)管理。
4.3.7??爬蟲(chóng)管理
- 點(diǎn)擊爬蟲(chóng)管理進(jìn)入爬蟲(chóng)模塊。頁(yè)面展示一個(gè)表單,在表單中填寫(xiě)企業(yè)名稱(chēng)后點(diǎn)擊查詢(xún)負(fù)面信息,表單會(huì)以POST請(qǐng)求提交給服務(wù)器。收到請(qǐng)求的服務(wù)器執(zhí)行爬蟲(chóng)模塊從互聯(lián)網(wǎng)獲取企業(yè)負(fù)面信息。
- 爬蟲(chóng)首先通過(guò)URL參數(shù),把公司名稱(chēng)作為關(guān)鍵字,向百度提交一個(gè)GET請(qǐng)求。通過(guò)get_html收到請(qǐng)求返回的結(jié)果后,爬蟲(chóng)模塊通過(guò)get_url方法,從搜索結(jié)果中提取出指向負(fù)面信息來(lái)源的URL,之后對(duì)于提取到的每一個(gè)URL,再次通過(guò)get_html方法獲取到網(wǎng)頁(yè)文本并保存到本地。獲取到的網(wǎng)頁(yè)文本包含了廣告,頁(yè)頭,側(cè)邊欄等許多無(wú)效信息。通過(guò)dom_resorce對(duì)文本進(jìn)行解析,提取出標(biāo)題、時(shí)間、來(lái)源、正文等信息,對(duì)于無(wú)法提取出完整信息的文本,我們認(rèn)為其信息不完整,做丟棄處理。
- 得到負(fù)面信息后,我們對(duì)其進(jìn)行去重,對(duì)于標(biāo)題或內(nèi)容完全相同的信息,即使來(lái)自不同的來(lái)源,我們也認(rèn)為其相同。丟棄判斷為重復(fù)的信息。
- 對(duì)于不重復(fù)的信息,我們獲取其正文,并通過(guò)get_level方法處理,得到文本的負(fù)面等級(jí)。get_level方法通過(guò)分詞算法對(duì)文本進(jìn)行分詞,然后把分詞后的文本向量化。通過(guò)文本分類(lèi)算法,對(duì)向量化的文本進(jìn)行分類(lèi),之后基于詞庫(kù)對(duì)分類(lèi)的文本計(jì)算出負(fù)面等級(jí)。這部分通過(guò)百度提供的情感分析API實(shí)現(xiàn)。對(duì)API提交文本,會(huì)得到一個(gè)包括負(fù)面可能,正面可能,置信度,情感傾向等信息的數(shù)組。通過(guò)
Level?=?2?*?(負(fù)面概率?-?0.5)?*?置信度?*?10
變換得到負(fù)面等級(jí)。此時(shí)得到完整的負(fù)面信息,將其保存到數(shù)據(jù)庫(kù)。算法執(zhí)行結(jié)束后,會(huì)返回一個(gè)執(zhí)行結(jié)果頁(yè)面。
0 Comments.