【问题标题】:Improving performance of preprocessing large set of documents提高预处理大量文档的性能
【发布时间】:2011-08-07 04:18:57
【问题描述】:

我正在开发一个与使用 Java 的剽窃检测框架相关的项目。我的文档集包含大约 100 个文档,我必须对它们进行预处理并存储在合适的数据结构中。我有一个大问题,我将如何有效地处理大量文档并避免瓶颈。我的问题主要关注如何提高预处理性能。

谢谢

问候 女娲

【问题讨论】:

  • 提高什么性能?你还没有写任何东西,所以你不知道什么是或可能是一个瓶颈。我们没有足够的信息来猜测您正在执行哪种类型的预处理。 100 个文档对我来说似乎不是一个大数字。
  • 您应该通过提供一些关于文档以什么格式开始以及目标数据结构是什么样的信息来使您的问题更加具体。此外,您应该提供一些信息,说明您目前需要花费多长时间。
  • 100 个文档并不大。 100,000 个文档很大......

标签: java preprocessor documents


【解决方案1】:

你有点缺乏那里的细节。适当的优化将取决于文档格式、平均文档大小、处理它们的方式以及存储在数据结构中的信息类型。不知道其中任何一个,一些一般的优化是:

  1. 假设给定文档的预处理独立于任何其他文档的预处理,并且假设您正在运行多核 CPU,那么您的工作负载是多线程的良好候选者.为每个 CPU 内核分配一个线程,并将作业分配给您的线程。然后您可以并行处理多个文档。

  2. 更一般地说,尽可能多地使用内存。尽量避免读取/写入磁盘。如果必须写入磁盘,请尝试等到您拥有要写入的所有数据后,再一次批量写入。

【讨论】:

  • 感谢您的回复。我的问题是我想阅读 100 份文件。如果我按顺序进行,将花费大量时间。所以我想要一个高效的并行算法(使用线程等)来快速阅读文档。并且从文档中读取的令牌应该存储在适合文档比较目的的数据结构中。
【解决方案2】:

您提供的信息很少,可以提出任何好的建议。

我的默认设置是使用带有线程池的执行器来处理它们,该线程池的线程数与机器中的核心相同,每个线程处理一个文档。

【讨论】:

  • 好的。我明白你的意思了。谢谢。我想知道的另一件事是,存储预处理到文档令牌的最有效数据结构是什么。这是至关重要的,因为我必须在文档比较阶段经常处理这些预处理的文档标记(单词)。谢谢
猜你喜欢
  • 1970-01-01
  • 2017-09-19
  • 2020-10-30
  • 2021-07-10
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
相关资源
最近更新 更多