第一次个人编程作业
java论文查重程序
这个作业属于哪个课程 | 班级链接 |
---|---|
这个作业要求在哪里 | 作业要求链接 |
这个作业的目标1 | 完成PSP表格记录 |
这个作业的目标2 | 使用软件进行性能分析 |
这个作业的目标3 | 熟悉使用GitHub、Markdown语法 |
这个作业的目标4 | 学习查重的主要算法和实现 |
这个作业的目标5 | 锻炼自己的写程序能力 |
一、Github地址
Github:https://github.com/wangzr123/3119005475.git
可执行的jar文件放在release里面
二、PSP表格
三、计算模块接口的设计与实现过程
- 共有五个类:
- chachong(主方法类):此类主要是实现接收键盘的值和调用其他函数的类
- Algorithm:算法类,此类包含了四个函数,四个函数之间存在调用关系,来实现对重复率的计算
- TxtDemo:文件输入输出类,此类实现的功能是文件的写入和提取
- testUnit:测试类,对全部文件的测试,不用从键盘中输入
- testMain:测试全部的文件(自己写程序的时候测试的)
- 关键算法:
- 分词:将文本分割成关键词的特征向量,分词方法有很多,我用了hanlp分词来实现
- hash:通过hash函数对每一个词向量进行映射,产生一个n位二进制串
- 加权:前面的计算我们已经得到了每个词向量的Hash串和该词向量对应的权重,这一步我们计算权重向量W=hash*weight
- 合并:把文本所有词向量的权重向量相累加,得到一个新的权重向量
- 降维:对于前面合并后得到的文本的权重向量,大于0的位置1,小于等于0的位置0,就可以得到该文本的SimHash值
最后使用海明距离来计算这两个文本的相似度,海明距离可以理解为,两个二进制串之间相同位置不同的个数。举个例子,[1,1,1,0,0,0]和[1,1,1,1,1,1]的海明距离就是3
四、计算模块接口部分的性能改进
- 概况
- 方法调用情况
- CPU负载
消耗最大的函数就是getSimHash,里面包括了分词、获取哈希值、加权、合并
降维,不过这些也没什么好提升的了
五、计算模块部分单元测试显示
- 测试模块代码
package main.com;
import org.junit.Test;
public class testUnit {
@Test
public void orign() {
String str0 = TxtDemo.readTxt("D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\orig.txt");
String str1 = TxtDemo.readTxt("D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\orig.txt");
double similarity = Algorithm.getSimilarity(Algorithm.getSimHash(str0), Algorithm.getSimHash(str1));
TxtDemo.writeTxt( similarity, "D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\result.txt");
}
@Test
public void add() {
String str0 = TxtDemo.readTxt("D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\orig.txt");
String str1 = TxtDemo.readTxt("D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\orig_0.8_add.txt");
double similarity = Algorithm.getSimilarity(Algorithm.getSimHash(str0), Algorithm.getSimHash(str1));
TxtDemo.writeTxt( similarity, "D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\result.txt");
}
@Test
public void del() {
String str0 = TxtDemo.readTxt("D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\orig.txt");
String str1 = TxtDemo.readTxt("D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\orig_0.8_del.txt");
double similarity = Algorithm.getSimilarity(Algorithm.getSimHash(str0), Algorithm.getSimHash(str1));
TxtDemo.writeTxt( similarity, "D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\result.txt");
}
@Test
public void dis1() {
String str0 = TxtDemo.readTxt("D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\orig.txt");
String str1 = TxtDemo.readTxt("D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\orig_0.8_dis_1.txt");
double similarity = Algorithm.getSimilarity(Algorithm.getSimHash(str0), Algorithm.getSimHash(str1));
TxtDemo.writeTxt( similarity, "D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\result.txt");
}
@Test
public void dis10() {
String str0 = TxtDemo.readTxt("D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\orig.txt");
String str1 = TxtDemo.readTxt("D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\orig_0.8_dis_10.txt");
double similarity = Algorithm.getSimilarity(Algorithm.getSimHash(str0), Algorithm.getSimHash(str1));
TxtDemo.writeTxt( similarity, "D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\result.txt");
}
@Test
public void dis15() {
String str0 = TxtDemo.readTxt("D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\orig.txt");
String str1 = TxtDemo.readTxt("D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\orig_0.8_dis_15.txt");
double similarity = Algorithm.getSimilarity(Algorithm.getSimHash(str0), Algorithm.getSimHash(str1));
TxtDemo.writeTxt( similarity, "D:\\study\\3.1\\first_ruangong\\chachong\\src\\file\\result.txt");
}
}
- 测试结果:
- 输入不存在的文件路径::
六、计算模块部分异常处理说明
- 空文件异常
try {
fileInputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
// 字符串拼接
while ((strLine = bufferedReader.readLine()) != null) {
str += strLine;
}
// 关闭资源
inputStreamReader.close();
bufferedReader.close();
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
七、参考
https://blog.csdn.net/weixin_33675507/article/details/85826969
https://blog.csdn.net/u010992313/article/details/104224712