2011-04-28 80 views
4

我有一个程序,我正在试图为一个马尔可夫文本生成器。我打算按设定的时间间隔分割一些文本,然后将其存储到一个类中。我不知道如何解决的问题是如何处理我将要创建的类的实例。我正计划在for循环中生成实例。用户将传递一定数量的文本(其长度事先不知道)。下面的伪代码:Java:如何思考建模马尔可夫链?

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,这是我在这里的第一篇文章。

+0

你的意思是“将文本存储到类中”是什么意思?另外,你的意思是“你将要制作的课程的实例”是什么?你打算*动态生成Java代码并在运行时编译它*?我想说这可能对马尔可夫链类有点过分。 – Cheeso 2011-04-28 21:37:25

+0

我将根据用户输入的整数将文本拆分为块。我需要存储这些块,大块后面的字母,以及文本中出现块和字母的频率。由于我不知道传递的文本的长度,因此我无法为每个可能创建的实例创建名称。我现在仍然在纸上工作,但我遇到了障碍 – Gilbrilthor 2011-04-28 22:03:28

+0

啊,好的,那么你有两项任务。首先是如何设计数据结构来保存所有信息(块和频率等),第二是如何填充给定种子文本的数据结构。你想要某种“集合类”来保存数据http://download.oracle.com/javase/tutorial/collections/index.html;您将不需要动态生成类或变量的名称。为了在Java中有效,你不仅要熟悉语法(curlies,分号等),而且还要熟悉已有的构建块,比如Java内置类库中的类。 – Cheeso 2011-04-28 23:25:03

回答

4

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

马尔可夫链是种子文本的模型或统计阐述,对吗?使用它来模拟文本,通常会描述每个单词跟随每个单词的频率。 (通常你会将文本分割成单词边界)。这感觉就像需要一堂课;它可能被称为MarkovChain

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

假设单词是'和'。在文中,“和”后面是“四次”,“后面”三次。所以,你会需要一些数据结构来保存这样的事情:

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

的一种方式做,这是使用ArrayList来存储所有的话,那么Map<T1,T2>保存和之后的高频词之间的关系话。 在这种情况下,T1可能是一个字符串,而T2可能是一个ArrayList对 - 一个字符串和该字符串的(整数)个数。

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

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

也许您还希望MarkovChain类公开另一个方法,即当调用者想要从链中生成一些随机序列时调用另一个方法,依赖基于频率计数的概率。

...

这只是一种思考问题建模的方法。

无论如何,我会在编写代码之前关注该建模/设计练习。

3

难道你不能使用Map<String, Set>其中的密钥是生成的名称吗?

0

您可以使用ArrayList来管理实例。我更喜欢Map的想法,所以你可以动态设置名称,而不是试图通过索引号访问实例。

0

我看不出名字的一点:

  • 如果他们只是说“设置”的对象将有调试一些独特的字符串,默认toString()实施会给你的。

  • 如果您特别需要查看这些'set'对象,那么数字标识符或序列号会更好。

如果你解释了名称的用途,以及你打算如何使用它们,也许我们可以给你更好的建议。

+0

我打算随机调用一大块文本,并将分配给该块的尾字母中的一个随机添加到字符串中。然后,我将读取该字符串的结尾,搜索块以查找匹配,并且当我找到一个块时,我将随机分配与所发现的块相关联的另一个尾部字母。这里是一个网站,可能可以解释它比我更好: [链接](http://www.siliconcommandergames.com/MarkovNameGenerator.htm) – Gilbrilthor 2011-04-28 22:06:39