个人项目-查重系统
这个作业属于哪个课程 | 软件工程计算机国际班 |
---|---|
这个作业要求在哪里 | 本次作业要求 |
这个作业的目标 | 设计一个查重系统 |
一、设计目标
本次项目设计选择用python来实现,因为python提供给使用者很多功能包,可以大大提高编程的效率。
1.实现中文文本处理
本次需要设计的查重系统主要是对中文文本进行查询,因此需要对文本中的中文进行分词,这里使用jieba分词包。jieba分词对于汉字分词非常准确。在终端中运用pip install jieba下载。
f = open(a1, encoding="utf-8")
data1 = f.read()
new_data1 = data1.translate(punc_table)
text1 = jieba.lcut(new_data1) # 被测试文本
f.close() #部分代码演示
通过jieba.lcut可以精确的将中文句子分成词组,为下面的查重比对起到了关键的作用
2.实现文本查重
在上一步中我们已经通过jieba将中文文本进行了分词,那么接下来就是进行查重,在调试的过程当中,我发现jieba分词并没有考虑到标点符号,这个对查重的准确度有一定的影响,于是我们可以通过一个循环语句进行一个文本预处理,将文本的标点符号全部去除,然后再进行jieba分词。
参考文献:https://cs.stanford.edu/~quocle/paragraph_vector.pdf
https://stackoverflow.com/questions/36578341/how-to-use-similarities-similarity-in-gensim
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~“”?,!【】()、。:; ’‘……¥·"""
dicts = {i: '' for i in punctuation}
punc_table = str.maketrans(dicts) # 去除标点符号
具体进行查重的步骤中我们选择一款名为gensim的语料处理库,当中的doc2bow可以将文本的分词结果构成向量并且制作成一个词袋。通过文本组成的向量,我们可以通过余弦相似度来计算文本向量的相似度,从而实现文本查重。
3.实现异常抛出
异常抛出运用try-except来实现,当在文件夹中查找时发现文件名不存在时主动抛出异常。
4.实现GUI
用户界面在一个程序当中也是非常重要,我运用tkinter制作了一个简单的GUI。
root = Tk()
root.geometry('480x240')
root.title('查重系统')
lb1 = Label(root, text='请输入需要查询的文件名')
lb1.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1)
inp1 = Entry(root)
inp1.place(relx=0.35, rely=0.2, relwidth=0.3, relheight=0.1)
btn1 = Button(root, text='开始运行', command=run1)
btn1.place(relx=0.35, rely=0.4, relwidth=0.3, relheight=0.1)
txt = Text(root)
txt.place(rely=0.6, relheight=0.4)
root.mainloop() # UI界面设计
二、成果展示
1.源码-Github
源码已上传至Github点击查看源码
点击查看requirements
2.运行过程
启动界面
输入a(并没有a.txt),异常,查询不到文件重新输入
输入abc(abc为一篇与目标文本无关联的文章),重合率为45.43%
输入orig,此文件和目标文件一致,因此重合率为100%
分别输入orig_0.8_add和orig_0.8_del(与目标文本相关),重合率都非常高在98%左右
三、性能测试及改进
使用vs进行的相关测试
四、单元测试
单元测试将使用python的unittest包
五、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
· Planning | · 计划 | 30 | 40 |
· Estimate | · 估计这个任务需要多少时间 | 10 | 5 |
· Development | · 开发 | 300 | 260 |
· Analysis | · 需求分析 (包括学习新技术) | 300 | 320 |
· Design Spec | · 生成设计文档 | 30 | 20 |
· Design Review | · 设计复审 | 20 | 15 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 10 |
· Design | · 具体设计 | 120 | 80 |
· Coding | · 具体编码 | 40 | 55 |
· Code Review | · 代码复审 | 20 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改 | 60 | 40 |
· Reporting | · 报告 | 30 | 20 |
· Test Report | · 测试报告 | 20 | 10 |
· Size Measurement | · 计算工作量 | 10 | 5 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 30 |
· total | · 合计 | 1020 | 900 |