脚本如何过滤违规文本

wen 实用脚本 25

本文目录导读:

脚本如何过滤违规文本

  1. 关键词黑名单匹配(基础方案)
  2. 正则表达式模糊匹配(增强版)
  3. 基于 NLP 的语义过滤(高级方案)
  4. 混合过滤策略(推荐方案)
  5. 其他实用技巧
  6. 建议与注意事项

针对脚本过滤违规文本的需求,需要根据违规类型(如色情、暴力、政治敏感、广告、辱骂等)和使用场景(实时聊天、用户评论、内容发布等)选择合适的过滤方案。

以下是几种主流的过滤策略及对应的脚本实现思路(以 Python 为例,但逻辑通用):

关键词黑名单匹配(基础方案)

最直接的方式,适用于过滤明确的辱骂、违禁词,但容易误伤(如“程序”包含“程序猿”中的“程序”)或被变体绕过(如“牛B”写成“牛B”)。

实现步骤:

  1. 准备一个违规关键词列表(blacklist.txt)。
  2. 将用户输入文本与列表进行匹配。
  3. 命中则替换或拒绝。

Python 脚本示例:

import re
def load_blacklist(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        return [line.strip() for line in f if line.strip()]
def filter_by_keyword(text, blacklist):
    for keyword in blacklist:
        # 忽略大小写和部分特殊字符(如*、空格)
        pattern = re.escape(keyword).replace(r'\*', '.*?')
        if re.search(pattern, text, re.IGNORECASE):
            return True  # 违规
    return False
blacklist = load_blacklist('blacklist.txt')
user_input = input("输入文本: ")
if filter_by_keyword(user_input, blacklist):
    print("【违规】包含敏感词")
else:
    print("【通过】")

缺点: 无法处理拼音、谐音(“草泥马”)、缩写(“cnm”)、拆字(“***”)等变体。

正则表达式模糊匹配(增强版)

利用正则匹配变体,允许中间插入特殊字符、空格或替换同音字。

示例模式:

  • 匹配中间带空格或特殊符号:(f\s*u\s*c\s*k)[\\s\\*_\\-]
  • 匹配部分同音字:[你妳]|[草操艹]

脚本示例:

import re
# 预编译正则规则集
patterns = [
    r'f\s*u\s*c\s*k',          # f**k 变体
    r'[草操艹]\s*[泥尼你]马',  # 草泥马变体
    r'[他她它]妈[的底]?',       # 他妈/她妈的
    r'\b(死|杀|打)\s*[人]?',    # 带空格的暴力词
]
def regex_filter(text):
    for pattern in patterns:
        if re.search(pattern, text, re.IGNORECASE):
            return True
    return False

基于 NLP 的语义过滤(高级方案)

对于“大语言模型”或“智能客服”场景,关键词无法捕捉不带关键词的恶意内容(如“我建议你去死”不含关键词但违规),需要利用 NLP 模型进行意图识别。

常用方法:

  • 文本分类模型:使用 BERT、LSTM 等模型,训练一个“违规/非违规”二分类器。
  • 相似度匹配:将用户输入与现有违规样本进行相似度比对(使用 Sentence-BERT)。

Python 实现(使用预训练分类器):

from transformers import pipeline
# 加载一个针对有毒内容(toxic)的预训练模型
classifier = pipeline("text-classification", 
                       model="unitary/toxic-bert")
def nlp_filter(text):
    result = classifier(text)[0]
    # 假设模型的标签是 'toxic' 且得分 > 0.7 判定为违规
    if result['label'] == 'toxic' and result['score'] > 0.7:
        return True
    return False
print(nlp_filter("You are an idiot"))  # 输出 True

混合过滤策略(推荐方案)

现实中通常组合使用以上方法,形成多级过滤:

  1. 第一级:本地关键词白名单/黑名单(极快,100%拦截明显违规词)
  2. 第二级:正则变体匹配(处理变体绕过)
  3. 第三级:NLP 语义模型(处理反讽、隐晦表达,但速度较慢)
  4. 第四级:人工审核队列(对无法确定的内容提交后台审核)

其他实用技巧

1 Unicode 规范化

用户可能使用全角、半角、特殊 Unicode 字符绕过。А(西里尔字母)冒充 A

import unicodedata
text = unicodedata.normalize('NFKC', user_text)  # 将全角转半角,统一字形

2 拼音、谐音检测

可以建立一个拼音到违规词的映射,将用户输入的拼音转换后再匹配。

from pypinyin import lazy_pinyin
def pinyin_check(text):
    pinyin_list = lazy_pinyin(text)  # ['ni', 'ma', 'bi']
    combined = ''.join(pinyin_list)
    if 'nima' in combined or 'cao' in combined:
        return True
    return False

3 频率与时间模式检测

如果用户在短时间内反复发送相似内容(刷屏、广告),即使内容不违规,可能也属于违规行为。

from collections import defaultdict
user_log = defaultdict(list)
def check_frequency(user_id, text, timestamp):
    # 检查 30 秒内是否发送超过 5 条相似内容
    recent = [msg for msg in user_log[user_id] 
              if timestamp - msg['time'] < 30]
    if len(recent) >= 5:
        # 进一步检查文本相似度
        similar_count = sum(1 for msg in recent 
                           if text_similarity(msg['text'], text) > 0.8)
        if similar_count >= 3:
            return True
    return False

建议与注意事项

  1. 误判处理:不要直接删除违规文本,建议用 替换或提示“内容未通过审核”。
  2. 词库维护:定期更新黑名单和白名单(合法”词如“操作系统”不能因包含“操”被拦截)。
  3. 性能:NLP 模型通常较重,对于高并发场景(如实时聊天),建议先使用关键词快速过滤,仅对可疑内容调用 NLP 模型。
  4. 法律合规:不同地区对政治敏感、隐私保护的定义不同,需结合当地法规调整过滤策略。

如果需要更具体的代码实现(如获取违规位置、替换违规内容),可以提供更详细的需求(语言、过滤内容类型、平台限制等),我可以帮你定制脚本。

抱歉,评论功能暂时关闭!