Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/FHChen0420/bili_live_shield_words

B站直播间弹幕屏蔽字处理
https://github.com/FHChen0420/bili_live_shield_words

Last synced: about 2 months ago
JSON representation

B站直播间弹幕屏蔽字处理

Awesome Lists containing this project

README

        

## B站直播弹幕反屏蔽处理(随缘更新中)

识别并处理B站直播弹幕中的全局屏蔽字,目前主要用于提高直播时的同传/歌词弹幕的存留率。

### 屏蔽机制简介
目前B站直播间弹幕的屏蔽机制主要有两类:
+ 传统的正则表达式检测,由人工管理,有简单和复杂之分。简单的屏蔽词有```匕首``` ```咖啡因```等,处理方法很简单,在中间任意加一个非空格字符(填充符)隔开就行,如```匕i首``` ```咖啡|因```等都不会触发屏蔽。注意该机制会无视半角空格,```匕 首``` ```咖 啡 因```均会被屏蔽。复杂的屏蔽规则会要求在两个字之间添加多个填充符(一般不超过6个),例如```网恋```两字之间至少需要两个填充符、```倒车```两字之间至少需要4个填充符,否则会被屏蔽。我在代码中会使用```网#2恋``` ```倒#4车```这样的格式来表示这类屏蔽规则。如果遇到更复杂的情况,例如原文是```删除了评论```,屏蔽规则是```删#4评#1论```,则只需满足任意一处填充即可,```删除了··评论``` ```删除了评·论```均是可行的处理结果。
+ 疑似中文分词语义检测,可能由系统自动识别,识别结果不稳定,于2021年8月底开始执行。该机制对以下几类汉字十分敏感(每类仅列出几个代表汉字):带贬义的动词/形容词(数量众多)```死丑笨矮透病日```、代词```你您他这```、语气词```啊吧呢```、拼音为ma的汉字```妈马吗嘛```、器官```脸嘴眼脑```、部分动物```狗猪猴```、个别汉字```个样很没```。如果上述几类汉字相互组合,则大概率会触发屏蔽。在处理方法上,之前毫无作用的空格反而成了最有效果的填充符,加到敏感词语中间(或周围)能应付80%以上的情况,其次是非敏感汉字与数字,能起到正常的填充作用,而英文字母、标点符号、日文假名等几乎无法发挥填充效果。此外,该机制会对敏感词语进行一定的边界检测(也有可能是对整条弹幕的正常字符数进行统计),如果敏感词周边有正常的汉字或数字,则有可能不触发屏蔽。

也有一些其他的情况:
+ 2022年3月下旬开始,B站会时不时屏蔽一些正常弹幕(返回码"f",与触发全局屏蔽时的返回码相同),一般来说重发一次就可以了。当你发送了一条真正含屏蔽词的弹幕并被B站拦截后,在之后极短时间内发送的任意内容弹幕都有一定概率被拦截。
+ 偶尔B站会临时添加一些很迷的屏蔽规则(疑似在测试),个别常用词语以及汉字单字也会被屏蔽,这种情况一般来说最多会持续一周。例如2022年初的一周内,B站实行了新的屏蔽机制,个别英文字母单独发送会被屏蔽,部分屏蔽词还需要两端加英文方括号```[]```才不容易被屏蔽。
+ 部分直播间(例如活动期间的BW/BML直播间)的屏蔽规则比普通直播间要刁钻很多,再加上直播间有弹幕密度限制,在房间弹幕流量较高的时候,你能成功发送半数的弹幕就算不错了。

### 注意事项
+ 收集的屏蔽词绝大部分来自于歌词和同传内容。部分涉党政黄赌毒的屏蔽词没列出来,也没必要处理。
+ 这里只列出简体字,对应的繁体字同样会被屏蔽。
+ B站屏蔽词是在变化的,例如"爬", "小学生"有段时间曾经是屏蔽字,现在不是了,但以后仍可能再次被屏蔽。
+ 代码不规范/冗余/处理方法差,望见谅。

### 代码使用示例
#### 使用本项目的屏蔽词库:
```
from BiliLiveAntiShield import BiliLiveAntiShield # 导入反屏蔽类
from BiliLiveShieldWords import rules,words # 导入屏蔽词数据
shield=BiliLiveAntiShield(rules,words,"·") # 创建对象(这里使用"·"作为填充符便于展示)
result=shield.deal("初心 baidu 白菜比猪肉便宜") # 执行反屏蔽处理
print(result) # 打印处理结果
```
输出结果:```初·心 B·aidu 白菜 比猪肉·便宜```

#### 使用自定义的屏蔽词库:
```
# 导入反屏蔽类
from BiliLiveAntiShield import BiliLiveAntiShield
# 自定义屏蔽词库
words=[
"abc","E#3G","G#2[HI]#1J",
]
rules={
"(?