从0到1:使用python-telegram开发聊天统计工具chat_stats.py详解

从0到1:使用python-telegram开发聊天统计工具chat_stats.py详解

【免费下载链接】python-telegram Python client for the Telegram's tdlib 【免费下载链接】python-telegram 项目地址: https://gitcode.com/gh_mirrors/py/python-telegram

python-telegram是一个基于Telegram TDLib的Python客户端库,能够帮助开发者轻松构建与Telegram交互的应用程序。本文将详细介绍如何使用python-telegram开发一个实用的聊天统计工具chat_stats.py,通过分析聊天记录中的关键词频率,让你快速了解群聊热点话题和交流模式。

工具简介:chat_stats.py能做什么?

chat_stats.py是python-telegram项目中一个实用的示例程序,位于examples/chat_stats.py。它通过Telegram API获取指定聊天的历史消息,对消息文本进行分析,最终输出最常出现的关键词统计结果。这个工具不仅可以帮助群管理员了解群聊动态,还能为社交数据分析提供基础数据支持。

核心功能特点

  • 支持自定义消息获取数量(默认1000条)
  • 可配置显示最常见关键词的数量(默认30个)
  • 自动过滤短词(小于3个字符)和标点符号
  • 输出清晰的关键词频率统计结果

准备工作:环境搭建与依赖安装

在开始使用chat_stats.py之前,需要完成以下准备工作:

1. 克隆项目代码库

git clone https://gitcode.com/gh_mirrors/py/python-telegram
cd python-telegram

2. 安装必要依赖

项目根目录下提供了多种安装方式,推荐使用pip进行安装:

pip install .

如果需要开发环境,可安装额外依赖:

pip install -r tests/requirements.txt

3. 获取Telegram API凭证

要使用Telegram API,需要先获取api_id和api_hash:

  1. 访问 my.telegram.org/apps
  2. 登录你的Telegram账号
  3. 创建新应用,获取api_id和api_hash

代码解析:chat_stats.py的工作原理

让我们通过分析examples/chat_stats.py的核心代码,了解其工作原理。

主要代码结构

chat_stats.py主要包含三个部分:

  • 消息获取函数(retreive_messages)
  • 统计分析函数(print_stats)
  • 主程序入口(main)

1. 消息获取:retreive_messages函数

def retreive_messages(telegram, chat_id, receive_limit):
    receive = True
    from_message_id = 0
    stats_data = {}

    while receive:
        response = telegram.get_chat_history(
            chat_id=chat_id,
            limit=1000,
            from_message_id=from_message_id,
        )
        response.wait()

        for message in response.update["messages"]:
            if message["content"]["@type"] == "messageText":
                stats_data[message["id"]] = message["content"]["text"]["text"]
            from_message_id = message["id"]

        total_messages = len(stats_data)
        if total_messages > receive_limit or not response.update["total_count"]:
            receive = False

        print(f"[{total_messages}/{receive_limit}] received")

    return stats_data

这个函数通过调用telegram.client.Telegram类的get_chat_history方法(定义在telegram/client.py第465-493行),分页获取聊天历史消息。它会循环获取消息直到达到指定的接收限制或没有更多消息。

2. 统计分析:print_stats函数

def print_stats(stats_data, most_common_count):
    words = Counter()
    translator = str.maketrans("", "", string.punctuation)
    for message in stats_data.values():
        for word in message.split(" "):
            word = word.translate(translator).lower()
            if len(word) > 3:
                words[word] += 1

    for word, count in words.most_common(most_common_count):
        print(f"{word}: {count}")

这个函数使用collections.Counter来统计单词频率,首先去除标点符号并转为小写,然后过滤掉长度小于3的单词,最后输出出现频率最高的词语。

3. 主程序入口

主程序负责解析命令行参数、初始化Telegram客户端、登录账号、调用消息获取和统计分析函数:

if __name__ == "__main__":
    setup_logging(level=logging.INFO)

    parser = argparse.ArgumentParser()
    parser.add_argument("api_id", help="API id")  # https://my.telegram.org/apps
    parser.add_argument("api_hash", help="API hash")
    parser.add_argument("phone", help="Phone")
    parser.add_argument("chat_id", help="Chat ID")
    parser.add_argument("--limit", help="Messages to retrieve", type=int, default=1000)
    parser.add_argument("--most-common", help="Most common count", type=int, default=30)
    args = parser.parse_args()

    tg = Telegram(
        api_id=args.api_id,
        api_hash=args.api_hash,
        phone=args.phone,
        database_encryption_key="changeme1234",
    )
    tg.login()

    stats_data = retreive_messages(
        telegram=tg,
        chat_id=args.chat_id,
        receive_limit=args.limit,
    )

    print_stats(
        stats_data=stats_data,
        most_common_count=args.most_common,
    )

    tg.stop()

实战指南:运行chat_stats.py获取聊天统计

基本使用命令

python examples/chat_stats.py api_id api_hash phone chat_id --limit 500 --most-common 20

参数说明:

  • api_id: 你的Telegram API ID
  • api_hash: 你的Telegram API Hash
  • phone: 你的手机号码(带国家代码,如+8613800138000)
  • chat_id: 要分析的聊天ID
  • --limit: 可选,要获取的消息数量,默认1000
  • --most-common: 可选,要显示的最常见关键词数量,默认30

获取Chat ID的方法

要获取聊天ID,可以使用python-telegram提供的另一个示例程序get_me.py:

python examples/get_me.py api_id api_hash phone

运行后会列出你参与的聊天及其ID。

运行示例与输出解读

成功运行后,你将看到类似以下的输出:

[500/500] received
项目: 120
开发: 95
问题: 88
代码: 76
讨论: 65
...

这些数字表示对应关键词在聊天记录中出现的次数,帮助你快速了解群聊的主要话题。

高级技巧:自定义与扩展chat_stats.py

1. 修改过滤规则

如果你想调整过滤规则,可以修改print_stats函数中的过滤条件。例如,将最小单词长度从3改为2:

if len(word) > 2:  # 原为 len(word) > 3
    words[word] += 1

2. 添加停用词过滤

为了得到更有意义的统计结果,可以添加停用词过滤功能。修改print_stats函数:

def print_stats(stats_data, most_common_count):
    words = Counter()
    translator = str.maketrans("", "", string.punctuation)
    stop_words = {"the", "and", "is", "in", "to", "you", "of", "for", "on", "with", "at"}
    
    for message in stats_data.values():
        for word in message.split(" "):
            word = word.translate(translator).lower()
            if len(word) > 3 and word not in stop_words:
                words[word] += 1

    for word, count in words.most_common(most_common_count):
        print(f"{word}: {count}")

3. 保存结果到文件

要将统计结果保存到文件,可以修改print_stats函数,添加文件写入功能:

def print_stats(stats_data, most_common_count, output_file=None):
    # ... 原有代码 ...
    
    if output_file:
        with open(output_file, 'w') as f:
            for word, count in words.most_common(most_common_count):
                f.write(f"{word}: {count}\n")
    else:
        for word, count in words.most_common(most_common_count):
            print(f"{word}: {count}")

然后在main函数中添加一个命令行参数来指定输出文件。

常见问题与解决方案

Q1: 运行时提示"Authorization required"

A: 确保你已经正确调用了tg.login()方法,并且按照提示输入了Telegram发送的验证码。

Q2: 获取不到聊天历史消息

A: 检查chat_id是否正确,确保你的账号有权限访问该聊天。此外,Telegram API对获取历史消息有一定限制,可能无法获取非常早期的消息。

Q3: 程序运行缓慢

A: 尝试减少--limit参数的值,获取较少的消息进行分析。此外,第一次运行时会初始化数据库,可能较慢,后续运行会加快。

总结:利用python-telegram探索更多可能

通过本文的介绍,你已经了解了如何使用python-telegram开发一个简单但实用的聊天统计工具。这个工具只是python-telegram capabilities的冰山一角,基于这个强大的库,你还可以开发更多有趣的应用,如:

  • 自动回复机器人
  • 消息监控与过滤工具
  • 聊天备份与导出工具
  • 基于聊天内容的智能分析系统

如果你想深入了解python-telegram的更多功能,可以查阅项目文档docs/telegram.rst,或研究其他示例程序,如examples/echo_bot.pyexamples/clear_group_messages.py

现在就动手尝试使用chat_stats.py分析你的Telegram聊天记录,发现隐藏在消息中的有趣模式吧!

【免费下载链接】python-telegram Python client for the Telegram's tdlib 【免费下载链接】python-telegram 项目地址: https://gitcode.com/gh_mirrors/py/python-telegram

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值