目录
Gitcode链接
https://gitcode.net/qq_63808826/3121005011
计算模块接口的设计与实现过程
程序最主要的函数为计算文本重复率的函数,其执行流程大概如下
PSP表格
Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|
计划 | 30 | 10 |
估计这个任务需要多少时间 | 30 | 20 |
开发 | 60 | 60 |
需求分析 (包括学习新技术) | 30 | 30 |
生成设计文档 | 30 | 10 |
设计复审 | 30 | 10 |
代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
具体设计 | 30 | 60 |
具体编码 | 60 | 90 |
代码复审 | 30 | 20 |
测试(自我测试,修改代码,提交修改) | 60 | 100 |
报告 | 30 | 60 |
测试报告 | 30 | 60 |
计算工作量 | 30 | 40 |
事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 510 | 630 |
计算模块接口部分的性能改进
改进思路
由于文本中的标点符号有可能对重复率的计算准确性造成影响,且会占用额外的计算资源,故对文本进行降噪清洗可提高程序的性能及准确性
程序运行的时间消费如图
可见程序加载数据时间就占程序运行时间1/3左右,且程序主要依靠调用库函数来计算哈希值故暂时没有性能改进方案
消耗最大的函数为
def get_similarity(original_text, copy_text):
# 清洗文本(去除标点符号)
pattern = re.compile(r'[\u4e00-\u9fa5]+')
cl_test1 = re.findall(pattern, original_text)
cl_test2 = re.findall(pattern, copy_text)
# 将清洗后的文本列表合并为字符串
original_text = ''.join(cl_test1)
copy_text = ''.join(cl_test2)
# 对字符串进行分词
original_words = list(jieba.cut(original_text))
copy_words = list(jieba.cut(copy_text))
# 生成simhash值
original_simhash = Simhash(original_words)
copy_simhash = Simhash(copy_words)
# 计算海明距离
distance = original_simhash.distance(copy_simhash)
# 计算重复率
similarity = 1 - distance / 64
return similarity
计算模块部分单元测试展示
对传入文本进行降噪清洗以及合并后分词的测试代码如下
# 清洗文本(去除标点符号)
pattern = re.compile(r'[\u4e00-\u9fa5]+')
cl_test1 = re.findall(pattern, original_text)
cl_test2 = re.findall(pattern, copy_text)
print(cl_test1)
print(cl_test2)
# 将清洗后的文本列表合并为字符串
original_text = ''.join(cl_test1)
copy_text = ''.join(cl_test2)
print(original_text)
print(copy_text)
# 对字符串进行分词
original_words = list(jieba.cut(original_text))
copy_words = list(jieba.cut(copy_text))
print(original_words)
print(copy_words)
输出结果如下
['今天是星期天', '天气晴', '今天晚上我要去看电影']
['今天是周天', '天气晴朗', '我晚上要去看电影']
今天是星期天天气晴今天晚上我要去看电影
今天是周天天气晴朗我晚上要去看电影
['今天', '是', '星期天', '天气', '晴', '今天', '晚上', '我要', '去', '看', '电影']
['今天', '是', '周天', '天气晴朗', '我', '晚上', '要', '去', '看', '电影']
对计算重复率函数进行测试
主要通过保持一个文本不必,修改抄袭文本看重复率的变化,结果如下
测试代码覆盖率如图
计算模块部分异常处理说明
代码在执行过程中有能会发生乱码报错,这是因为文件编码问题造成可在代码开头加上如下代码
# -*- coding: gbk -*-