目錄
作業基本信息
| 這個作業屬於哪個課程 | 2021春軟件工程實踐|S班 (福州大學) |
|---|---|
| 這個作業要求在哪里 | 結對第二次作業 |
| 結對學號 | 221801333,221801235 |
| 這個作業的目標 | 頂會熱詞統計的實現 |
| 其他參考文獻 | CSDN , GitHub |
PSP表格和效能分析
| PSP2.1 | Personal Software Process Stages | 預估耗時(分鍾) | 實際耗時(分鍾) |
|---|---|---|---|
| Planning | 計划 | 20 | 20 |
| 20 | 20 | ||
| Development | 開發 | 3105 | 3125 |
| 30 | 45 | ||
| 20 | 20 | ||
| 25 | 20 | ||
| 10 | 10 | ||
| 60 | 50 | ||
| 2880 | 2950 | ||
| 20 | 10 | ||
| 60 | 20 | ||
| Reporting | 報告 | 90 | 100 |
| 30 | 30 | ||
| 30 | 30 | ||
| 30 | 40 | ||
| 合計 | 3215 | 3245 |
git倉庫鏈接和代碼規范鏈接
項目部署訪問鏈接
功能未完成
成品展示
功能1:對已爬取的論文列表進行操作
- 可對論文列表進行刪除:論文列表分頁,可直接對論文進行刪除
- 可對論文列表進行查詢詳細信息:對論文列表模糊查詢,根據查詢內容對論文關鍵詞、摘要、發布時間等全部信息進行查詢,可根據發表日期對論文列表進行排序
功能2:分析已爬取到的論文信息,提取top10個熱門領域或熱門研究方向
- 形成如關鍵詞圖譜之類直觀的查看方式,點擊某個關鍵詞可展現相關的論文:關鍵詞圖譜以環形圖展示,簡潔明了,便於了解數據
- 可對多年間、不同頂會的熱詞呈現熱度走勢對比,以動圖的形式呈現(這里將范疇限定在計算機視覺的三大頂會CVPR、ICCV、ECCV內)
結對討論過程描述
由於線上有時候不能及時溝通,因此我們大部分時間都為線下討論,截圖較少,因此文字總結我們的線下討論:
- 討論前后端實現方式:由於我們學習方向都偏前端,235同學擅長前端vue的使用負責前端,333同學運用之前學習的PHP知識負責后端。
- 數據表的討論:討論了用戶表的字段
- 數據交互:討論如何實現vue和PHP的數據傳輸,共同討論實踐解決跨域問題,數據庫報錯問題,溝通前后端數據的傳輸方式和所用數據
- 圖表討論:對圖表的使用進行討論,確定餅狀圖表示十大熱門領域所占比例,柱狀圖表明熱度走勢
- 部署討論:由於都不擅長部署,討論決定GIF作為備用方法

設計實現過程
在確定vue和PHP來實現之后,333同學負責后端,235同學負責前端,以下是我們前端和后端的實現過程
| 功能 | 前端 | 后端 |
|---|---|---|
| 顯示論文列表 | 1.將傳入后端的搜索內容置為空,后端將傳輸所有論文 2.獲取后端傳輸數據 3.實現分頁處理 4.通過設置控件事顯示的論文列表可根據發表日期進行排序 5.設置論文列表顯示簡要信息,點擊后查看該論文摘要 |
1.通過php遍歷存放論文json文件的文件夾,解析json文件數據 2.對jsonString進行處理,使關鍵字去掉雙引號和大括號,以分號分隔 3.對發布日期進行處理,因為原本的Date數據被轉化為jsonString后月份為英文,無法在轉成Date,因此通過月份數字轉化存入字符串中 4.將處理好數據存入數據表 5.鏈接數據庫,獲得前端傳輸的搜索內容,運用MySQL語句對論文表所有數據模糊搜索 6.獲得符合條件的數據,將其傳到前端 |
| 搜索功能 | 1.將控件獲得的搜索內容傳入后端 2.從后端接受返回的論文信息,分頁顯示 |
1.鏈接數據庫,獲得前端傳輸的搜索內容,運用MySQL語句對論文表所有數據模糊搜索 2.獲得符合條件的數據,將其傳到前端 |
| 刪除功能 | 通過控件獲得當前被刪除的論文信息,將該論文信息傳入后端 | 鏈接數據庫,獲得前端傳輸的論文,運用MySQL語句對論文表該論文信息進行刪除 |
| 關鍵詞圖譜 | 1.學習后使用vchart進行圖表的使用 2.獲取后端傳來的分析結果 3.將數據放入餅狀圖中 4.對餅狀圖進行跳轉,點擊關鍵詞后跳轉到默認該關鍵詞為搜索內容的搜索界面 |
1.鏈接數據庫,獲得論文表內容 2.遍歷論文表,保存當前論文的標題、發布時間信息 3.對論文表內容中的關鍵詞使用分號分隔,將關鍵詞分隔后獲得的array遍歷,將之前保存的論文信息和array中的關鍵詞插入關鍵詞表 4.設置關鍵詞表字段num初值為1,對關鍵詞表的關鍵詞字段重復出現次數進行count(*)統計,次數設置為total,以關鍵詞group,以total排序,limit 10. 5.將十個最多的關鍵詞及其總數傳給前端 |
| 熱度走勢 | 1.使用柱狀圖 2.將后端傳輸的十組數據進行設置,使其柱狀圖變化 |
1.對已知的十大關鍵詞進行不同發布時間年份統計 2.將數據傳輸給前端 |
| 論文表 | abstract | MeetingAndYear | keyword | releaseTime | name | link |
|---|---|---|---|---|---|---|
| 關鍵詞表 | keyword | name | num | releaseTime |
代碼說明
生成論文表
通過php遍歷存放論文json文件的文件夾,解析json文件數據
$dir = "ECCV/";
if (is_dir($dir)){
if ($dh = opendir($dir)){
while (($file = readdir($dh)) !== false){
if($file!='.'&& $file!='..'){
$path="ECCV/".$file;
$json_string = file_get_contents($path);
$data = json_decode($json_string, true);// 用參數true把JSON字符串強制轉成PHP數組
$datas = array();//保存處理好的信息
$i=0;
foreach($data as $list=>$things)
對jsonString進行處理,對被轉化為array的關鍵字進行處理去掉雙引號和大括號,以分號分隔
if(is_array($things)){
$str='';
foreach ($things as $key => $value)
{
$str .=$value.';';
}
$datas[$i]=$str;
}
對發布日期進行處理,因為原本的Date數據被轉化為jsonString后月份為英文,無法在轉成Date,因此通過月份數字轉化存入字符串中
$find = array("January","February","March","April","May","June","July","August","September","October","November","December" );
$rep = array("01","02","03","04","05","06","07","08","09","10","11","12");
$number=str_ireplace($find, $rep, $things);
$day=substr($number,0,2);//取得年份
$month=substr($number,3,2);//取得月份
$year=substr($number,6,4);//取得幾號
$number = $year.'-'.$month.'-'.$day;
$datas[$i]=$number;
生成關鍵字表
遍歷論文表,保存當前論文的標題、發布時間信息
$name=$row["name"];
$releaseTime=$row["releaseTime"];</pre>
對論文表內容中的關鍵詞使用分號分隔,將關鍵詞分隔后獲得的array遍歷,將之前保存的論文信息和array中的關鍵詞插入關鍵詞表
<pre>$matches = explode(';', $row["keyword"]);
$matches= array_filter($matches);
foreach($matches as $list=>$things){
$mysqli->query("insert into keyword values('".$things."','".$name."','1','".$releaseTime."')");
}
熱門關鍵詞
設置關鍵詞表字段num初值為1,對關鍵詞表的關鍵詞字段重復出現次數進行count(*)統計,次數設置為total,以關鍵詞group,以total排序,limit 10.
$mysqli->query("select keyword,sum(num) as total from keyword group by keyword order by total DESC limit 10");
對已知的十大關鍵詞進行不同發布時間年份統計
$mysqli->query("select * from keyword where releaseTime like '%".$year[0]."%' and keyword = '".$things."'");
心路歷程和收獲
- UI設計經驗不足,echart導入失敗,圖表實現遇到困難
- 使用vchart代替
- 不知道如何實現json文件批量導入,並形成表
- 嘗試了導入工具,但由於軟件限制,一次性只能導入20個json文件,只能選擇放棄這個方法
- 使用代碼實現,在不斷百度,不斷嘗試不同方法后依然無法實現。選擇求助已完成該功能的小組,詢問實現流程后編寫代碼,不斷調試,不斷發現新的問題,終於在一次次的失敗中成功創建
- 在前后端交互時出現跨域問題,兩個人都束手無策
- 235同學在之前的團隊作業中遇到類似問題,在不斷修改語句,總結經驗后終於找到了解決方法,並第一時間記錄筆記,為之后的代碼實踐積累經驗
- 前后端交互問題,兩個人對前后端交互的不太了解
- 在溝通雙方數據設置,共同檢查語句是否出錯,探討報錯原因,一點一點解決困擾我們的交互問題
- 部署問題
- 我們選擇在最后完成這一步功能,如果未能實現部署,將使用演示的方式,面對來不及完成的功能,只能優先確保其他功能的實現
評價結對隊友
- 221801235同學對221801333同學的評價
- 她的學習能力很強,遇到問題總能很快解決,認真嚴謹,經常會有很不錯的想法,遇到技術問題也非常耐心,是一個很好的隊友和伙伴。
- 221801333同學對221801235同學的評價
- 她是一個很好的伙伴,她對vue的熟練賬務極大地促進了結對作業的完成進度,對遇到的問題會搜索解決方法后,耐心地不斷嘗試,同時總結經驗,在不斷嘗試中找到解決方法,和她合作可以使我進步。
