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