我有一个基于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。),解决方案显然是可扩展的,然后甚至更好。这是我考虑过的一些选项:
只需将它们全部保存为JSON,并在每次处理统计信息时加载它们即可。
将它们加载到Elasticsearch索引中。 (数据点本身并不是文档,因此Elasticsearch似乎有些过分。)
使用其他更轻便,更简单的数据库格式(TinyDB?)。
戳到.pkl
存档。 (太大);不容易转移到其他开发人员/环境。)
过去,您使用什么来存储按词法索引的语言数据?这个用例是否有实用工具?以及如何确保我的数据存储可扩展?
这个问题比我通常想在Stackoverflow上问或见的问题更开放,但是我认为这对从事NLP的其他开发人员很有用,无论如何还是值得提出的。