【发布时间】:2019-03-18 19:32:49
【问题描述】:
在这里第一次体验 NLP。我有大约 50 万条推文。我正在尝试使用 spacy 删除停用词、词形还原等,然后将处理后的文本传递给分类模型。由于数据的大小,我需要多处理才能以合理的速度执行此操作,但是一旦我拥有生成器对象,我就无法弄清楚如何处理它。
这里我加载 spacy 并通过标准管道传递数据:
nlp = spacy.load('en')
tweets = ['This is a dummy tweet for stack overflow',
'What do we do with generator objects?']
spacy_tweets = []
for tweet in tweets:
doc_tweet = nlp.pipe(tweet, batch_size = 10, n_threads = 3)
spacy_tweets.append(doc_tweet)
现在我想获取 spaCy 创建的 Doc 对象,然后使用以下内容处理文本:
def spacy_tokenizer(tweet):
tweet = [tok.lemma_.lower().strip() if tok.lemma_ != "-PRON-" else tok.lower_ for tok in tweet]
tweet = [tok for tok in tweet if (tok not in stopwords and tok not in punctuations)]
return tweet
但这不起作用,因为 spaCy 在使用 .pipe() 方法时返回生成器对象。所以当我这样做时:
for tweet in spacy_tweets:
print(tweet)
它打印生成器。好的,我明白了。但是当我这样做时:
for tweet in spacy_tweets[0]:
print(tweet)
我希望它在生成器中打印 Doc 对象或推文的文本,但它没有这样做。相反,它单独打印每个字符。
我是在接近这个错误还是我需要做些什么才能从生成器对象中检索 Doc 对象,以便我可以使用 spaCy 属性进行词形还原等?
【问题讨论】:
-
你能解释一下你所说的“文档对象”是什么意思吗?在我看来,您要么想访问对象的各个字段,要么只检索文本,对吧?
标签: python-3.x nlp spacy