最有效的数组用于处理字符串

时间:2017-02-18 01:42:33

标签: python arrays performance list nlp

我有一个约6亿字的语料库。我想把它变成一个字符串列表,然后使用它,但我担心使用一个包含6亿个元素的列表会很慢。我想知道Python中的列表(单词)是否有高性能等价物。

更新:

我想在为每个单词计算一些分数后将每个单词映射到两个标签中的一个。分数基本上是分数,其中分子是它们在某些环境中出现的频率(例如在某些指定的单词之前)并且分母是它们的整体语料库频率。这几乎是我的任务。

2 个答案:

答案 0 :(得分:2)

这真的归结为你的用例以及你想用“6亿字”做什么。

如果您使用Python,请查看Dask.distributeddispy。然而,正如intboolstring所说,Python可能不是您的最佳选择。

作为替代方案,使用Hadoop之类的MapReduce是处理大量数据的好方法。您没有真正解释您的应用程序环境,因此很难提供很多见解。

答案 1 :(得分:0)

@shadowranger是对的,你应该告诉我们你想做什么的更多细节。这些是我的建议。

  • 首先,检查你的代码并找到问题的瓶颈,而不仅仅是猜测。如果你想做的不是关于I / O限制,也许多处理是一个不错的选择。

  • 数据结构是一个非常重要的因素。如果你想使用大对象,最好的办法就是选择最合适的数据结构。也许你可以试试deque这是一个类似列表的容器在两端追加和弹出,而不是list

  

Deques是堆栈和队列的概括(名称是   发音为“deck”,是“双端队列”的缩写。双端   支持线程安全,内存高效的附加和弹出   deque的一侧具有大致相同的O(1)性能   任何方向。

  • 内存管理,如果数据的大小非常大,请尝试围绕generatorsiterators而不是大型项目列表构建此代码,它将帮助您避免耗尽记忆并改进你的代码。

  • mmap可能会帮助您处理大文件。

  

内存映射文件对象的行为类似于字符串和类似文件   对象。

查看High-performance container datatypes的更多详情。