个人项目

2021/9/15 23:05:42

本文主要是介绍个人项目,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

这个作业属于哪个课程 课程链接
这个作业要求在哪里 作业要求
这个作业的目标 PSP表格的使用,基本开发流程的了解与知识的学习,程序测试与开发。

Github链接

个人项目

一、个人开发流程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
配置: config

Process 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 :422

Process 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.txt

Process finished with exit code 0

输出文件:

原文:orig.txt
抄袭版论文的文件:orig.txt
重复率:1.00

五、异常声明

  • 请确保参数个数正确:

    该错误可能出现在使用cmd命令时参数个数并没有按要求给出3个文件路径导致,有可能是因为给少了也可能是因为给多了。

  • 原论文与抄袭论文不存在或答案输出路径为空!:

    该错误可能出现于原论文与抄袭论文路径不存在答案输出路径为空

  • 答案文件已存在,请使用新路径以避免覆盖!:

    该错误可能出现与答案文件已经存在于本地磁盘上,请更换一个路径并带上一个想要输出的答案文件的名字。

  • 文件读取有异常!:

    该错误可能出现与文件读取权限的设置上,请确保所有文件都是处于可读状态下。

六、其他声明

  1. 控制台输出:

    九月 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
    

    属于正常日志记录信息,而不是错误。

  2. 重复率的计算采用的是余弦相似性的方式进行计算,对于两篇相似的文章,单词词频越相近则会得出一个更高的重复率,而如果单词词频相差较远甚至完全不相同时,重复率才会较低。

  3. 参考文章:TF-IDF与余弦相似性的应用

七、实际测试效果



这篇关于个人项目的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程