Spacy-nlp.pipe()返回生成器

时间:2018-07-16 20:45:16

标签: python nlp spacy

我在Python中将Spacy用于NLP。我正在尝试使用nlp.pipe()生成Spacy文档对象的列表,然后可以对其进行分析。奇怪的是,nlp.pipe()返回了类<generator object pipe at 0x7f28640fefa0>的对象。如何获取它以按预期返回文档列表?

import Spacy
nlp = spacy.load('en_depent_web_md', disable=['tagging', 'parser'])
matches = ['one', 'two', 'three']
docs = nlp.pipe(matches)
docs

3 个答案:

答案 0 :(得分:7)

要遍历文档,只需

for item in docs

或做

 list_of_docs = list(docs)

答案 1 :(得分:0)

您可以添加

linux-stable_%.bbappend

答案 2 :(得分:0)

nlp.pipe故意返回一个生成器! Generators很棒。它们对内存更友好,因为它们使您可以迭代一系列对象,但是与列表不同,它们仅在需要时评估下一个对象,而不是一次评估所有对象。

SpaCy会将这些字符串转换为稀疏矩阵,它们将变得很大。实际上,spaCy会将这些字符串转换为Doc对象,它们是honkin的大结构。如果您的语料库足够大,将其全部存储在一个变量(例如docs = nlp([doc for doc in matches]docs = list(nlp.pipe(matches))中将是无效的,甚至是不可能的。如果您正在训练大量数据,这将不是一个好主意。

即使实际上并非不可能,但如果将生成器用作管道的一部分,而不仅仅是将其转储到列表中,则可以更快地完成冷却。如果您只想提取某些信息,例如,创建仅包含命名实体的数据库列,或者仅创建数据中的地名,则无需将整个内容存储在列表中,然后进行嵌套for循环将其释放。

此外,Doc.spans项(以及许多其他项)是生成器。 gensim中也出现了类似的数据类型-NLP的一半挑战是弄清楚如何以可扩展的方式来完成这些工作,因此值得习惯使用效率更高的容器。 (此外,您可以用它们来做一些更酷的事情!)

The official spaCy starter在第3章中有关于伸缩性和性能的一些说明。