Python计算文章阅读时长

在逛博客的时候,常看到该篇文章的阅读时间,你是否曾好奇一篇文章读完需要多久?是5分钟的短文,还是30分钟的长篇巨著?在信息爆炸的时代,快速判断阅读时间对我们来说至关重要,它能帮助我们更好地规划时间,提高阅读效率。

下面这个基于 Python 的小工具可以简单地计算一篇文章的阅读时间。计算流程如下:

  1. 统计文本量:首先,统计文章中的"字数"(中文)和"词数"(英文)。对于中文,通常统计非空白字符序列;对于英文,则统计单词。这里主要通过正则表达式 \S+ (匹配一个或多个非空白字符)来实现通用统计,主要适合处理那些中英文混合且以中文为主的文章。
  2. 设定阅读速度:默认情况下,以每分钟 200 个字/词的速度进行计算,当然也可以根据自己的阅读速度进行调整。
  3. 计算时间:统计出的总字数/词数除以每分钟的阅读速度,就能得出总的阅读时间。为了增加阅读时间上的冗余,分钟会向上取整。
python 复制代码
import re
import math

def calculate_reading_time(text, words_per_minute=200):
    """
    计算一篇文章的阅读时间。

    Args:
        text (str): 待计算阅读时间的文章内容。
        words_per_minute (int): 每分钟阅读的词/字数(默认值200)。
                                这可以根据语言和内容进行调整。

    Returns:
        tuple: 包含阅读分钟数(整数)和阅读秒数(整数)的元组。
               如果文章为空,则返回 (0, 0)。
    """
    if not text:
        return 0, 0

    # 1. 统计字数/词数
    # 对于中文,通常直接统计字符数(去除空格和标点符号可能更准确)。
    # 对于英文,通常统计单词数。
    # 这里我们采用一种通用方法:使用正则表达式匹配非空白字符序列来近似"词"或"字"。
    # 这样可以处理中英文混合的情况,并忽略大部分标点符号和多余的空格。
    words = re.findall(r'\S+', text)
    word_count = len(words)

    # 2. 计算总秒数
    total_seconds = (word_count / words_per_minute) * 60

    # 3. 向上取整计算分钟数
    minutes = math.ceil(total_seconds / 60)
    seconds = int(total_seconds % 60)

    return minutes, seconds

# --- 示例用法 ---
if __name__ == "__main__":
 # 实际上,文本量应该比以下的例子还要大,这里只是做个
    chinese_text = """
    这是一篇测试文章,用于计算阅读时间。它包含一些汉字和一些标点符号。
    这是一篇测试文章,用于计算阅读时间。它包含一些汉字和一些标点符号。
    这是一篇测试文章,用于计算阅读时间。它包含一些汉字和一些标点符号。
    这是一篇测试文章,用于计算阅读时间。它包含一些汉字和一些标点符号。
    这是一篇测试文章,用于计算阅读时间。它包含一些汉字和一些标点符号。
    这是一篇测试文章,用于计算阅读时间。它包含一些汉字和一些标点符号。
    这是一篇测试文章,用于计算阅读时间。它包含一些汉字和一些标点符号。
    这是一篇测试文章,用于计算阅读时间。它包含一些汉字和一些标点符号。
    这是一篇测试文章,用于计算阅读时间。它包含一些汉字和一些标点符号。
    这是一篇测试文章,用于计算阅读时间。它包含一些汉字和一些标点符号。
    这是一篇测试文章,用于计算阅读时间。它包含一些汉字和一些标点符号。
    这是一篇测试文章,用于计算阅读时间。它包含一些汉字和一些标点符号。
    这是一篇测试文章,用于计算阅读时间。它包含一些汉字和一些标点符号。
    这是一篇测试文章,用于计算阅读时间。它包含一些汉字和一些标点符号。
    这是一篇测试文章,用于计算阅读时间。它包含一些汉字和一些标点符号。
    """
    english_text = "This is a test article to calculate reading time. It contains some English words and punctuation. Hopefully, this example helps you understand the algorithm."
    mixed_text = "Hello 你好, this is a mixed text. 这是一段中英文混合的文本,用于测试。How long would it take to read?"
    short_text = "短文。"
    empty_text = ""

    print(f"中文文章阅读时间:{calculate_reading_time(chinese_text)}")
    print(f"英文文章阅读时间:{calculate_reading_time(english_text)}")
    print(f"中英文混合文章阅读时间:{calculate_reading_time(mixed_text)}")
    print(f"短文阅读时间:{calculate_reading_time(short_text)}")
    print(f"空文章阅读时间:{calculate_reading_time(empty_text)}")

    # 调整阅读速度
    print(f"\n以每分钟250字计算中文文章阅读时间:{calculate_reading_time(chinese_text, words_per_minute=250)}")

你还可以打开一个文件,然后读取所有的内容,通过该方法计算阅读时长。例如下面的这个例子。

python 复制代码
with open("run.py", "r", encoding="utf-8") as f:
        article_content = f.read()
        minutes, seconds = calculate_reading_time(article_content)
        print(f"\n从文件 'run.py' 读取的文章阅读时间:{minutes} 分 {seconds} 秒")
相关推荐
WXX_s5 分钟前
【OpenCV篇】OpenCV——03day.图像预处理(2)
人工智能·python·opencv·学习·计算机视觉
CoovallyAIHub7 分钟前
避开算力坑!无人机桥梁检测场景下YOLO模型选型指南
深度学习·算法·计算机视觉
YouQian77211 分钟前
问题 C: 字符串匹配
c语言·数据结构·算法
yanxing.D16 分钟前
408——数据结构(第二章 线性表)
数据结构·算法
艾莉丝努力练剑1 小时前
【LeetCode&数据结构】二叉树的应用(二)——二叉树的前序遍历问题、二叉树的中序遍历问题、二叉树的后序遍历问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
YuTaoShao1 小时前
【LeetCode 热题 100】51. N 皇后——回溯
java·算法·leetcode·职场和发展
1 小时前
3D碰撞检测系统 基于SAT算法+Burst优化(Unity)
算法·3d·unity·c#·游戏引擎·sat
Jackilina_Stone1 小时前
【论文|复现】YOLOFuse:面向多模态目标检测的双流融合框架
人工智能·python·目标检测·计算机视觉·融合
Tony沈哲1 小时前
OpenCV 图像调色优化实录:基于图像金字塔的 RAW / HEIC 文件加载与调色实践
opencv·算法
双叶8362 小时前
(Python)文件储存的认识,文件路径(文件储存基础教程)(Windows系统文件路径)(基础教程)
开发语言·windows·python