Преобразование марковского цепного Python-скрипта в PHP.Не уверен, что некоторые из эквивалентных функций в PHP - PullRequest
0 голосов
/ 25 октября 2011

Я видел этот детектор марковской цепочки, написанный в ответ на другой вопрос о 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? Это эквивалент броска исключения?

    assert min(good_probs) > max(bad_probs)
    
  4. Python Pickle, это по сути сериализация?

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

Спасибо за любую помощь.


Редактировать: опечатки.

Ответы [ 2 ]

4 голосов
/ 25 октября 2011

1.Что такое PHP-эквивалент yield?

В PHP нет эквивалента yield.yield используется в функциях генератора - особый класс функций, который возвращает результат, но сохраняет его состояние.

Например:

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.Что делает assert?Это эквивалент броска и исключения?

Да.Осторожно - это не то же самое, что PHP assert - это действительно забавный вектор для атак на ваше программное обеспечение.

4.Python Pickle, это по существу сериализация?

Да.

1 голос
/ 25 октября 2011
  1. xrange возвращает итератор.Это отличается от диапазона, который возвращает список.Оба ведут себя в основном одинаково, поэтому просто используйте его так, как вы используете диапазон.

  2. Да

  3. Да

...