我想实现马尔科夫的算法here,但我还没能做到。正如维基解释的那样,它是一种递归函数,可替代语言中的模式。例如
这些规则必须在以下文字中实施:
"我从T S买了一个B of。"
规则:
我考虑创建两个类规则和 RuleContainer 。
规则有3个属性:String from,String To和Boolean terminateating
RuleContainer 有一个包含活动规则和逻辑函数的动态列表[我是一个'试图创造]。
我已经考虑了String.replace()函数,并尝试将其实现为递归函数。
实施马尔可夫算法的最佳方法是什么?
答案 0 :(得分:0)
忽略终止规则部分一秒钟,递归函数的基本形状如下:
String markov(String input, List<Rule> rules) {
// find the first matching rule, apply it and recurse
for (Rule rule : rules) {
if (rule.matches(input)) {
String temp = rule.apply(input);
return markov(temp, rules);
}
}
// no rule matched so just return the input text
// - this is the terminating case for the recursion
return input;
}
这将继续调用自己,直到没有规则匹配当前输入字符串,此时它将展开将结果一直返回到调用堆栈。您只需将以下方法添加到Rule
类:
public boolean matches(String input) { ... }
public String apply(String input) { ... }
这些可能只是简单的String
函数(contains
,replaceFirst
等),或者您可以使用java.util.regex.Pattern
和java.util.regex.Matcher
来保存重新计算recglar每次表达。
对于终止规则,如果匹配的规则是终止规则,则直接返回temp
结果,而不再进一步递归。