将 Markov Chain Python 脚本转换为 PHP.不确定 PHP 中的一些等效函数是什么


Converting Markov Chain Python Script to PHP. Not sure of what some of the equivalent functions are in PHP

我已经看到这个马尔可夫链乱码检测器是为了回答Stackoverflow上的另一个问题而编写的,我想将其转换为PHP,我不是在寻找人为我做这件事的人,但我对我不了解的Python代码部分感到困惑。我看过python文档,但它让我更加困惑。

  1. 什么是 PHP 等价物的收益率?

    def ngram(n, l):
    """ Return all n grams from l after normalizing """
    filtered = normalize(l)
    for start in range(0, len(filtered) - n + 1):
        yield ''.join(filtered[start:start + n])
    
  2. xrange到底是什么?有一个PECL扩展,但是我更喜欢纯PHP实现?这可能吗?

    counts = [[10 for i in xrange(k)] for i in xrange(k)]
    for i, row in enumerate(counts):
    s = float(sum(row))
    for j in xrange(len(row)):
        row[j] = math.log(row[j] / s)
    
  3. 断言有什么作用?这相当于抛出异常吗?

    assert min(good_probs) > max(bad_probs)
    
  4. Python Pickle,本质上是序列化吗?

    pickle.dump({'mat': counts, 'thresh': thresh}, open('gib_model.pki', 'wb'))
    

感谢您的任何帮助。


编辑:错别字。

1. 什么是 PHP 等价物的收益?

在 PHP 中没有等同于yieldyield 用于生成器函数 - 返回结果但保留其状态的特殊函数类。

例如:

def simple_generator(start=0, end=100):
    while start < end:
        start += 1
        yield start
gen = simple_generator()
gen() # 1
gen() # 2
gen() # 3

你可以在PHP中做类似的事情,如下所示:

class simple_generator {
    private $start;
    private $end;
    function __construct($start=0, $end=100) {
        $this->start = $start;
        $this->end = $end;
    }
    function __call() {
        if($this->start < $this->end) {
            $this->start++;
            return $start;
        }
    }
}
gen = simple_generator();
gen(); // 1
gen(); // 2

2. 究竟什么是xrange?

xrange的行为与range类似,但使用生成器函数。这是处理非常大的列表或内存紧张时的性能调整。

3. 断言有什么作用?它相当于抛掷和异常吗?

是的。当心 - 它与PHP的assert不同 - 这是攻击软件的一个非常有趣的载体。

4. 蟒蛇泡菜,本质上是序列化吗?

是的。

  1. xrange 返回一个迭代器。这与返回列表的范围不同。两者的行为方式大多相同,因此只需像使用范围一样使用它。

  2. 是的

  3. 是的