### 介绍
基于AC自动机(Aho-Corasick algorithm)实现的关键词、敏感词、非法词、停用词等匹配替换工具,支持结果分词,忽略大小写,替换文本等功能。适用于在文章中查找关键词;过滤聊天、评论、留言中的敏感词等。
---
### 使用方法
#### 匹配所有关键词
```go
trie := NewTrie("雨疏", "风骤", "残酒", "卷帘人", "知否")
emits := trie.FindAll("昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否,知否?应是绿肥红瘦。", false)
// [2:4=雨疏, 4:6=风骤, 11:13=残酒, 16:19=卷帘人, 27:29=知否, 30:32=知否]
```
#### 匹配首个关键词
```go
trie := NewTrie("雨疏", "风骤", "残酒", "卷帘人", "知否")
emit := trie.FindFirst("昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否,知否?应是绿肥红瘦。", false)
// 2:4=雨疏
```
#### 匹配所有关键词 忽略大小写
```go
trie := NewTrie("poetry", "TRANSLATION")
emits := trie.FindAll("Poetry is what gets lost in translation.", true)
// [0:6=poetry, 28:39=TRANSLATION]
```
#### 匹配首个关键词 忽略大小写
```go
trie := NewTrie("poetry", "TRANSLATION")
emit := trie.FindFirst("Poetry is what gets lost in translation.", true)
// 0:6=poetry
```
#### 切分词
```go
trie := NewTrie("溪亭", "归路", "藕花", "争渡")
emits := trie.FindAll("常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。", false)
tokens := Tokenize(emits, text)
// ["常记", "溪亭(2:4=溪亭)", "日暮,沉醉不知", "归路(11:13=归路)", "。兴尽晚回舟,误入", "藕花(22:24=藕花)", "深处。", "争渡(27:29=争渡)", ",", "争渡(30:32=争渡)", ",惊起一滩鸥鹭。"]
```
#### 替换关键词
```go
trie := NewTrie("0元", "砍一刀", "免费拿", "免费领")
emits := trie.FindAll("我正在参加砍价,砍到0元就可以免费拿啦。亲~帮我砍一刀呗,咱们一起免费领好货。", false)
r1 := Replace(emits, text, "*")
r2 := Replace(emits, text, "@#$%^&*")
// 我正在参加砍价,砍到**就可以***啦。亲~帮我***呗,咱们一起***好货。
// 我正在参加砍价,砍到%^就可以#$%啦。亲~帮我%^&呗,咱们一起&*@好货。
```
---
### 源码
GitHub: https://github.com/yihleego/trie
有疑问加站长微信联系(非本文作者)