Подсчет времени чтения статьи на PHP

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

Так вот, оказывается, произвести сам подсчет времени чтения — задача не сложная.

Например, скорость чтения диктора зависит от его индивидуальных особенностей и текста: жанра, подачи и интонирования. Согласно отраслевым стандартам средняя скорость дикторской подачи составляет порядка 130 слов в минуту.

Однако, обычные люди читают текст гораздо медленнее, чем профессиональные дикторы.

При разработке класса для подсчета времени чтения статьи я использовал константное значение, которое равняется 200 словам в минуту. Дополнительно класс вырезает все HTML-теги.

Сам класс можете увидеть ниже. Все довольно просто и не требует более детального объяснения.

/**
 * Class readTimeEstimate
 * Подсчет времени чтения статьи
 */
class readTimeEstimate
{
    /**
     * Средняя скорость чтения слов в минуту
     */
    const WORDS_PER_MINUTE = 200;

    const STR_MINUTE = 'мин.';
    const STR_SECOND = 'сек.';

    private $minutes;
    private $seconds;

    /**
     * readTimeEstimate constructor.
     * @param string $str
     */
    function __construct(string $str)
    {
        $wordCount = $this->wordCount(strip_tags($str));

        $this->minutes = floor($wordCount / static::WORDS_PER_MINUTE);
        $this->seconds = floor($wordCount % static::WORDS_PER_MINUTE / (static::WORDS_PER_MINUTE / 60));
    }

    /**
     * @return string
     */
    public function __toString(): string
    {
        return ($this->minutes == 0)    ? $this->seconds . ' ' . static::STR_MINUTE
                                        : $this->minutes . ' ' .
                                            static::STR_MINUTE . ', ' .
                                            $this->seconds . ' ' .
                                            static::STR_SECOND;
    }

    /**
     * @return float
     */
    public function getMinutes(): float
    {
        return $this->minutes;
    }

    /**
     * @return float
     */
    public function getSeconds(): float
    {
        return $this->seconds;
    }

    /**
     * @param string $str
     * @return int
     */
    protected function wordCount(string $str): int
    {
        $v = preg_split('/\W+/u', $str, -1, PREG_SPLIT_NO_EMPTY);
        return count($v);
    }
}

А еще для удобства разместил данный класс на гитхабе.

Всем спасибо за внимание.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: