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处放第二个单词。但是因为临近期末,有很多科目需要复习,项目做到这里就中止了。

这仅仅是一个相对完整的思路,其中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
posted @ 2017-06-21 13:31  20162302  阅读(163)  评论(1编辑  收藏  举报