结对作业第二次
目录
作业基本信息
这个作业属于哪个课程 | 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的熟练账务极大地促进了结对作业的完成进度,对遇到的问题会搜索解决方法后,耐心地不断尝试,同时总结经验,在不断尝试中找到解决方法,和她合作可以使我进步。