(function ()function buildtree(words) , // 子節點指標
val: null, // 當前節點的字元,null表示根節點
back: null, // 跳躍指標,也稱失敗指標
parent: null, // 父節點指標,
accept: false // 是否形成了乙個完整的詞彙,中間節點也可能為true
}// make trie tree
for (var i = 0; i < words.length; i++)
// fix backtrace pointer
fallbackall(root);
return root;
}function dedupandsort(words) );
// 濾掉空串
words = words.filter(function (word) );
var seen = {};
var out = ;
for (var i = 0; i < words.length; i++)
}return out.sort();
}function addword(root, word) ,
val: c,
accept: false,
back: root,
parent: current}}
current = current.next[c];
}current.accept = true;
}function fallbackall(root)
var parent = node.parent
var back = parent.back
while (back != null)
back = back.back}}
curexpands = nextexpands}}
function fallback(root, word)
back = back.back
}current = current.next[c]}}
function selectlongest(offsetwords)
for (var i = 0; i < offsetwords.length; i++)
}var offsets = object.keys(stands).map(function (key) ).sort(function (a, b) );
return offsets.map(function (off) );
}fastscanner.prototype.add = function add(word)
addword(this.root, word)
fallback(this.root, word)
}// 從子節點往上直到根結點,收集單詞
function collect(node)
return word.join('')
}// 定位子節點
fastscanner.prototype.locate = function locate(word)
}return current
}fastscanner.prototype.hits = function hits(content, options) ;
for (var i = 0; i < offwords.length; i++)
return seen
}fastscanner.prototype.search = function search(content, options)
for (var i = 0; i < content.length; i++)
back = back.back}}
if (next)
}back = back.back
} while (back != this.root);
current = next;
continue
}// 重置
current = this.root
}// 同乙個位置選最長的
if (options.longest)
return offwords
}if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') else if (typeof define === 'function' && define.amd) );
} else
})();
var scanner = new fastscanner(words)
var offwords = scanner.search(content)
console.log(offwords)
var hits = scanner.hits(content)
console.log(hits)
fastscan - 用於敏感詞過濾的 ahocorasick 演算法快速文字搜尋js實現
敏感詞過濾
最近需要實現對聊天裡的敏感詞過濾,要求比較簡單,只需要對字型檔中存在的關鍵字進行匹配,所以不需要非常複雜的實現,但是需要能夠快速地對乙個關鍵字集合進行匹配。搜了一下相關的資料,比較簡單的乙個演算法是使用aho corasick演算法,以下簡稱ac演算法。該演算法的基本思想中包含了kmp演算法,即利用...
敏感詞過濾
敏感詞過濾 防沉迷,基本所有上線系統都會用的基礎功能吧,網上挺多 的,也很多種方式,看的有點繞寫了個自己感覺比較乾淨清楚的,結構也比較簡單,記錄一下insert 和 審查 檢查 都是遞迴,效率還好,win release版本5700的樣本,length 1000的 str 大概0.2ms支援比如敏感...
敏感詞過濾
分享乙個敏感詞過濾方法 1 public class wordfiltercontroller basecontroller 225 result str result 2627 if s filters null 28 3132 bool check false 33 foreach string...