【问题标题】:How can I remove large number of phrases in one pass from a large text file?如何从大型文本文件中一次性删除大量短语?
【发布时间】:2011-12-26 00:14:45
【问题描述】:

我想知道 - 有没有什么方法可以一次性从一个大 (18 GB) 文本文件中删除大量(数千个)文本短语?

【问题讨论】:

  • 如果是一次性工作,这里有一个提示:编写一些代码,看看它处理了多少 MB/s。如果总处理时间小于 3 小时,请停止改进,您的时间可能更有价值。
  • 谢谢。实际上,在我看来,这可能并不那么简单,因为搜索集本身就很大。我想在最坏的情况下它会是 O(m*n) 但我只是好奇是否存在更好的方法。我正在查看 Aho-Corasick 字符串搜索,但不确定是否有更好的方法。
  • -1 夜叉。这是一个有趣的问题,虽然过早的优化是万恶之源,但从长远来看,在开始“编写代码”之前花一些时间思考这个问题可能会更令人满意并且更好地投入时间而不是等待运行“笨蛋”解决方案。
  • 如果你的工作是编程,思考和优化手头的任务可能会更昂贵,但从长远来看,提高你的编码技能可能更有价值。

标签: python string text


【解决方案1】:

这些短语是一样的吗?就像您要删除的单词一样吗?然后也许您可以使用“in”关键字将其删除。使用 while 循环检查每一行并从该行中删除该单词的所有实例。不过需要有关此问题的更多信息。

【讨论】:

    【解决方案2】:

    我要在这里冒险并建议您使用AWK,因为it is very fast 用于此类任务。

    【讨论】:

      【解决方案3】:

      Rabin-Karp 适用于多个子字符串搜索,但我认为您的短语必须具有相同的长度。

      如果它们的长度相似,您也许可以搜索长度的子短语(所有短语的最小长度),然后在找到某些内容时进行扩展。

      我的另一个想法是,您可以根据您的搜索词组,将其扩展为使用一小组说 q 子词组长度。并且您可以修改 Rabin-Karp 以使用 q 组散列而不是一个滚动散列而不是一个。如果您可以将短语划分为具有相似长度的 q 个子集,这将有所帮助。

      【讨论】:

        【解决方案4】:

        您可以从您的短语列表中构造一个suffix tree 并使用它遍历您的文件。它将允许您识别所有字符串。这通常用于标记内容,但您也应该能够对其进行调整以删除字符串。

        【讨论】:

          猜你喜欢
          • 2016-12-26
          • 2011-05-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-28
          • 1970-01-01
          相关资源
          最近更新 更多