【问题标题】:Serializing corpora with python用python序列化语料库
【发布时间】:2012-08-07 02:55:21
【问题描述】:

我有一个庞大的论坛数据数据库。我需要从数据库中提取语料库用于 NLP 目的。提取步骤有参数(例如 FTS 查询),我想将带有参数元数据的语料库保存在文件系统上。

一些语料库会达到几十兆字节。用元数据保存文件的最佳方法是什么,这样我就可以在不加载整个文件的情况下读取元数据。

我正在使用以下可能相关的技术:PyQt、Postgres、Python、NLTK。

一些注意事项:

  1. 我希望语料库与重量级数据库分离。
  2. 我不想使用 sqlite,因为元数据的结构非常简单。
  3. 据我所知,Pickling 不允许部分反序列化。
  4. 我不希望有单独的元数据文件。
  5. 我有使用协议缓冲区的经验,但又一次似乎过于沉重。

我想我可以将元数据腌制为字符串,并让文件的第一行代表元数据。这似乎是我认为最简单的方法。也就是说,如果 pickle 格式是 ASCII 安全的。

【问题讨论】:

  • 是的,默认 (0) 协议的 pickle 格式是 ASCII 安全的。
  • 文件路径中存储的元数据是否过多?
  • 目前没有,但它不是面向未来的解决方案。

标签: python serialization nltk corpus


【解决方案1】:

在 NLTK 的术语中,“语料库”是整个集合,可以包含多个文件。听起来您可以将每个论坛会话(称为“语料库”)存储到单独的文件中,使用允许您在文件开头存储元数据的结构化格式。

NLTK 通常为此目的使用 XML,但不难推出您自己的语料库阅读器,该阅读器读取文件头,然后遵循PlainTextCorpusReader,或任何最适合您的文件格式的标准阅读器。如果您使用 XML,您还必须扩展 XMLCorpusReader 并提供方法 sents()words() 等。

【讨论】:

  • 这可能是我想要的。我会尝试查找 XMLCorpusReader 的文档。
  • 查看模块xmldocs (nltk/corpus/reader/xmldocs.py) 的文档。 XMLCorpusReader 类可以给你所有的节点内容作为文本;但是您的方法可以在内部使用XMLCorpusView,它允许您指定所需内容的元素。
【解决方案2】:

为什么不在您的语料库文件中添加 JSON 标头? 或任何其他类型的结构化格式...我现在可以想到 Jekyll 帖子中的 YAML front matter

【讨论】:

    猜你喜欢
    • 2018-07-02
    • 1970-01-01
    • 2017-09-28
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    相关资源
    最近更新 更多