10

我有大量用于自然语言处理研究的字符串,我想要一种将其存储在 Python 中的好方法。

我可以使用 pickle,但是将整个列表加载到内存中是不可能的(我相信),因为它大约 10 GB 大,而且我没有那么多的主内存。目前,我将列表与搁置库一起存储...搁架由字符串“0”、“1”、...、“n”索引,这有点笨拙。

有没有更好的方法将这样的对象存储在单个文件中,并且仍然可以随机(ish)访问它?

最好的选择可能是将其拆分为多个列表。

谢谢!

4

3 回答 3

9

根据您打算如何获取数据,SQLite3 可能是最好的方法。SQLite3 在随机访问关系数据方面表现出色,但如果您的数据不是非常相关,它可能就没那么有意义了。(即使您拥有的只是一个 'id' 数字,然后是您的字符串,我认为用于字符串底层存储的 SQLite3 可能很棒。)

如果你能找出某种机制以某种方式将你的字符串组合在一起,那么你会使用它们(例如,如果你的某些句子有隐含的对象或主题,并且你想专门研究它们;或者取决于您的字符串的来源,无论是正式的、非正式的还是超非正式的)或类似的东西,那么您可以通过对其进行分区来显着减少数据的“工作集”,并可能大大提高您的研究吞吐量。但是,如果您打算真正随机访问,那么一大堆可能是最好的。

希望这可以帮助。

于 2011-01-24T02:42:44.760 回答
3

您可以考虑使用数据库;可能是一个句子或字符串表,每个字符串都有一行。

在一些对象关系映射器(例如sqlalchemy)的帮助下,您可以对数据有一个面向对象的视图并遍历字符串,或者按顺序处理更大的数据子集(如果这适用于您的任务)。

此外,您可以为每个句子存储额外的数据,以便对您要使用的项目集进行更细粒度的控制。

于 2011-01-24T02:43:28.943 回答
1

我会说使用搁置(使用 bdb 后端)或 Sqlite3。
我会使用 SQLite3,对于一个简单的列表,像这样的表CREATE TABLE list(idx int primary key, value text);就足够了。

于 2011-01-24T02:55:59.393 回答