马尔克夫链
需求分析
- 仅考虑英文输入输出
- 从文件读入待”学习“文章
- 能处理标点符号(参考材料中有说明)
- 能控制输出文章的篇幅
- 通过参数指定输出的单词数
- 误差控制
- 生成的语句要能完整结束(比如遇到句号、问号、感叹号等=结束标志)。
- 为了能实现上述条件,允许输出的单词数量误差 ±50。
避免环
设计思路
-
第一步:基于谢涛老师给出的参考实例,首先让代码读入文章。如何读入文件呢? 参考课本4.9。
-
第二步:建立单词之间的映射。
public class ArcToSec {
public String [] ats (String article){
StringTokenizer token = new StringTokenizer(article);
int n = article.length();
int j = 0, l = 0;
//分析句子个数
for (int i=0;i<n;i++) {
char c = article.charAt(i);
if (c == '.')
l++;
}
String[] sentence = new String[l+1];
//以空格为依据拆分文章
for (int i=0;i<n;i++){
char c = article.charAt(i);
if (c == '.') {
sentence[j] += c;
j++;
}
else
sentence[j]+=c;
}
return sentence;
}
}
ArcToSec代码是在对文章进行分析时进行拆分,这类主要是将文章拆分成句子并且以句号作为间断。
public class SecToWor {
public String[] stw (String write){
StringTokenizer token = new StringTokenizer(write);
int n = write.length();
int j = 0, l = 0;
//分析单词个数
for (int i=0;i<n;i++) {
char c = write.charAt(i);
if (c == ' ')
l++;
}
String[] words = new String[l+1];
//以空格为依据拆分句子
for (int i=0;i<n;i++){
char c = write.charAt(i);
if (c == ' ')
j++;
else
words[j]+=c;
}
return words;
}
}
SecToWor类以空格为依据把句子拆分成单词。我的结对伙伴的思路关键在于数组。在讨论到输出文章的时候考虑到了这篇博客里所用的思路,用后缀转为前缀的方式来输出文章。但是由于题目难度和期末临近,项目暂时中止。等到考试结束后再重启项目。
简易UML类图
- 由于项目没有完善所以只能画了一个简易UML类图
题目总结
这个题目真是很具有挑战性,虽然我们组暂时做不成这个项目但是会在之后补上剩下的代码。
PSP表格
PSP2.1 | Personal Softwore Process Stage | 预计耗时(分钟) | 实际耗时(分钟) | 重要成长 |
---|---|---|---|---|
Planning | 计划 | 20 | 30 | |
Estimate | 做这个任务需要多长时间 | 1000 | 720 | |
Development | 开发 | |||
Analysis | 需求分析(包括学习新技术) | 50 | 50 | |
Design Spec | 生成设计文档 | 180 | 100 | |
Design Review | 设计复审(和同事审核设计软件) | 30 | 10 | |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 60 | 0 | |
Design | 具体设计 | 200 | 240 | |
Coding | 具体编码 | 500 | 400 | |
Code Review | 代码复审 | 120 | 0 | |
Test | 测试(自我测试,修改代码,提交修改) | 240 | 12 | |
Reporting | 报告 | |||
Test Report | 测试报告 | 120 | 100 |
| Size Measurement | 计算工作量 | 20 | 15 |
| Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 60 | 30 | |