我需要实现w-shingling(在Java中)以比较两个html文档的相似性。问题是如何收集和存放带状疱疹。假设(a,rose,is,a,rose,is,a,rose)是这些文档之一。我猜我的算法(使用LinkedList)不会是最快的:


从文档(a)中获取下一个单词-如果没有其他单词,请在此处停止。
检查(a)带状疱疹清单中的出现情况
如果出现在那里,请转到第一步
如果不是,请将其附加到列表并转到第一步


正如我所预测的那样,对于大型文档,这可能会非常慢。您能给我一些提示使其更快吗...?

最佳答案

根据算法,您必须首先创建所有可能的w-shinglings-文档中出现的w-length个单词序列。您需要维护一个从文档中读取的单词长度为w的序列窗口(即读取w + 1个单词后,您可能会丢弃缓冲区中的第一个单词)。

为了存储w-shingling,您可以创建不可变的类并实现equals()hashCode()以提高比较性能。在构建带状碎片时,您可以将它们存储在Set中,以动态消除重复项。

关于java - W-shingling实现-存储带状疱疹,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9182792/

10-12 06:16