zoukankan      html  css  js  c++  java
  • 20162302

    结对编程项目-马尔科夫

    • 需求分析

    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
  • 相关阅读:
    About_Web
    神奇的 SQL 之性能优化 → 让 SQL 飞起来
    Java实现Kafka生产者和消费者的示例
    Android屏幕绘制一问到底(无代码)
    关于数据库事务和锁的必会知识点,你掌握了多少?
    【Azure Cloud Services】云服务频繁发生服务器崩溃的排查方案
    Choreographer全解析
    气之争,聊聊算法岗位的门户之见!
    资深首席架构师预测:2021年云计算的8个首要趋势
    【并发编程】- 内存模型(针对JSR-133内存模型)篇
  • 原文地址:https://www.cnblogs.com/yangjingdian/p/7059050.html
Copyright © 2011-2022 走看看