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