第一次个人编程作业
| 这个作业属于哪个课程 | < 软件工程 > |
|---|---|
| 这个作业要求在哪里 | < 作业要求 > |
| 这个作业的目标 | < 论文查重算法设计 + 学习PSP表格 + Git管理 > |
作业链接( GitHub )
编译环境 :python3.9 IDE:pycharm
PSP表
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 40 | 20 |
| · Estimate | · 估计这个任务需要多少时间 | 60 | 30 |
| Development | 开发 | 200 | 100 |
| · Analysis | · 需求分析 (包括学习新技术) | 200 | 220 |
| · Design Spec | · 生成设计文档 | 60 | 30 |
| · Design Review | · 设计复审 | 40 | 20 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
| · Design | · 具体设计 | 60 | 40 |
| · Coding | · 具体编码 | 200 | 280 |
| · Code Review | · 代码复审 | 20 | 20 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 20 | 30 |
| Reporting | 报告 | 80 | 80 |
| · Test Report | · 测试报告 | 30 | 35 |
| · Size Measurement | · 计算工作量 | 30 | 35 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 40 | 40 |
| · 合计 | 1090 | 990 |
计算模块接口的设计与实现过程
-
模块依赖关系

其中unit_test.py是单元测试文件,main.py是程序入口。
-
函数关系(流程图)

-
接口解释
-
1.jieba.cut
用于对中文句子进行分词,功能很强大。jiba.cut 支持四种分词模式:精确模式,试图将句子最精确地切开,适合文本分析;
全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
paddle模式,利用PaddlePaddle深度学习框架,训练序列标注(双向GRU)网络模型实现分词。同时支持词性标注。
例如:
运行结果:text = "我来到广东工业大学" seg_list = jieba.lcut(text, cut_all=False) print(seg_list)我/ 来到/ 广东工业大学 -
2.re.match
使用match方法进行匹配操作
result = re.match(正则表达 式,要匹配的字符串),使用正则表达式来筛选掉符号,换行符等等。 -
3.gensim.dictionary.doc2bow
Doc2Bow是gensim中封装的一个方法,主要用于实现Bow模型。是最早出现在自然语言处理和信息检索领域的模型。它会把两个文档中出现的单词构建一个词典(dictionary),每个词典有一个索引值,可以用一个向量来表示每个索引值出现的次数。 -
4.gensim.similarities.Similarity
计算余弦相似度
def calc_similarity(text_1, text_2): texts = [text_1, text_2] dictionary = gensim.corpora.Dictionary(texts) corpus = [dictionary.doc2bow(text) for text in texts] a_similarity = gensim.similarities.Similarity('-Similarity-index', corpus,num_features=len(dictionary)) test_corpus_1 = dictionary.doc2bow(text_1) cosine_sim = a_similarity[test_corpus_1][1] return cosine_sim -
-
性能分析
![]()
用pycharm自带的插件检查性能分析。其中filter函数时间最长,由于里面有cut跟re.match函数,所以时间是最长的。 -
覆盖率
![]()
用pycharm插件自带的插件查看覆盖率,运行了unit_test.py文件,里面是单元测试,methon.py里面是函数,函数的覆盖率为 100% 符合要求。 -
单元测试
![]()
图中对应orig_0.8_add、orig_0.8_del、orig_0.8_dis_1、orig_0.8_dis_10、orig_0.8_dis_15等等
个人总结:
- PSP表给了对软件开发过程还在懵懂的我很大的启发
- 第一次单人编程作业还有许多不习惯的地方,希望以后能更进一步。



浙公网安备 33010602011771号