package main

import (
	"fmt"
	"log"

	sensitive "github.com/zmexing/go-sensitive-word"
)

func main() {
	filter, err := sensitive.NewFilter(
		sensitive.StoreOption{Type: sensitive.StoreMemory}, // 基于内存
		sensitive.FilterOption{Type: sensitive.FilterDfa},  // 基于DFA算法
	)

	if err != nil {
		log.Fatalf("敏感词服务启动失败, err:%v", err)
		return
	}

	// 加载敏感词库
	err = filter.LoadDictEmbed(
		sensitive.DictCovid19,
		sensitive.DictGFWAdditional,
		sensitive.DictOther,
		sensitive.DictReactionary,
		sensitive.DictAdvertisement,
		sensitive.DictPolitical,
		sensitive.DictViolence,
		sensitive.DictPeopleLife,
		sensitive.DictGunExplosion,
		sensitive.DictNeteaseFE,
		sensitive.DictSexual,
		sensitive.DictPornography,
		sensitive.DictAdditional,
		sensitive.DictCorruption,
		sensitive.DictTemporaryTencent,
		sensitive.DictIllegalURL,
	)
	if err != nil {
		log.Fatalf("加载词库发生了错误, err:%v", err)
		return
	}

	// 动态添加自定义敏感词
	err = filter.Store.AddWord("李世民", "秦始皇")
	if err != nil {
		log.Fatalf("添加敏感词发生了错误, err:%v", err)
		return
	}

	// 动态自定义敏感词白名单
	err = filter.Store.DelWord("武汉海鲜市场", "武汉")
	if err != nil {
		log.Fatalf("删除敏感词发生了错误, err:%v", err)
		return
	}

	sensitiveText := "李世民和老祖秦始皇的是忘年交，他们两个相约一起去武汉海鲜市场玩耍"

	// 是否有敏感词
	res1 := filter.IsSensitive(sensitiveText)
	fmt.Printf("res1: %v \n", res1)

	// 找到一个敏感词
	res2 := filter.FindOne(sensitiveText)
	fmt.Printf("res2: %v \n", res2)

	// 找到所有敏感词
	res3 := filter.FindAll(sensitiveText)
	fmt.Printf("res3: %v \n", res3)

	// 找到所有敏感词及出现次数
	res4 := filter.FindAllCount(sensitiveText)
	fmt.Printf("res4: %v \n", res4)

	// 和谐敏感词
	res5 := filter.Replace(sensitiveText, '*')
	fmt.Printf("res5: %v \n", res5)

	// 过滤铭感词
	res6 := filter.Remove(sensitiveText)
	fmt.Printf("res6: %v \n", res6)
}
