[英]How to implement Markov's algorithm in Java?
我想实现在这里找到的马尔可夫算法,但我没能做到。 正如维基解释的那样,它是一个递归函数,用于替换语言中的模式。 例如
这些规则必须在以下文本上实施:
“我从 T S 买了一个 B 的 As。”
规则:
我想过创建两个类Rule和RuleContainer 。
Rule有 3 个属性:String from、String To 和 Boolean 终止
RuleContainer有一个动态列表,其中包含活动规则和逻辑函数 [我试图创建的那个]。
我已经考虑了 String.replace() 函数,并尝试将其实现为递归函数。
实现马尔可夫算法的最佳方法是什么?
暂时忽略终止规则部分,递归函数的基本形状将类似于以下内容:
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
结果,不再递归。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.