这个作业属于哪个课程 | 课程链接 |
---|---|
这个作业要求在哪里 | 作业要求 |
这个作业的目标 | PSP表格的使用,基本开发流程的了解与知识的学习,程序测试与开发。 |
个人项目
一、个人开发流程PSP表格
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 15 |
· Estimate | · 估计这个任务需要多少时间 | 20 | 15 |
Development | 开发 | 590 | 600 |
· Analysis | · 需求分析 (包括学习新技术) | 120 | 60 |
· Design Spec | · 生成设计文档 | 30 | 20 |
· Design Review | · 设计复审 | 20 | 30 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 15 |
· Design | · 具体设计 | 200 | 240 |
· Coding | · 具体编码 | 100 | 130 |
· Code Review | · 代码复审 | 50 | 25 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 80 |
Reporting | 报告 | 70 | 90 |
· Test Repor | · 测试报告 | 50 | 60 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 20 |
· 合计 | 680 | 705 |
二、计算模块接口的设计与实现过程
基本思路是:
先通过FileUtils分析出文件的字符串,再获取字符串的词频与单词后通过数值计算工具解析词频单词Map为词频数组并进行重复率计算,最后再通过FileUtils输出答案文件。
三、模块接口之间的调用与耗时情况
如图使用jprofiler分析结果
结果说明程序占用时间最久的在于对字符串进行分词与解析功能上,这个方法是Ansj组件内部方法,所能做的优化可以是在传入字符串时不将整个文件内容传入,而是分段将内容传入,这样可以初步优化这个程序的执行。但最好的方式还是选择一个处理方式更快的分析算法。
四、具体的测试案例:
1. 文件读取功能的测试
@Test
public void testReadFileToString() throws IOException {
String path = "log.log";
String context = FileUtils.readFileToString(path);
System.out.println(context);
}
四月 15, 2021 2:25:37 下午 com.moxiaoxiao.JULTest testLogConfig
严重: severe
四月 15, 2021 2:25:37 下午 com.moxiaoxiao.JULTest testLogConfig
警告: warning
四月 15, 2021 2:25:37 下午 com.moxiaoxiao.JULTest testLogConfig
信息: info
四月 15, 2021 2:25:37 下午 com.moxiaoxiao.JULTest testLogConfig
配置: configProcess finished with exit code 0
2. 分析词频与单词测试
@Test
public void testGetTermsAndCounts() throws IOException, FileEmptyException {
String path = "log.log";
String context = FileUtils.readFileToString(path);
Map<String, Integer> map = AnalysisUtils.getTermsAndCounts(context);
System.out.println(map);
}
九月 15, 2021 10:23:11 下午 org.ansj.dic.impl.File2Stream info
信息: path to stream library/ambiguity.dic
九月 15, 2021 10:23:11 下午 org.ansj.library.AmbiguityLibrary info
信息: load dic use time:1 path is : library/ambiguity.dic
九月 15, 2021 10:23:11 下午 org.ansj.dic.impl.File2Stream info
信息: path to stream library/default.dic
九月 15, 2021 10:23:11 下午 org.ansj.library.DicLibrary info
信息: load dic use time:1 path is : library/default.dic
九月 15, 2021 10:23:12 下午 org.ansj.library.DATDictionary info
信息: init core library ok use time : 865
九月 15, 2021 10:23:12 下午 org.ansj.library.NgramLibrary info
信息: init ngram ok use time :469
{com=4, 严重=1, 25=4, 15=4, 37=4, 信息=1, 四月=4, moxiaoxiao=4, 2021=4, testlogconfig=4, jultest=4, 2=4, 配置=1, 下午=4, 警告=1, severe=1, warning=1, config=1, info=1}Process finished with exit code 0
3.测试计算重复率
@Test
public void testGetRepeatRate() throws IOException, FileEmptyException {
String path = "log.log";
String path2 = "2.log";
String context = FileUtils.readFileToString(path);
Map<String, Integer> map = AnalysisUtils.getTermsAndCounts(context);
String context2 = FileUtils.readFileToString(path2);
Map<String, Integer> map2 = AnalysisUtils.getTermsAndCounts(context2);
System.out.println(MathUtils.getRepeatRate(map, map2));
}
九月 15, 2021 10:24:00 下午 org.ansj.dic.impl.File2Stream info
信息: path to stream library/ambiguity.dic
九月 15, 2021 10:24:00 下午 org.ansj.library.AmbiguityLibrary info
信息: load dic use time:0 path is : library/ambiguity.dic
九月 15, 2021 10:24:00 下午 org.ansj.dic.impl.File2Stream info
信息: path to stream library/default.dic
九月 15, 2021 10:24:00 下午 org.ansj.library.DicLibrary info
信息: load dic use time:2 path is : library/default.dic
九月 15, 2021 10:24:01 下午 org.ansj.library.DATDictionary info
信息: init core library ok use time : 765
九月 15, 2021 10:24:02 下午 org.ansj.library.NgramLibrary info
信息: init ngram ok use time :453
0.9881371839677033
4.测试答案输出
@Test
public void testWriteAns() throws IOException, FileEmptyException {
String path = "log.log";
String path2 = "2.log";
String context = FileUtils.readFileToString(path);
Map<String, Integer> map = AnalysisUtils.getTermsAndCounts(context);
String context2 = FileUtils.readFileToString(path2);
Map<String, Integer> map2 = AnalysisUtils.getTermsAndCounts(context2);
Double rate = MathUtils.getRepeatRate(map, map2);
FileUtils.writeAns("ans.txt", path, path2, rate);
}
九月 15, 2021 10:24:43 下午 org.ansj.dic.impl.File2Stream info
信息: path to stream library/ambiguity.dic
九月 15, 2021 10:24:43 下午 org.ansj.library.AmbiguityLibrary info
信息: load dic use time:0 path is : library/ambiguity.dic
九月 15, 2021 10:24:43 下午 org.ansj.dic.impl.File2Stream info
信息: path to stream library/default.dic
九月 15, 2021 10:24:43 下午 org.ansj.library.DicLibrary info
信息: load dic use time:1 path is : library/default.dic
九月 15, 2021 10:24:44 下午 org.ansj.library.DATDictionary info
信息: init core library ok use time : 687
九月 15, 2021 10:24:45 下午 org.ansj.library.NgramLibrary info
信息: init ngram ok use time :422Process finished with exit code 0
答案文件:
原文:log.log
抄袭版论文的文件:2.log
重复率:0.99
5.测试空白参数
@Test
public void testEmptyMain() throws Exception{
String[] args = {"", "",""};
App.main(args);
}
原论文与抄袭论文不存在或答案输出路径为空!
6.测试正常参数
@Test
public void testMain() throws Exception{
String[] args = {"orig.txt", "orig.txt","ans.txt"};
App.main(args);
}
九月 15, 2021 10:26:14 下午 org.ansj.dic.impl.File2Stream info
信息: path to stream library/ambiguity.dic
九月 15, 2021 10:26:14 下午 org.ansj.library.AmbiguityLibrary info
信息: load dic use time:0 path is : library/ambiguity.dic
九月 15, 2021 10:26:14 下午 org.ansj.dic.impl.File2Stream info
信息: path to stream library/default.dic
九月 15, 2021 10:26:14 下午 org.ansj.library.DicLibrary info
信息: load dic use time:2 path is : library/default.dic
九月 15, 2021 10:26:15 下午 org.ansj.library.DATDictionary info
信息: init core library ok use time : 725
九月 15, 2021 10:26:16 下午 org.ansj.library.NgramLibrary info
信息: init ngram ok use time :462
已将结果输出至:ans.txtProcess finished with exit code 0
输出文件:
原文:orig.txt
抄袭版论文的文件:orig.txt
重复率:1.00
五、异常声明
-
请确保参数个数正确:
该错误可能出现在使用cmd命令时参数个数并没有按要求给出3个文件路径导致,有可能是因为给少了也可能是因为给多了。
-
原论文与抄袭论文不存在或答案输出路径为空!:
该错误可能出现于原论文与抄袭论文路径不存在或答案输出路径为空。
-
答案文件已存在,请使用新路径以避免覆盖!:
该错误可能出现与答案文件已经存在于本地磁盘上,请更换一个路径并带上一个想要输出的答案文件的名字。
-
文件读取有异常!:
该错误可能出现与文件读取权限的设置上,请确保所有文件都是处于可读状态下。
六、其他声明
-
控制台输出:
九月 15, 2021 10:26:14 下午 org.ansj.dic.impl.File2Stream info 信息: path to stream library/ambiguity.dic 九月 15, 2021 10:26:14 下午 org.ansj.library.AmbiguityLibrary info 信息: load dic use time:0 path is : library/ambiguity.dic 九月 15, 2021 10:26:14 下午 org.ansj.dic.impl.File2Stream info 信息: path to stream library/default.dic 九月 15, 2021 10:26:14 下午 org.ansj.library.DicLibrary info 信息: load dic use time:2 path is : library/default.dic 九月 15, 2021 10:26:15 下午 org.ansj.library.DATDictionary info 信息: init core library ok use time : 725 九月 15, 2021 10:26:16 下午 org.ansj.library.NgramLibrary info 信息: init ngram ok use time :462
属于正常日志记录信息,而不是错误。
-
重复率的计算采用的是余弦相似性的方式进行计算,对于两篇相似的文章,单词词频越相近则会得出一个更高的重复率,而如果单词词频相差较远甚至完全不相同时,重复率才会较低。
-
参考文章:TF-IDF与余弦相似性的应用