在阅读文档时使用并行算法

时间:2011-04-22 03:48:11

标签: java preprocessor parallel-processing document

  

可能重复:
  Improving performance of preprocessing large set of documents

您好, 我有一个包含大约100个文档的文档集。我必须预先处理这些文件,并将这些文件相互比较。如果我以顺序方式执行它将消耗大量时间。所以我想知道一些可以使用的parellel算法,以及如何使用Java实现这些算法。

Ragards, nuwan

3 个答案:

答案 0 :(得分:2)

关于检测文档相似性的文献很多。您需要对符合您要求的软件/算法/技术进行文献检索和/或网络搜索。

简单地用蛮力并行成对比较替换蛮力顺序成对比较不是答案。这种方法只能为您提供O(P)加速(最好),您必须处理O(N^2 * S^2),其中N是文档数量,S是平均文档大小。

首先,找到两个大文本文件之间相似性的经典方法是将每个文件分成几行,计算每个文件行的哈希值,对哈希值进行排序并比较它们。此过程为O(SlogS) ...

答案 1 :(得分:1)

如果您有文档d1,d2,d3,d4 - 如果您将每个文档与所有其他文档进行比较,那么它将是O(N^2)。但是,我假设将d1与d2进行比较与将d2与d1进行比较相同,因此可以在那里进行优化。所以基本上,你只需要比较d1-d2,d1-d3,d1-d4,d2-d3,d2-d4,d3-d4,即O((N-1)!)。

或许首先要建立一个需要完成的所有比较的地图。然后,将该映射拆分为X个相等大小的集合,其中X是您要运行的进程数。最后,剥离那么多线程(或将工作分配给那么多服务器),让它们运行,然后将结果合并在一起。

如果您需要单独预处理每个文档(因此比较真的无关紧要),那么只需将问题分解为任意数量的进程,然后在整个进程中分配该工作。如果我们真的不知道你正在处理什么样的预处理和比较以及文档类型,我就不能真正了解更多细节。

答案 2 :(得分:0)

我假设您正在寻找文档之间的相似性而不是相同的文档 - 如果是这种情况,您可以并行生成每个文档的校验和,然后进行比较则相对容易。

对于相似之处,您可以使用指纹识别方法。我有一个朋友如何使用它来查找大型文档集中的文本重用。您可以并行计算每个文档的指纹,然后加载指纹以在内存和并行中进行匹配。

Winnowing: Local Algorithms for Document Fingerprinting