我正在进行文本压缩,我想使用挖掘闭合频繁序列的知识。 GSP,CloSpan,ClaSP,Bide等现有算法都是连续和非连续的频繁序列。你能帮我找到这样的算法吗?
For example if the sequence database is
SID Sequence
1 CAABC
2 ABCB
3 CABC
4 ABBCA
and minimum support is 2
现有算法考虑子序列' CB' id为1的序列,但我不想这样做。
答案 0 :(得分:1)
现代顺序模式挖掘算法试图修剪搜索空间以减少运行时间。搜索空间呈指数级增长为非连续的"子序列可以是来自输入序列的任何组合。在您的情况下,搜索空间要小得多,因为序列是连续的,即我们已经知道组合。所以,如果你愿意的话,你可以自己为它做一个算法,它仍然会相当快。
这是一个粗略的递归示例如何:
def f(str, database, minSupp):
freq = 0
if len(patt) == 0:
return ""
#count frequency
for trans in db:
if patt in trans:
freq += 1
if freq >= minSupp:
return patt
else: #break it down
r = []
r.append(f(patt[1:], db, minSupp)) #All but the first element
r.append(f(patt[:-1], db, minSupp)) #All but the last element
return r
这只是演示了一种方法。当然,它很糟糕。
为了更快地做到这一点,你可以使用写一些条件,以便在模式已知的情况下不进行递归调用。
更快的方法是保持所有模式的倒排索引,然后逐步更新它们以使用Apriori条件创建超级模式。为此,您可以参考一些幻灯片演示,解释Apriori算法的工作原理(使用候选生成方法;其中一个例子在上面的算法中)。
答案 1 :(得分:0)
因此,不存在用于找到用于压缩的连续序列的算法。您可以修改现有算法以仅挖掘连续序列。我建议你修改BIDE算法,只找到连续的子序列。