第一次个人编程作业

软件工程 网工1934
作业要求:
1.在 Github 仓库中新建一个学号为名的文件夹。
2.在开始实现程序之前,在 PSP 表格记录下你估计在程序开发各个步骤上耗费的时间,
在实现程序之后,在PSP表格记录下你在程序的各个模块上实际花费的时间。
3.语言不限,并将编译好的程序发布到 Github 仓库中的 releases 中。
4.提交的代码要求经过 Code Quality Analysis 工具的分析并消除所有的警告。
5.完成项目的首个版本之后,请使用性能分析工具Studio Profiling Tools来找出代码中的性能瓶颈并进行改进。
6.使用Github来管理源代码和测试用例,代码有进展即签入Github。
7.使用单元测试对项目进行测试,并使用插件查看测试分支覆盖率等指标;写出至少10个测试用例确保你的程
序能够正确处理各种情况。
作业要求链接

[Github链接](https://github.com/szxxn/3119005336/tree/master)

一、PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 95
Estimate 估计这个任务需要多少时间 900 940
Development 开发
Analysis 需求分析 (包括学习新技术) 300 280
Design Spec 生成设计文档 60 60
Design Review 设计复审 60 60
Coding Standard 代码规范 (为目前的开发制定合适的规范) 30 30
Design 具体设计 30 30
Coding 具体编码 150 200
Code Review 代码复审 30 30
Test 测试(自我测试,修改代码,提交修改) 60 70
Reporting 报告 30 20
Test Repor 测试报告 20 20
Size Measurement 计算工作量 15 15
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 30
合计 875 940

二、模块接口的设计与实现过程

2.1类

主类:

​ Main:main 方法所在的类

工具类:

  • HammingUtils:计算海明距离的类
  • SimHashUtils:计算 SimHash 值的类
  • TxtIOUtils:读写 txt 文件的工具类
  • ShortStringException:处理文本内容过短的异常类
2.2具体流程

2.3关键算法

SimHash+海明距离

第一步:分词,把需要判断文本分词形成这个文章的特征单词。最后形成去掉噪音词的单词序列并为每个词加上权重。

第二步:hash,通过hash算法把每个词变成hash值,比如“美国”通过hash算法计算为 100101。这样我们的字符串就变成了一串串数字。

第三步:加权,通过第二步的hash生成结果,需要按照单词的权重形成加权数字串,比如“美国”的hash值为“100101”,通过加权计算为“4 -4 -4 4 -4 4”。

第四步:合并,把上面各个单词算出来的序列值累加,变成只有一个序列串。

第五步:降维,把第四步算出的序列串变成 0 1 串,形成我们最终的simhash签名。 如果每一位大于0 记为 1,小于0 记为 0。最后算出结果为:“1 0 1 0 1 1”。

2.4项目结构

三、部分代码展示

SimHash

海明距离

四、性能分析

概览

实时内存

从分析图可以看到:
调用次数最多的是com.hankcs.hanlp包提供的接口, 即分词、取关键词与计算词频花费了最多的时间。
所以在性能上基本没有什么需要改进的。

五、测试


在命令行运行不成功,和同学讨论后发现在idea上可以直接传参!



结果文件:


结果:

posted @ 2021-09-19 16:06  sxzzn  阅读(39)  评论(0)    收藏  举报