敏感词检测python代码
时间: 2024-12-26 17:05:55 浏览: 14
敏感词检测通常是通过文本处理库,如Python的jieba分词库和正则表达式等技术来实现的。下面是一个简单的例子,展示了如何使用Python检测文本中的敏感词汇:
```python
import jieba
import re
# 定义敏感词列表
sensitive_words = ['敏感词1', '敏感词2', r'\b不良信息\b']
def detect_sensitive_words(text):
# 使用jieba分词
words = set(jieba.lcut(text))
# 检查每个词语是否在敏感词列表中
for word in words:
if word in sensitive_words or re.search(r'\b' + word + r'\b', text):
return True
# 如果没有找到敏感词,则返回False
return False
text_to_check = "这是一条包含敏感词1的信息"
if detect_sensitive_words(text_to_check):
print("文本中含有敏感词")
else:
print("文本中未发现敏感词")
相关问题
敏感词过滤python代码
在Python中,敏感词过滤通常涉及到文本处理和关键字检测。为了实现这个功能,你可以使用一些库,如`re`(正则表达式)和自定义列表来匹配敏感词,或者使用第三方库如`jieba`(分词库)配合黑名单机制。以下是一个简单的示例,展示了如何使用正则表达式进行基础的敏感词过滤:
```python
import re
# 定义敏感词列表
sensitive_words = ["敏感词1", "敏感词2", r"\b(辱骂|攻击)\b"]
# 假设我们有一个待检查的文本
text = "这个字符串包含敏感词1和攻击行为"
# 使用re.findall查找敏感词
filtered_text = re.sub(r'\b(?:{})\b'.format('|'.join(sensitive_words)), '****', text)
print(filtered_text)
```
在这个例子中,`re.sub`函数会查找并替换所有匹配的敏感词。
敏感词检测算法简单实现
### 敏感词检测算法简介
敏感词过滤旨在识别并移除或标记文本中的特定词汇。多种算法可用于此目的,其中较为简单的实现方式之一是基于字典匹配的方法。
#### 字符串匹配方法概述
一种基本的方式是以列表形式存储所有敏感词,在给定的输入字符串中逐一检查是否存在这些词语。这种方法虽然直观易懂,但在面对大量敏感词时效率较低[^1]。
对于更高效的解决方案,则可以采用诸如DFA(确定有限状态自动机)这样的高级技术来构建敏感词树结构,从而只需遍历一次待测文本即可完成多关键词的同时查找工作[^2]。
#### Python 实现 DFA 算法示例
下面给出了一段Python代码片段作为演示:
```python
class DFATree:
def __init__(self):
self.keyword_chains = {} # 关键词链表
self.sensitivity_words_end = 'is_word' # 结束标志
def add(self, keyword):
""" 添加关键字到敏感词库 """
chars = keyword.strip()
if not chars:
return
level = self.keyword_chains
for i in range(len(chars)):
char_lower = chars[i].lower() # 转换成小写
if char_lower in level:
level = level[char_lower]
else:
if not isinstance(level, dict):
break
for j in range(i, len(chars)): # 循环迭代加入新节点
level[chars[j]] = {}
last_level, last_char = level, chars[j]
level = level[last_char]
last_level[last_char] = {self.sensitivity_words_end: True}
break
if i == len(chars) - 1:
level[self.sensitivity_words_end] = True
def search(self, content):
""" 查找内容是否包含敏感词 """
result = []
begin_index = 0
while begin_index < len(content):
check_content = content[begin_index:]
index_of_begin = None
current_dict = self.keyword_chains
for end_index in range(0, len(check_content)):
word_low = check_content[end_index].lower()
if word_low in current_dict:
current_dict = current_dict[word_low]
if current_dict.get(self.sensitivity_words_end, False):
index_of_begin = begin_index
continue
else:
break
if index_of_begin is not None and (end_index + begin_index - index_of_begin >= 1):
result.append((index_of_begin, end_index + begin_index))
begin_index += 1 if index_of_begin is None else end_index + begin_index - index_of_begin
return result
def test():
finder = DFATree()
words = ["今天", "今天很好", "今天真烦"]
for w in words:
finder.add(w)
text = "我觉得今天还行。"
res = finder.search(text)
masked_text = list(text)
for start, end in reversed(res):
masked_text[start:end] = '*' * (end-start)
print(''.join(masked_text))
if __name__ == '__main__':
test()
```
这段程序展示了如何创建一个`DFATree`类来进行敏感词的添加(`add`)以及搜索(`search`)操作,并通过实例化该类对象执行具体的测试案例。
阅读全文