flashtext是一种基于Trie字典数据结构和Aho Corasick的算法。
Trie字典构建
flashtext首先将所有相关的关键字作为输入,使用这些关键字建立一个trie字典(start和eot分别是字符序列的开始标签和结束标签):
搜索
对于输入字符串或文档,对字符进行逐个遍历。当在文档中有字符序列<\b>word<\b>匹配到字典中的word时,则认为这是一个完整匹配,将匹配到的字符序列所对应的标准关键字进行输出:
ps.示例中,匹配到的字符序列显示为绿色,没有匹配到的字符序列显示为红色。
替换
对于输入字符串或文档,flashtext对字符进行逐个遍历,先创建一个空的字符串,当字符序列中的<\b>word<\b>无法在Trie字典中找到匹配时,就简单地将原始字符序列复制到返回字符串中;当Trie字典中找到匹配时,将匹配到的字符的标准字符复制到返回字符串中。因此,返回字符串时输入字符串的一个副本,不同的是替换了匹配到的字符序列: