Python 3.x Aho输出函数或输出/字典链接
我试图理解aho输出函数或字典链接,它是如何工作的。根据我的理解,甚至是写在: 案文形式如下: “从字典中的每个节点到下一个节点都有一个绿色的“字典后缀”弧,可以通过跟随蓝色弧来达到。例如,从(bca)到(a)有一个绿色弧,因为(a)是字典中的第一个节点(即蓝色节点),当跟随蓝色弧到(ca),然后再到(a)时到达该节点。”。通过重复遍历蓝色圆弧,直到找到蓝色节点,并记录此信息,可以在线性时间内计算绿色圆弧。” 因此,根据我对该模式的理解:{'yabc','abc','bc','c}带有故障链接的自动化将如下所示: 我正在使用此代码构造失败链接:Python 3.x Aho输出函数或输出/字典链接,python-3.x,algorithm,data-structures,substring,aho-corasick,Python 3.x,Algorithm,Data Structures,Substring,Aho Corasick,我试图理解aho输出函数或字典链接,它是如何工作的。根据我的理解,甚至是写在: 案文形式如下: “从字典中的每个节点到下一个节点都有一个绿色的“字典后缀”弧,可以通过跟随蓝色弧来达到。例如,从(bca)到(a)有一个绿色弧,因为(a)是字典中的第一个节点(即蓝色节点),当跟随蓝色弧到(ca),然后再到(a)时到达该节点。”。通过重复遍历蓝色圆弧,直到找到蓝色节点,并记录此信息,可以在线性时间内计算绿色圆弧。” 因此,根据我对该模式的理解:{'yabc','abc','bc','c}带有故障链接的
def built_failover(self):
q = deque()
current = self.root
for ch in self.root.children:
self.root.children[ch].fail = self.root
q.append(self.root.children[ch])
while q:
node = q.popleft()
for ch in node.children:
q.append(node.children[ch])
failover = node.fail
while True:
if failover is None:
node.children[ch].fail = self.root
break
if ch in failover.children:
node.children[ch].fail = failover.children[ch]
break
else:
failover = failover.fail
当我在文本中搜索模式时,我查看节点是否包含字符,若不包含字符,则检查失败注释,若包含字符,则移动
因此,在我的文本zabc中,当我到达yabc-trie结构时,我可以打印abc和bc,因为abc是当前节点输出,bc是yabc失败链接输出,但是如何打印C作为输出
我必须检查所有的失败链接,直到它不是根吗?或者在我的搜索/构建自动机时是否有任何错误