编程语言
首页 > 编程语言> > Java:如何考虑建立马尔可夫链?

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

作者:互联网

我有一个程序,我正在尝试制作马尔可夫文本生成器.我计划以设定的间隔分割一些文本,然后将其存储到一个类中.我不知道如何解决的问题是如何处理命名我将要进行的类的实例.我打算在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