第一次个人编程作业
第一次个人编程作业
1.在Github仓库中新建一个学号为名的文件夹,同时在博客正文首行给出作业github链接
https://github.com/liujiarun2000/031802121/tree/master/031802121
2.在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的开发上耗费的时间
3.计算模块接口的设计与实现过程。设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?说明你的算法的关键(不必列出源代码),以及独到之处。

import jieba 分词
import jieba.analyse 提取关键词
import sys 命令行读入txt
from datasketch import MinHash 从datasketch包引用MinHash
minhash认为,随机从特征中抽样一些来进行比较,和拿全部特征进行比较,在数学上,能得到一样的效果。建立一个特征和事物的矩阵,上侧是事物集合,左侧是特征集合。

我们要选择多个行排列来计算MinHash,最后根据Jaccard index公式 来计算相似度

4.计算模块接口部分的性能改进。记录在改进计算模块性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(由VS 2017/JProfiler的性能分析工具自动生成),并展示你程序中消耗最大的函数。


5.计算模块部分单元测试展示
if name == 'main':
with open("sys.argv[1], 'r', encoding='utf-8') as x, open("sys.argv[2], 'r', encoding='utf-8') as y :
content_x = x.read()
content_y = y.read()
similarity = minhashSimilarity(content_x, content_y)
similarity = similarity.main()
print('%.2f%%' % (similarity*100))
F:\Pycharm\Py\check1\orig.txt
F:\Pycharm\Py\check1\orig_0.8_add.txt
77.34%
F:\Pycharm\Py\check1\orig.txt
F:\Pycharm\Py\check1\orig_0.8_del.txt
56.25%
F:\Pycharm\Py\check1\orig.txt
F:\Pycharm\Py\check1\orig_0.8_dis_1.txt
84.38%
F:\Pycharm\Py\check1\orig.txt
F:\Pycharm\Py\check1\orig_0.8_dis_3.txt
82.03%
F:\Pycharm\Py\check1\orig.txt
F:\Pycharm\Py\check1\orig_0.8_dis_7.txt
75.00%
F:\Pycharm\Py\check1\orig.txt
F:\Pycharm\Py\check1\orig_0.8_dis_10.txt
56.25%
F:\Pycharm\Py\check1\orig.txt
F:\Pycharm\Py\check1\orig_0.8_dis_15.txt
42.97%
F:\Pycharm\Py\check1\orig.txt
F:\Pycharm\Py\check1\orig_0.8_mix.txt
66.41%
F:\Pycharm\Py\check1\orig.txt
F:\Pycharm\Py\check1\orig_rep.txt
53.91%
6.计算模块部分异常处理说明
两相同文本查重:
F:\Pycharm\Py\check1\orig.txt
F:\Pycharm\Py\check1\orig.txt
100.00%
orig.txt与空文本查重
F:\Pycharm\Py\check1\orig.txt
F:\Pycharm\Py\check1\empty.txt
0.00%
7.在你实现完程序之后,在附录提供的PSP表格记录下你在程序的各个模块上实际花费的时间

8.个人总结
这次个人编程作业对我来说是一次不小的考验,同样也是对编程过程的一次全新体验。
在这次作业中,从头至尾,一切几乎都是在从零开始
学习到的:
注册GitHub,学习git-bash语法
拾起一年前学过皮毛的python,带着一点儿对于python的印象开始研究课题
了解求文本相似度的几种方法(我选择了其中较为易懂的minhash法,但是从几个测试样例得出的文本相似度看来并不尽如人意)和jieba库的使用
制作psp表格和流程图
了解性能测试软件(最后还是用命令行测试的,原因下文再表)
进行单元测试和异常处理
许多不足:
Python运用并不熟练,遇事不决就调库函数
优化代码能力不足,从前只知道让代码run,并未太多关注过代码的效率,覆盖率等性能
做事拖延,对工作量估计不准。在这次编程作业中,我完成代码编写后并未立刻做完性能测试,拖到16号晚上做完剩余的性能测试和博客随笔制作(博客写起来是真多)。


浙公网安备 33010602011771号