20162302 - 20162319 结对编程项目-马尔科夫
结对编程项目-马尔科夫
- 
需求分析
1、实现对文章的拆分
2、建立单词对后面可能跟的单词的映射
3、根据需求生成文章
4、控制篇幅
5、避免出现环
- 
设计思路
首先是对文章进行学习-分为两步:第一步是记录下文章中出现的所有单词,第二步是建立单词之间的映射。
接下来进行的是文章的生成。
最后一步是检查文章。
- 
一、拆分
在对文章进行分析的时候要先分析文章所有的单词,这也就需要对文章进行拆分下面的ArcToSec类负责以句号为间断,把文章拆成句子。
package Markov;
import java.util.StringTokenizer;
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;
    }
}
而SecToWor类是用于以空格为依据把句子拆分成单词
package Markov;
import java.util.StringTokenizer;
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;
    }
}
然而后来我发现,拆分文章的类实属多余,会增加使用时的复杂性。
在建立映射关系的时候使用Hashtable<K, v>方法,我计划把拆分以后的所有单词放到一个集合里面,然后再转换成数组,K处放单词对应数组中的位置。然后逐一分析单词,两个一组,v处放第二个单词。但是因为临近期末,有很多科目需要复习,项目做到这里就中止了。
- 
代码托管
- 
UML图
这仅仅是一个相对完整的思路,其中Learner类负责对文章的学习,会引用SecToWor类来拆分单词,然后学习的结果由Data来保存。然后在生成文章的时候,由Creativer类调用Data中的数据生成文章。

- 
PSP
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) | 
|---|---|---|---|
| Planning | 计划 | ||
| · Estimate | · 估计这个任务需要多少时间 | 1000 | 190 | 
| Development | 开发 | ||
| · Analysis | · 需求分析 (包括学习新技术) | 40 | 30 | 
| · Design Spec | · 生成设计文档 | 40 | 20 | 
| · Design Review | · 设计复审 (和同事审核设计文档) | 30 | 10 | 
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 50 | 0 | 
| · Design | · 具体设计 | 100 | 60 | 
| · Coding | · 具体编码 | 100 | 60 | 
| · Code Review | · 代码复审 | 100 | 0 | 
| · Test | · 测试(自我测试,修改代码,提交修改) | 200 | 10 | 
| Reporting | 报告 | ||
| · Test Report | · 测试报告 | 20 | 10 | 
| · Size Measurement | · 计算工作量 | 20 | 0 | 
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 40 | 10 | 
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号