我试图将this Stack Overflow answer中的Viterbi算法的Python实现转换为Ruby。完整的脚本可以在这个问题的底部找到我的评论。在
不幸的是,我对Python知之甚少,所以翻译比我想的要难。不过,我还是取得了一些进展。现在,唯一能让我完全融化的是这一行:
prob_k, k = max((probs[j] * word_prob(text[j:i]), j) for j in range(max(0, i - max_word_length), i))
有人能解释一下它在做什么吗?在
下面是完整的Python脚本:
^{pr2}$
您正在查看list comprehension。在
扩展版本如下所示:
我希望这有助于解释。如果没有,可以编辑你的问题,并指出你不理解的陈述。在
这里有一个工作的ruby实现,以防其他人也能使用它。我翻译了上面讨论的列表理解,我认为这是不可读的ruby的适当级别。在
主要的麻烦是python和ruby(open/closed interval)中不同的范围定义。这个算法非常快。在
使用可能性而不是概率可能会比较有利,因为重复的乘法可能会导致下溢和/或用较长的单词累积浮点错误。在
相关问题 更多 >
编程相关推荐