我有大量的字符串用于自然语言处理研究,我希望将其存储在Python中。

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

是否有更好的方法将这种对象存储在一个文件中,并且仍然可以随机(ISH)访问它?

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

谢谢!

有帮助吗?

解决方案

根据您打算如何获取数据,SQLITE3可能是最好的方法。 SQLITE3在随机访问关系数据方面非常出色,但是如果您的数据不是很好的关系,则可能没有那么重要。 (即使您拥有的只是一个“ ID”号,然后是您的字符串,我认为SQLite3用于固定琴弦的基础存储可能很棒。)

如果您可以找出某种机制,可以通过某种方式将其组合在一起(例如,如果您的某些句子具有暗示的对象或主题,则需要专门研究它们;或取决于不同字符串的来源,无论是正式的,非正式的还是超信息)之类的,那么您可以通过对数据进行分区,从而大大减少数据的“工作集”,并有可能大大改善研究的吞吐量。但是,如果您打算真正的随机访问,那么一大堆可能是最好的。

希望这可以帮助。

其他提示

您可以考虑使用数据库;也许每个字符串的句子或字符串表带有一行。

借助某些对象关系映射器(例如 Sqlalchemy)您可以在数据上具有面向对象的视图并在字符串上迭代,或者依次与较大的数据子集一起使用(如果适用于您的任务)。

此外,您可以为每个句子存储其他数据,以获得对要使用的项目集的更细粒度的控制。

我会说使用搁置(使用BDB后端)或SQLITE3。
我会选择sqlite3,对于一个简单的列表,一个表格 CREATE TABLE list(idx int primary key, value text); 应该足够了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top