第八章主题——Hatena关键字链接的实现
本章keywords:
第22 课〔课题〕创建Hatena 关键字链接
所谓Hatena 关键字链接的算法,实际上只要满足以下条件:
·给定关键字集合
·输入任意文章
·从文章中找出关键字并返回其位置和长度
首先根据关键字集合创建Trie 。创建Trie 之后,从Trie 的根节点开始广度优先遍历,模式匹配失败时就沿着回路(称为Failure Links) 返回。带有Failure Links 的Trie 就叫做
Aho-Corasick 自动机。(简称AC算法)
第23课 解答范例和思路
Trie 通过Perl 内置的散列来实现。大框架如下所示。
• add_string()为创建Trie的处理(程序清单8.3 的1)
• make_failure_links()为添加Failure Links 的处理(程序清单8.3 的2)
• match()为给自动机提供输入,并提取出关键字的处理(程序清单8.3 的3)
考察add_string()可以发现,使用散列创建Trie 非常简单。带有_accept 键的节点是关键字所在的节点。
相反, make_failure_linksO一眼看上去很难看出它在做什么。该函数从Trie 的根节点开始进行广度优先搜索,找出最长的后缀。至于为什么这样写,前面的Aho-Corasick 算法的解释中已经讲过了,请参考一下。
match()将输入的文本放进自动机(即Trie) 进行遍历,发现_accept 就说明己找到关键字,就返回其位置和长度。
http://www.hankcs.com/program/algorithm/implementation-and-analysis-of-aho-corasick-algorithm-in-java.html
模式串是he/ she/ his /hers
java实现