如何在spaCy NLP管道的中间阶段最好地存储词汇信息

时间:2019-10-17 14:31:32

标签: python json database nlp spacy

我有一个基于spaCy的NLP管道,该管道处理大型语料库,然后搜索特定单词(词组和词性的一部分)的匹配项,然后为每个匹配项记录详细的词法信息。得到的结果是一个Python字典,其结构如下(简化),其中w是匹配的标记,sent_id是找到该标记的句子/语料库的唯一哈希值:

this_match = {"tag": w.tag_,
              "dep": w.dep_,
              "parent": w.head_,
              "children": [{"lemma": c.lemma_,
                            "tag": c.tag_}
                            for c in w.children if not c.is_punct]
              "sent_id": sent_id}

这些较小的字典(每个字典代表一个单词所出现的语言环境)随后被添加到顶级词典,该词典以每个匹配标记w的词缀/ POS为键。该词典将用作词汇信息存储,用于计算有关单词语言特征的各种统计信息。

如您所见,我们的数据结构是一个简单的JSON,包含字典和文本字典数组。 我应该如何存储它以便进行后续分析?目前,我只需要一个纯粹的本地解决方案,但如果(如Elasticsearch,在下面的 2。),解决方案显然是可扩展的,然后甚至更好。这是我考虑过的一些选项:

  1. 只需将它们全部保存为JSON,并在每次处理统计信息时加载它们即可。

  2. 将它们加载到Elasticsearch索引中。 (数据点本身并不是文档,因此Elasticsearch似乎有些过分。)

  3. 使用其他更轻便,更简单的数据库格式(TinyDB?)。

  4. 戳到.pkl存档。 (太大);不容易转移到其他开发人员/环境。)

过去,您使用什么来存储按词法索引的语言数据?这个用例是否有实用工具?以及如何确保我的数据存储可扩展?

这个问题比我通常想在Stackoverflow上问或见的问题更开放,但是我认为这对从事NLP的其他开发人员很有用,无论如何还是值得提出的。

0 个答案:

没有答案