Skip to content

Commit

Permalink
大一小学期 & 软件工程 & 虚拟现实技术 (#129)
Browse files Browse the repository at this point in the history
* 大二小学期 & 大三上

* 软件工程
  • Loading branch information
prnake committed Jan 16, 2022
1 parent 49d3d63 commit e61fd1f
Show file tree
Hide file tree
Showing 69 changed files with 4,294 additions and 1 deletion.
96 changes: 96 additions & 0 deletions 大一小学期/Java程序设计与训练/hw/2021大二/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# 2021年夏季学期Java程序设计与训练大作业——知识图谱智能教育安卓端应用设计与实现

> Credit to Bowen Zhao
## 1 作业题目

实现一个安卓端的基于知识图谱的智能教育App。最低支持安卓系统版本为8.0(minSdkVersion为API26)

参考:https://developer.android.com/guide/topics/manifest/uses-sdk-element.html

## 2 作业描述

### 2.1 项目背景介绍

基础教育知识图谱(EDUKG)是一个大规模的基础教育领域的知识图谱,它提供了基础教育领域中的多维知识描述,还包含与其他基础教育文本资源的实体连接。 另外,EDUKG是基于基础教育领域权威的教材教辅资料和海量的互联网文本资源,通过知识图谱构建技术构建得到, 所包含的内容非常丰富。可以通过知识图谱的搜索功能进行实体搜索,搜索结果既展示了该实体与其他实体的关系,也展示了该实体的所有属性及知识来源。

EDUKG成功把基础教育领域的知识表示成为一个知识图谱,构造出一个包含700多个类、180多万个实例、2000多种属性、2200万条三元组的基础教育知识图谱,并应用到智慧教育中,包括知识问答、知识搜索、知识梳理、知识链接、知识关联等多种应用,并封装成数据接口为相关领域研究者提供服务。

EDUKG为计算机提供了实现该领域中认知智能的可能性,使计算机成为拥有基础教育知识的虚拟教师或者学习伙伴。如何有效使用EDUKG当中蕴含的数据资源,将其中包含的知识加以利用,开发出下游具有实际应用价值的终端产品,是“互联网+”教育这一领域当中的重要问题。

### 2.2 接口描述

本次大作业需要开发的系统结构包括服务端和客户端两部分,服务端负责调用Open EDUKG平台提供的接口,查询基础教育知识图谱当中的相关信息(实体检索、实体链接、实体关联、题目关联等);客户端从服务器拉取基础教育相关数据并实现相关功能,包括基础教育实体检索、展示以及相关进阶功能。

接口url及接口说明见http://open.edukg.cn/help。

## 3 评分细则

本次大作业总分100分,分为开题分数和结题分数两部分,其中开题分数占10分,结题分数占90分。

### 3.1 开题分数

开题时需要提交一篇大作业设计文档,以小组为单位提交,每小组提交一份即可。在其中必须阐明的内容有:

- 附加功能的选择
- 人员分工
- 整体应用的框架(前、后端;是否需要自己实现算法端)
- 工作计划
- 简单的UI设计(可选)

### 3.2 结题分数

结题分数的90分为基础功能和加分功能两部分。基础功能总分值为75分,又分为子功能(80%)和子性能(20%),其中子功能每项内容只要完成实现即可得分,子性能每项内容需要达到对应条件才可得分,要求实现所有的基础功能;附加功能的总分数为15分,依照功能综合性能酌情给分。评分细则如表1。

#### 基础功能

| 功能 | 功能描述 | 功能分数百分比(%) | 性能指标 | 性能分数百分比(%) |
| ------------ | ------------------------------------------------------------ | ------------------- | -------------------------------- | ------------------- |
| 页面布局 | 布局合理,点击处理正确 | 4 | 美观,布局合理 ,有多种布局形式 | 1 |
| 学科分类列表 | 删除和添加操作 | 4 | 修改时有动态特效(参照今日头条) | 1 |
| 实体列表 | 正确显示实体列表的信息,布局和展示,点击进入实体详情页面正确。 | 8 | 布局合理美观 | 2 |
| 本地缓存 | 实现实体详情页的本地存储,看过的实体列表及详情页在离线的情况下也可以浏览。实体详情页访问过的页面进行灰色标记。 | 8 | 本地可存储页面数量大响应快 | 2 |
| 实体检索 | 实体搜索及历史记录,并且搜索结果有多种排序和筛选机制(可使用开放平台接口)。 | 4 | 搜索页面合理美观 | 1 |
| 实体链接 | 实现针对基础教育文本的知识点发现功能,识别出一段输入文本中含有的基础教育知识点(可使用开放平台接口)。 | 4 | 知识点发现页面合理美观 | 1 |
| 知识问答 | 实现针对基础教育简单问题的问答机器人页面(可使用开放平台接口)。 | 8 | 问答对话页面合理美观 | 2 |
| 实体详情页 | 合理展示实体的描述、属性、关系及关联试题(上述几条须都展示)等,可参考https://covid-19.aminer.cn/kg/对实体的查询和展示。 | 8 | 布局合理美观 | 2 |
| 分享收藏 | 使用微博、微信(有一个即可)等SDK分享实体详情页和题目,实体详情页面或试题页面点击分享可以分享到常用的app,分享内容带有摘要。 | 4 | 分享页面合理美观 | 1 |
| 用户系统 | 实现登陆功能,可将收藏信息同步到服务器,保存用户浏览历史记录(服务器后端部分需自行设计) | 8 | 登录系统安全合理 | 2 |

#### 附加功能(方向意见)

| 功能 | 功能描述 | 功能分数 | 性能指标 | 性能分数 |
| -------- | ------------------------------------------------------------ | -------- | -------------------------------- | -------- |
| 专项测试 | 针对用户给出的希望学习的知识点给出一套题目,让用户做题并完成打分。<br /> | 2 | 页面展示美观,题目链接知识点准确 | 2 |
| 知识梳理 | 针对用户希望学习的知识点,自动构建出一套复习提纲并展示 | 3 | 页面展示美观,提纲内容准确合理 | 2 |
| 试题推荐 | 针对用户以往的做题历史记录以及访问记录,对用户进行试题的推荐 | 4 | 页面展示美观,推荐内容合理 | 2 |

**注:为了鼓励大家发挥自己的创造性,如果实现了上述未提及的附加功能,会得到相同工作量子功能分数的200%,单项功能的子功能分数最高不超过8分,最少不低于2分;单项附加功能任务的子性能分数均为2分。另外由于本课程的重点在于Java语言的程序设计与训练,而不是机器学习算法,因此上述功能的实现只要合理即可,对于实际算法的准确性并没有明确、硬性的baseline。**

## 4 提交方法

所有文档和代码必须通过网络学堂提交,每组仅需组长提交即可,其余组员无需提交。大作业报告要求按照报告模板进行撰写,在报告内必须真实地注明大作业实现功能及组内分工。在线下评测过程中,要求组内所有组员到场,如遇特殊情况无法到场可以申请使用线上会议形式参与评测,评测时助教将会进行一些简单的提问以保证分工的真实性。

文件打包格式需如下(格式有误,报告分数记为0分):

```
根目录(命名为:姓名_学号_大作业.zip)
|-- 大作业报告.pdf
|-- apk文件(项目名称自拟)
|-- 源代码目录(项目名称自拟)
```

## 5 应用竞赛

在Java程序设计训练课程开展同期将会开展**知识图谱智能教育应用大赛**,竞赛网址为https://www.biendata.xyz/competition/edukg/,竞赛的相关规则和时间轴已经在网站上公布。该竞赛的题目与课程大作业保持一致,我们鼓励各小组组队报名参加该项比赛,该项比赛的阶段一评测和大作业的开题将会合并开展。共计有15支队伍将会进入到该项赛事的决赛当中,所有进入决赛的队伍将会免去最终应用评测且获得本课程A以上的成绩(该竞赛的前6名可以还获得对应奖级的奖金)。**报名参赛但未进入决赛的队伍仍要进行大作业的评测以获得课程成绩。**

## 6 大作业说明

- 本次大作业要求三人一组完成
- 基础功能要求原则上全部实现,完成后才能对附加功能部分进行评审。不允许在有基础功能为实现的情况下实现附加功能,如遇此情况,则附加功能均不得分。
- 大作业最后将apk文件下载到安卓手机上进行评测。助教会下载上传到网络学堂的apk文件到评测机上进行评测。为保证每个同学的包名是唯一的,需要将包名确定为com.java.姓名 这种格式,姓名为组长英文拼音。
- 按照大作业报告模板撰写报告,每小组由组长提交一份即可
- 按时提交。由于大作业提交时间较晚,延期提交会导致无法及时上报课程分数,因此大作业不接受任何形式,因任何原因而导致的迟交,请务必注意。
- 申请使用微博、微信SDK的流程较为繁琐,如果未能在提交大作业前申请通过,实现前段相关接口并在报告中上传申请截图也可以得到全部分数。
- 如对于上述内容有任何疑问,可发送邮件至zhaobw1998@sina.com与助教联系,或联系助教微信zhaobowen98。

Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
# thu-java-android-app

## 项目描述

一个安卓端的基于知识图谱的智能教育App,项目内容和使用JAVA为作业要求,不代表开发者立场。

## 设计规划

> 初赛阶段,队伍需要进行开题文档提交,内容包括应用功能设计、界面及交互设计、工作计划及初步开发文档等内容,评委将根据队伍提交的文档进行打分,初赛的分数占比为:
>
> - 应用的实用价值及创新性——40%
> - 设计美观度及交互友好度——40%
> - 工作计划、文档清晰度——20%
> 开题时需要提交一篇大作业设计文档,以小组为单位提交,每小组提交一份即可。在其中必须阐明的内容有:
>
> - 附加功能的选择
> - 人员分工
> - 整体应用的框架(前、后端;是否需要自己实现算法端)
> - 工作计划
> - 简单的UI设计(可选)
### 应用理念、价值及创新性

(以下为废话)

应用基于大数据知识图谱,着力于K12市场,目标人群的教育需求和安卓的庞大市场给予了这个应用广阔的生存空间,并且教育APP本身有着留存度高,用户活跃时长长的特点。

本应用想通过已有的知识图谱数据,设计人性化的UI框架和学习模型,赋能当前教育资源分布不均匀的K12教育市场。知识图谱作为百科全书类数据,具有较高利用价值但难以分发,本应用创新性地将数据与智能应用相结合,通过搜索、测试、AI聊天、知识可视化等多种输入与反馈能力与K12用户建立友善、持续的联系,将知识图谱与教育紧密融合,从而解决当前K12教育市场一定的问题。

### 整体功能设计

#### 基础功能

- 学科分类列表和实体列表
- 接入开放平台接口
- 实体检索:实体搜索及历史记录(搜索)
- 实体链接:针对基础教育文本的知识点发现功能(文本标注)
- 知识问答:针对基础教育简单问题的问答机器人(聊天)
- 实体详情:合理展示实体的描述、属性、关系及关联试题(知识图谱)
- 用户系统:收藏、登录、浏览记录
- 本地缓存功能
- 分享系统:分享到微信、微博等常用社交媒体

#### 附加功能

- 试题功能(选择题卡片+错题集)
- 针对用户给出的希望学习的知识点生成试题,让用户做题并完成打分
- 针对用户以往的做题历史记录以及访问记录,智能生成试题,对错题提供复习功能
- 推送功能
- 定期将知识点、试题通过APP信息、邮件等方式推送给用户,提醒用户定期学习

### 应用前后端框架

**前端**

实现上面提到的所有功能,保证美观、流畅。

**后端**

后端需要设计用户接口,转发用户请求,保存用户数据(基本信息、收藏、浏览记录),保证流畅、安全。

### 设计初稿

相应 demo 可见 `demo.mp4`

交互上采用点击-反馈式,整体基于Meterial Design 的设计理念。考虑到目标人群的多样性,**暂时兼容Android 4.4+(至Android 12)。**

**首页**

展示用户兴趣点,例如推荐功能,历史浏览;同时在用户中心中做单独入口,不作为唯一通道。

![ScreenShot 2021-08-19 at 03.26.44@2x](https://i.loli.net/2021/08/19/xKOtdSDRf7NLgap.png)

**文本标注页**

文本标注页核心是一个文本输入框,点击按钮出分析结果;分析结果直接高亮显示在文本中,点击后跳转到相应知识点。

![ScreenShot 2021-08-19 at 03.26.49@2x](https://i.loli.net/2021/08/19/UCl2DcNkGJZjziB.png)

**专项测试**

针对用户给出的希望学习的知识点给出一套题目,让用户做题并完成打分;或者是针对用户以往的做题历史记录以及访问记录,对用户进行试题的推荐。利用试题巩固用户学习成果。

**知识点详情**

对每个知识点,详细显示其属性供用户查询,同时通过节点网络地图让用户尽心拓展学习,具有常规学习无法比拟的自由性。同时有主流社交网站的分享途径,方便用户在社交圈中集体学习。

下面的为节点网络地图的示意图(来自数据网站)。

![ScreenShot 2021-08-19 at 03.49.58@2x](https://i.loli.net/2021/08/19/VSREeNMb5GyUdI7.png)

**用户中心**

用户系统主要为用户提供个性化的知识服务,同时为用户保留收藏与浏览记录,设有等级功能,学习可以获得成长积分,起到激励用户的作用。

![ScreenShot 2021-08-19 at 03.26.52@2x](https://i.loli.net/2021/08/19/xkL7GZFtESB6zRd.png)

**问答机器人**

问答机器人通过人工智能,赋能有局限性的知识点学习,解决K12用户遇到问题难以搜索,搜索结果正确性难以分辨的问题。同时采用对话模式,熟悉度高,上手难度低。

![ScreenShot 2021-08-19 at 03.27.01@2x](https://i.loli.net/2021/08/19/MhENf7okTUxFClK.png)

### 人员分工

(假的)

- 前端用户系统、答题系统等项目的开开发,人机交互设计

- 前端推荐系统、问答系统、知识图谱可视化等项目的开发

- 前端接入分享接口,后端框架搭建,实现用户系统并接入Edukg与微博SDK

### 工作计划

规划于 2021.8.11 开始,2021.9.1 前完成。

- 8.11-8.15 定开发规范,设计UI初稿
- 8.16-8.19 搭建UI框架
- 8.20-8.25 前端设计 & 后端搭建
- 8.26-8.28 前后端融合测试
- 8.29-8.31 第三方服务集成 & 模拟用户测试 & 云测 & 细节调整
- 9.1 发布正式版本

## 参考资料

https://github.com/LinuxCafeFederation/awesome-android

https://github.com/wasabeef/awesome-android-ui

https://github.com/jobbole/awesome-android-cn

https://github.com/JsonChao/Awesome-Android-Interview/blob/master/Android%E7%9B%B8%E5%85%B3/Android%E5%9F%BA%E7%A1%80%E9%9D%A2%E8%AF%95%E9%A2%98.md

https://www.jianshu.com/p/5dfed8a3a017

https://github.com/soyoungboy/android-material-design-Open-source-projects

#### 原型参考

https://github.com/CeuiLiSA/Pixiv-Shaft

https://github.com/Notsfsssf/Pix-EzViewer

https://github.com/axiel7/MoeList

https://github.com/oasisfeng/island

https://github.com/race604/FlyRefresh

https://github.com/material-components/material-components-android

https://codecanyon.net/item/universal-full-multipurpose-android-app/6512720?_ga=2.240312843.980967154.1628676991-1019096890.1628676991

Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
AC
BD
ACDE
AB
97
10
d
3.05419904E8
语法错误
D
D
E
H
H
J
E
G
G
i = 1
j = 0
i = 1
j = 0
i = 66
b = 66
ch = B
b = 1
A
A
Aa.Bb.Cc.Dd.Ee.Ff.Gg.Hh.Ii.Jj.
D
ABC
BDE
D
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import java.io.BufferedInputStream;
import java.util.*;

class Main {
public static void main(String[] args) {
Scanner in = new Scanner(new BufferedInputStream(System.in));
int N = in.nextInt();
int res = Integer.MIN_VALUE;
int cur = 0;
for (int i = 0; i < N; i++) {
int num = in.nextInt();
cur = Integer.max(num + cur, num);
res = Integer.max(res, cur);
}
in.close();
System.out.println(res);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import java.io.BufferedInputStream;
import java.util.*;

class Main {
public static void main(String[] args) {
Scanner in = new Scanner(new BufferedInputStream(System.in));
int N = in.nextInt();
int size = N * N;
int[][] row = new int[size][size];
int[][] col = new int[size][size];
int[][] box = new int[size][size];
String res = "yes";
for (int i = 0; i < size; i++)
for (int j = 0; j < size; j++) {
int num = in.nextInt();
int index = (i / N) * N + j / N;
if (row[num - 1][i] + col[num - 1][j] + box[num - 1][index] > 0)
res = "no";
row[num - 1][i] = col[num - 1][j] = box[num - 1][index] = 1;
}
in.close();
System.out.println(res);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
B
A
E
D
ABCD
BCD
BCD
ABCE
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import java.io.*;
import java.util.*;

class Main {
public static void main(String[] args) {
Scanner in = new Scanner(new BufferedInputStream(System.in));
String str = in.next().toLowerCase();
Arrays.asList(new File("./input/test/case")
.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String name) {
return name.toLowerCase().contains(str);
}
})).stream().filter(File::isFile).map(File::getName)
.sorted().forEach(System.out::println);
in.close();
}
}

0 comments on commit e61fd1f

Please sign in to comment.