Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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站直播间弹幕屏蔽字处理
- Host: GitHub
- URL: https://github.com/FHChen0420/bili_live_shield_words
- Owner: FHChen0420
- Created: 2021-06-01T14:53:26.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-01-10T02:12:32.000Z (almost 2 years ago)
- Last Synced: 2024-08-01T02:27:33.417Z (4 months ago)
- Language: Python
- Size: 593 KB
- Stars: 13
- Watchers: 2
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-bilibili-extra - Bili_live_shield_words - B 站直播间弹幕屏蔽字处理.![Python](svg/python.svg?raw=true) (直播相关工具 / 直播脚本)
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={
"(?