ToolGood.Words

支持 繁体简体转化, 支持全角 半角转化, 获取拼音首字母, 获取 拼音字母 , 非法词(敏感词)查询

繁体简体互换

    //转成简体
    WordsHelper.ToSimplifiedChinese("壹佰贰拾叁億肆仟伍佰陆拾柒萬捌仟玖佰零壹元壹角贰分");
    //转成繁体
    WordsHelper.ToTraditionalChinese("壹佰贰拾叁亿肆仟伍佰陆拾柒万捌仟玖佰零壹元壹角贰分");

全角半角互换

    //转成全角
    WordsHelper.ToSBC("abcABC123");
    //转成半角
    WordsHelper.ToDBC("abcABC123");

拼音操作

    //获取全拼
    var py = WordsHelper.GetPinYin("我爱中国");
    Assert.AreEqual("WoAiZhongGuo", py);
    //获取首字母
    py = WordsHelper.GetFirstPinYin("我爱中国");
    Assert.AreEqual("WAZG", py);
    //获取全部拼音
    var pys = WordsHelper.GetAllPinYin('传');
    Assert.AreEqual("Chuan", pys[0]);
    Assert.AreEqual("Zhuan", pys[1]);

字符串搜索

    string s = "中国|国人|zg人";
    string test = "我是中国人";

    StringSearch iwords = new StringSearch();
    iwords.SetKeywords(s.Split('|'));
    
    var b = iwords.ContainsAny(test);
    Assert.AreEqual(true, b);

    var f = iwords.FindFirst(test);
    Assert.AreEqual("中国", f);

    var all = iwords.FindAll(test);
    Assert.AreEqual("中国", all[0]);
    Assert.AreEqual("国人", all[1]);
    Assert.AreEqual(2, all.Count);

查找非法词(敏感词)

    string s = "中国|国人|zg人|fuck|all|as|19|http://|ToolGood";
    string test = "我是中国人";

    IllegalWordsSearch iwords = new IllegalWordsSearch( 2);
    iwords.SetKeywords(s.Split('|'));

    var b = iwords.ContainsAny(test);
    Assert.AreEqual(true, b);

    var f = iwords.FindFirst(test);
    Assert.AreEqual(true, f.Success);
    Assert.AreEqual("中国", f.Keyword);
    Assert.AreEqual(2, f.Start);
    Assert.AreEqual(3, f.End);

    var all = iwords.FindAll(test);
    Assert.AreEqual("中国", all[0].SrcString);
    Assert.AreEqual("国人", all[1].SrcString);

    test = "我是中国zg人";
    all = iwords.FindAll(test);
    Assert.AreEqual("中国", all[0].SrcString);
    Assert.AreEqual("zg人", all[1].SrcString);

    test = "中间国zg人";
    all = iwords.FindAll(test);
    Assert.AreEqual("zg人", all[0].SrcString);

    test = "fuck al.l";
    all = iwords.FindAll(test);
    Assert.AreEqual("fuck", all[0].SrcString);
    Assert.AreEqual("al.l", all[1].SrcString);
    Assert.AreEqual(2, all.Count);

    test = "ht@tp://ToolGood.com";
    all = iwords.FindAll(test);
    Assert.AreEqual("toolgood", all[0].Keyword);
    Assert.AreEqual("ToolGood", all[0].SrcString);
    Assert.AreEqual(1, all.Count);


    test = "asssert all";
    all = iwords.FindAll(test);
    Assert.AreEqual("all", all[0].SrcString);
    Assert.AreEqual(1, all.Count);

    test = "19w 1919 all";
    all = iwords.FindAll(test);
    Assert.AreEqual("19", all[0].SrcString);
    Assert.AreEqual("all", all[1].SrcString);

    test = "我是【中]国【人";
    all = iwords.FindAll(test);
    Assert.AreEqual("中]国", all[0].SrcString);
    Assert.AreEqual("国【人", all[1].SrcString);

    test = "我是【中国【人";
    all = iwords.FindAll(test);
    Assert.AreEqual("中国", all[0].SrcString);
    Assert.AreEqual(1, all.Count);
性能对比

TrieFilter : 153ms

FastFilter : 109ms

StringSearch : 32ms

StringSearch(ToSenseWord) : 199ms

IllegalWordsSearch(FindFirst) : 54ms

IllegalWordsSearch(ContainsAny) : 52ms

TrieFilter(Find All) : 1,453ms

FastFilter (Find All): 395ms

StringSearch(Find All): 405ms

IllegalWordsSearch(Find All): 1,201ms

注:FastFilter来源: http://www.cnblogs.com/yeerh/archive/2011/10/20/2219035.html

注: 在 Find All测试中,FastFilter只能检测出7个: [0]: "主席" [1]: "赵洪祝" [2]: "中国" [3]: "铁道部" [4]: "党" [5]: "胡锦涛" [6]: "倒台"

StringSearch检测出14个: [0]: "党" [1]: "党委" [2]: "西藏" [3]: "党" [4]: "党委" [5]: "主席" [6]: "赵洪祝" [7]: "中国" [8]: "铁道部" [9]: "党" [10]: "胡锦涛" [11]: "锦涛" [12]: "倒台" [13]: "黑社会"

IllegalWordsSearch检出15个: [0]: {63|党} [1]: {63|党委} [2]: {81|西藏} [3]: {83|党} [4]: {83|党委} [5]: {143|主席} [6]: {185|赵洪祝} [7]: {204|中国} [8]: {221|铁道部} [9]: {235|党} [10]: {244|胡锦涛} [11]: {245|锦涛} [12]: {323|倒台} [13]: {324|台} [14]: {364|黑社会}

注:IllegalWordsSearch比StringSearch多一个台,原因:关键字繁体转简体

S
Description
一款高性能敏感词(非法词/脏字)检测过滤组件,附带繁体简体互换,支持全角半角互换,汉字转拼音,模糊搜索等功能。
Readme Apache-2.0 104 MiB
Languages
JavaScript 73.6%
Python 13.4%
C# 8.9%
Java 2.4%
Go 1.5%