ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java:如何考虑建立马尔可夫链?

2019-06-14 04:49:09  阅读:325  来源: 互联网

标签:java data-structures class-design model


我有一个程序,我正在尝试制作马尔可夫文本生成器.我计划以设定的间隔分割一些文本,然后将其存储到一个类中.我不知道如何解决的问题是如何处理命名我将要进行的类的实例.我打算在for循环中生成实例.用户将传递该方法一定量的文本(其长度事先未知).下面的伪代码:

    create vector for sets and tail letter;
for (int c = 0; c < text.length; c++) {
    Check to make sure overflow doesnt happen;
    Create instance of set named c;
    store set and tailLetter into vector;
}

public class set {
    String characters;
    char tailLetter;
}

如果不够清楚,我很抱歉.我正在自学Java,这是我在这里的第一篇文章.

解决方法:

如果您正在学习Java,我建议您首先关注如何使用Java的类和方法对问题进行建模.

马尔可夫链是种子文本的模型或统计细节,对吧?使用它来模拟文本,它通常描述每个单词在每个单词后面跟随的频率. (通常你会在文字边界上分割文字).感觉它需要一堂课;它可能被称为MarkovChain.

在MarkovChain类中,您需要一些东西来保存文本中出现的每个单词,并将该单词映射到文本中的其他单词,以及其他单词的频率计数.

假设这个词是’和’.在文本中,’和’后面跟着“the”四次,然后是“then”3次.所以你需要一些数据结构来保存这样的东西:

 and --> 
        the (4)
        then (3) 

一种方法是使用ArrayList来保存所有单词,然后使用Map< T1,T2>.它保存了单词与后续单词频率之间的关系.
在这种情况下,T1可能是一个字符串,T2可能是对的ArrayList – 字符串和该字符串的(整数)计数.

但是等等,现在你不需要基数ArrayList<>存储单词,因为它们只是地图中的键.

…等等.下一步是弄清楚如何填充该数据结构.这可能是一个内部(私有)方法,当调用者使用种子文本实例化MarkovChain类时会调用该方法.

可能你也希望MarkovChain类暴露另一个方法,一个公共的方法,调用者在想要从链中生成一些随机序列时调用,依赖于基于频率计数的概率.

这只是思考问题建模的一种方式.

无论如何,在编写代码之前,我会专注于建模/设计练习.

标签:java,data-structures,class-design,model
来源: https://codeday.me/bug/20190614/1237345.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有