← 返回列表

Telegram机器人快捷指令大全 文本相似度计算:如何过滤Telegram教程中的重复刷屏消息?

分类:telegram教程发布于:2026-08-27

telegram搜

🧭 痛点:为什么 Telegram 群组需要文本相似度过滤?

在 Telegram 群组中,重复发布广告、链接、引流文案和教程内容,会快速挤占聊天窗口,也会让真正有价值的讨论被刷屏消息淹没。

最简单的去重方式是比较两条消息是否完全相同,但实际刷屏者经常通过增加空格、替换标点、插入表情或修改一个链接参数来绕过规则,因此需要引入文本相似度计算

本文以 Telegram 群组机器人为场景,介绍从文本预处理、相似度算法、阈值设置到 Bot API 接入的完整思路,重点是降低误删,而不是单纯追求更激进的拦截。

🎯 第一步:先定义什么叫“重复刷屏”

文本相似并不等于恶意刷屏。例如管理员连续发布几次活动通知,或者用户引用同一段规则进行提问,都可能产生高相似度内容,所以系统不能只依赖一个分数做决定。

更稳妥的判断方式是组合内容相似度、发送频率、发送者身份、消息时间窗口和链接特征,形成分级处理策略。

Telegram机器人快捷指令大全 📌 建议先确定过滤边界

通常可以把同一群组内、同一用户在短时间内发送的近似文本定义为高风险对象;对于管理员、认证账号、置顶公告和白名单链接,则应当降低处理等级或直接跳过。

如果群组规模较大,还可以设置“全群相似”和“单用户相似”两套规则,避免一个正常公告被不同用户引用时全部触发删除。

window_seconds = 300
minimum_text_length = 12
exact_duplicate_score = 1.00
review_score_range = 0.80 - 0.92
auto_action_score = 0.93
max_same_user_messages = 5

Telegram机器人快捷指令大全 上面的数值只是初始配置,不应直接视为通用标准。教程群、交易群、资源群和闲聊群的文本重复率差异很大,最终阈值需要通过真实样本校准。

🧹 第二步:对 Telegram 消息进行归一化处理

Telegram机器人快捷指令大全 相似度算法比较的是文本特征,而不是用户看到的视觉效果,因此第一步必须统一文本格式。建议依次处理 Unicode 字符、大小写、空白符、零宽字符、重复标点和链接跟踪参数。

中文通常没有天然空格,不能只依赖英文分词;对于中文教程,字符级三元组或四元组往往比简单的空格分词更加稳定。

import re
import unicodedata

def normalize_text(text: str) -> str:
    text = unicodedata.normalize("NFKC", text or "")
    text = text.lower()
    text = re.sub(r"[\u200b-\u200f\uFEFF]", "", text)
    text = re.sub(r"\s+", " ", text).strip()
    text = re.sub(r"[!!。.,,;;::、]+", " ", text)
    return text

def char_ngrams(text: str, size: int = 3) -> set:
    return {text[i:i + size] for i in range(max(0, len(text) - size + 1))}

处理链接时不要把所有 URL 直接删除,因为不同域名或路径可能代表不同风险。更安全的做法是保留域名和主要路径,仅删除常见的 utm、ref 等跟踪参数。

此外,Telegram 消息可能同时包含正文、媒体说明文字、按钮文本或转发信息,实际接入时应明确比较 text 与 caption,避免把不同类型的字段混在一起。

⚙️ 第三步:选择适合的文本相似度算法

1. 精确哈希:处理完全重复消息

Telegram机器人快捷指令大全 归一化后的文本可以生成 SHA-256 或其他稳定哈希值。如果两个哈希完全一致,说明它们在当前规则下是相同内容,适合进行快速去重

精确哈希的优点是速度快、资源消耗低,缺点是无法识别“欢迎加入本群!”与“欢迎加入本群!!”这类轻微变化。

2. Jaccard 相似度:适合比较词集合或字符片段

Jaccard 的计算方式是交集大小除以并集大小。将中文切成字符 n-gram 后,即使刷屏者改变标点或插入少量文字,仍然可以保留较高的相似分数。

3. 加权组合:比单一算法更可靠

Telegram机器人快捷指令大全 生产环境可以同时计算字符 n-gram Jaccard、编辑距离相似度和 URL 域名一致性,再通过加权方式得到最终分数。这样既能识别复制粘贴,也能减少短句和模板文本造成的误判。

from difflib import SequenceMatcher

def jaccard_score(a: set, b: set) -> float:
    if not a and not b:
        return 1.0
    if not a or not b:
        return 0.0
    return len(a & b) / len(a | b)

def similarity_score(text_a: str, text_b: str) -> float:
    a = normalize_text(text_a)
    b = normalize_text(text_b)

    if a == b:
        return 1.0

    grams_a = char_ngrams(a, 3)
    grams_b = char_ngrams(b, 3)
    gram_score = jaccard_score(grams_a, grams_b)
    sequence_score = SequenceMatcher(None, a, b).ratio()

    return 0.65 * gram_score + 0.35 * sequence_score

对于只有一两个词的短消息,不建议直接使用模糊匹配,因为“教程”“下载”“求助”等常见词很容易被误判。可以设置最小长度,或要求同时满足高相似度和重复频率两个条件。

电报精准找群黑科技提示:

由于 Telegram 官方搜索对中文支持极差,很多优质的推广、技术和资源群组隐藏极深。如果你正在寻找相关的活跃社群,强烈推荐使用本站首页的 【TTSO - Telegram 智能搜索 Bot】。作为目前最好用的电报综合搜索导航,只需输入关键词,即可秒级触达数十万个精选 TG 中文群组、资源频道。一键直达,帮你节省 90% 的找群时间!

🤖 第四步:接入 Telegram Bot 的消息处理流程

机器人收到新消息后,可以按照“提取文本、归一化、查找候选、计算分数、执行动作”的顺序处理。候选消息不应是整个数据库,而应限制在同一群组和时间窗口内,以降低查询成本。

如果机器人需要读取群组中的普通消息,应检查 BotFather 的隐私模式设置,并按照群组规则授予必要的管理员权限。建议只授予删除消息等必需权限,不要无条件扩大数据访问范围。

🔍 推荐的决策顺序

先检查发送者是否在白名单,再检查消息长度和内容类型;随后优先查询精确哈希,只有未命中时才执行模糊相似度计算。

对于高分重复消息,可以先删除并记录原因;对于中间分数消息,更适合标记、提醒或进入人工复核,而不是立即禁言。

if sender_is_whitelisted(message):
    action = "allow"
elif len(normalize_text(message.text)) < minimum_text_length:
    action = "allow"
elif exact_hash_exists(chat_id, normalized_hash):
    action = "review_or_delete"
else:
    score = compare_with_recent_messages(chat_id, message, window_seconds)
    if score >= auto_action_score:
        action = "delete_and_log"
    elif score >= 0.80:
        action = "mark_for_review"
    else:
        action = "allow"

执行删除、警告或禁言时,应考虑 Telegram Bot API 的权限、消息类型和接口限制。对于高流量群组,建议使用队列、重试和退避机制,避免因为瞬时刷屏触发大量请求而造成机器人自身限流。

📊 第五步:用真实数据调整阈值和策略

部署初期建议先开启“观察模式”,只记录相似分数、群组、发送者、时间间隔和最终人工判断,不自动删除。至少积累一批正常消息与真实刷屏消息后,再计算准确率、召回率和误删率

如果误删成本较高,应优先提高准确率,只有分数极高且重复次数明显时才自动处理。相反,广告群或资源群更关注召回率,可以对同一用户的连续重复消息增加频率惩罚。

🧪 建议采用分级动作

低风险消息保持原样;中风险消息可以发送一次提示并进入审核队列;高风险消息才执行删除,并在日志中保存触发规则和相似分数。

日志不必长期保存完整正文,可以保存哈希、截断文本、消息 ID 和规则编号,并设置自动过期时间。这样既方便追溯,也能减少不必要的隐私数据留存

mode = "shadow"
log_retention_days = 7
candidate_window_seconds = 300
min_ngrams_for_fuzzy_match = 5
high_confidence_score = 0.93
medium_confidence_score = 0.80
auto_delete_requires_repeated_count = 2

真正成熟的过滤器还应支持白名单、黑名单、管理员豁免、关键词例外和人工撤销。规则发生变化时,要保留版本号,便于判断某次误删究竟来自文本预处理、阈值还是权限配置。

✅ 实战结论:不要把“相似”直接等同于“违规”

文本相似度最适合做候选筛选和风险评分,而不是单独承担最终裁决。相同文案可能是正常公告,也可能是恶意广告,关键要结合发送频率、链接目标、账号行为和群组上下文。

一套可维护的 Telegram 去重系统,通常遵循“精确哈希快速拦截、字符 n-gram 识别变体、时间窗口控制范围、分级动作降低误伤、人工数据持续校准”的流程。

从工程角度看,先用观察模式验证规则,再逐步开放自动删除,是比一次性上线强拦截更安全的方案。

❓ 常见问题解答(FAQ)

Q1:文本相似度达到多少才应该删除?

没有适用于所有群组的固定阈值。可以从 0.93 左右开始观察,但必须同时考虑最小文本长度、重复次数、发送者身份和时间间隔,并通过人工样本持续调整。

Q2:为什么两条看起来一样的中文消息分数不高?

常见原因包括全角半角字符不同、隐藏零宽字符、表情差异、换行差异或链接参数不同。应先做好 Unicode 归一化、空白清理和字符 n-gram 处理,再检查算法输入是否包含正文与 caption 的差异。

Q3:Telegram 机器人可以读取群组的所有消息吗?

这取决于机器人的隐私模式、群组权限和消息类型。需要读取普通群消息进行审核时,应由群组管理员在明确知情的前提下配置必要权限,并遵守当地隐私和平台规则。

Q4:如何减少正常公告被误删?

为管理员、认证账号、置顶消息和官方域名建立白名单,并优先采用“提醒或人工审核”而非直接删除。对于固定模板公告,还可以增加公告类型标记,让系统区别于普通营销刷屏。

Q5:相似度过滤能否完全识别垃圾消息?

Telegram机器人快捷指令大全 不能。它主要解决内容重复问题,无法单独判断账号信誉、恶意链接、图片文字或复杂变形内容,因此最好与频率限制、链接安全检查、人工审核和群组权限策略组合使用

telegram中文搜索群组
Telegram搜索入口客服ID@TTSO联系