工程概论作业二
| 这个作业属于哪个课程 |
计算2112 |
| 这个作业要求在哪里 |
要求 |
| 这个作业的目标 |
熟悉作业格式 |
一,链接
二,代码
package check;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import static org.junit.Assert.*;
public class MainTest {
checkTest t = new checkTest();
@Before
public void setUp() {
System.out.println("Start!");
}
@After
public void tearDown() {
System.out.println("Finish!");
}
/*
* 实际存在的路径*/
@Test
public void existPath() throws IOException {
try {
t.checktest("src/test1/orig.txt", "src/test1/orig_0.8_add.txt", "src/test1/answer.txt");
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* 空路径*/
@Test
public void nullPath() throws IOException {
try {
t.checktest("", "src/test1/orig_0.8_add.txt", "src/test1/answer.txt");
} catch (IOException e) {
e.printStackTrace();
fail();
}
}
/*
* 不存在的路径*/
@Test
public void nonExistPath() throws IOException {
try {
t.checktest("src/orig.txt", "src/test1/orig_0.8_add.txt", "src/test1/answer.txt");
} catch (IOException e) {
e.printStackTrace();
fail();
}
}
/*
* 相同的路径*/
@Test
public void samePath() throws IOException {
try {
t.checktest("src/test1/orig.txt", "src/test1/orig.txt", "src/test1/answer.txt");
} catch (IOException e) {
e.printStackTrace();
fail();
}
}
/*
* 原始文本与增加字数的文本对比*/
@Test
public void addtext() throws IOException {
try {
t.checktest("src/test1/orig.txt", "src/test1/orig_0.8_add.txt", "src/test1/answer.txt");
} catch (IOException e) {
e.printStackTrace();
fail();
}
}
/*
* 原始文本与减少字数的文本对比*/
@Test
public void deltext() throws IOException {
try {
t.checktest("src/test1/orig.txt", "src/test1/orig_0.8_del.txt", "src/test1/answer.txt");
} catch (IOException e) {
e.printStackTrace();
fail();
}
}
/*
* 原始文本与减少字数的文本对比*/
@Test
public void addcompdeltext() throws IOException {
try {
t.checktest("src/test1/orig_0.8_del.txt", "src/test1/orig_0.8_add.txt", "src/test1/answer.txt");
} catch (IOException e) {
e.printStackTrace();
fail();
}
}
/*
* 原文与orig_0.8_1文本对比*/
@Test
public void dis1text() throws IOException {
try {
t.checktest("src/test1/orig.txt", "src/test1/orig_0.8_dis_1.txt", "src/test1/answer.txt");
} catch (IOException e) {
e.printStackTrace();
fail();
}
}
/*
* 原文与orig_0.8_10文本对比*/
@Test
public void dis10text() throws IOException {
check.checkTest t = new check.checkTest();
try {
t.checktest("src/test1/orig.txt", "src/test1/orig_0.8_dis_10.txt", "src/test1/answer.txt");
} catch (IOException e) {
e.printStackTrace();
fail();
}
}
/*
* 原文与orig_0.8_15文本对比*/
@Test
public void dis15text() throws IOException {
try {
t.checktest("src/test1/orig.txt", "src/test1/orig_0.8_dis_15.txt", "src/test1/answer.txt");
} catch (IOException e) {
e.printStackTrace();
fail();
}
}
/*
* 超时监测,运行时间超过5s,不能通过测试*/
@Test
public void time() throws IOException {
try {
t.checktest("src/test1/orig.txt", "src/test1/orig_0.8_dis_15.txt", "src/test1/answer.txt");
} catch (IOException e) {
e.printStackTrace();
fail();
}
}
}
三,思路
- 计算模块接口的设计与实现过程。设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?说明你的算法的关键(不必列出源代码),以及独到之处。(18')
- mortal.text.similarity.TextSimilarityApp
- 功能:文本相似度计算程序的主类,入口类
- 参数:从命令行接受3个合理的文件路径,依次为:原文文件路径,被测试重复率文件路径,答案保存文件路径
- 注意:
- 前两个命令行参数所指路径必须真实存在,否则抛出异常
- 答案文件可以不存在,此时程序将自动创建文件,请确保路径合理,应用程序有创建文件的权限。
- 若答案文件存在且保存了重要信息,请备份!否则程序输出答案前会删除文件
- mortal.text.similarity.repeatcounter.RepeatWords
- 功能:比较一对字符串数组的相似度,它基于以下规则进行比较
- 字符串数组的每个元素(即字符串)表示一个词语
- 字符串数组表示一个句子中去掉标点符号后分词的结果的数组
- 一对字符串数组之间只有必须超过指定数目的公共重复词语子数组,才会被记录为重复的词语
- 对于一对字符串数组A、B,所得的重复词语子数组,存在不同子数组在不同字符串中有不尽相同的部分词语重复。故对于每一个字符串数组,重复词语数量不是所有词语子数组的简单相加,而是在以该字符串数组为参考,去掉重复的词语后的数量。故A对B的重复词语数与B对A的重复词语不一定相等。(A对B是指以A为参考,去掉重复词语)
- 功能控制:构造器接受两个字符串数组和一个int参数,int参数指示了开始计数为重复时的最少重复词语子数组长度。
- mortal.textsimilarity.repeatcounter.RepeatRate
- 功能:
- 接受两个字符串,这两个字符串包含要对比的两文本。
- 使用正则将文本划分为句子。
- 使用分词工具将句子分词
- 调用RepeatWords对对句子进行比较,获取这对句子中的重复词语数量
- 功能控制:
- RepeatRate.calculater是进行第4步工作,这个方法接受两参数
- int Range: 控制一个文本中某一位置的句子应该与 在另一个文本中的相同位置的前后各相差Range个句子的范围内的所有句子 都计算重复率, 然后取最大值,作为该文本句子中与另一文本相似词语的数量
- int min : 传递给RepeatWords构造器的参数,指示RepeatWords应该计算重复词语的阈值。
- mortal.text.similarity.repeatcounter.KMP
- 功能:实现KMP算法匹配子串,用来实现获取文本中的不重复的相似词语。