个人项目-查重系统

这个作业属于哪个课程 软件工程计算机国际班
这个作业要求在哪里 本次作业要求
这个作业的目标 设计一个查重系统

一、设计目标

本次项目设计选择用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
posted @ 2021-09-20 22:14  西米666  阅读(288)  评论(0编辑  收藏  举报