我如何在 spaCy 中使用生成器对象?
How do I use generator objects in spaCy?
在这里第一次体验 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
但这不起作用,因为在使用 .pipe() 方法时 spaCy returns 生成器对象。所以当我这样做时:
for tweet in spacy_tweets:
print(tweet)
它打印生成器。好的,我明白了。但是当我这样做时:
for tweet in spacy_tweets[0]:
print(tweet)
我希望它能在生成器中打印 Doc 对象或推文的文本,但它并没有这样做。相反,它会单独打印每个字符。
我是不是处理错了,或者我需要做些什么才能从生成器对象中检索 Doc 对象,以便我可以使用 spaCy 属性进行词形还原等?
我认为您错误地使用了 nlp.pipe 命令。
nlp.pipe 用于并行化,这意味着它同时处理推文。因此,与其将一条推文作为参数提供给 nlp.pipe 命令,不如传递推文列表。
以下代码似乎可以实现您的目标:
import spacy
nlp = spacy.load('en')
tweets = ['This is a dummy tweet for stack overflow',
'What do we do with generator objects?']
spacy_tweets = nlp.pipe(tweets, batch_size = 10, n_threads = 3)
for tweet in spacy_tweets:
for token in tweet:
print(token.text, token.pos_)
希望对您有所帮助!
在这里第一次体验 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
但这不起作用,因为在使用 .pipe() 方法时 spaCy returns 生成器对象。所以当我这样做时:
for tweet in spacy_tweets:
print(tweet)
它打印生成器。好的,我明白了。但是当我这样做时:
for tweet in spacy_tweets[0]:
print(tweet)
我希望它能在生成器中打印 Doc 对象或推文的文本,但它并没有这样做。相反,它会单独打印每个字符。
我是不是处理错了,或者我需要做些什么才能从生成器对象中检索 Doc 对象,以便我可以使用 spaCy 属性进行词形还原等?
我认为您错误地使用了 nlp.pipe 命令。
nlp.pipe 用于并行化,这意味着它同时处理推文。因此,与其将一条推文作为参数提供给 nlp.pipe 命令,不如传递推文列表。
以下代码似乎可以实现您的目标:
import spacy
nlp = spacy.load('en')
tweets = ['This is a dummy tweet for stack overflow',
'What do we do with generator objects?']
spacy_tweets = nlp.pipe(tweets, batch_size = 10, n_threads = 3)
for tweet in spacy_tweets:
for token in tweet:
print(token.text, token.pos_)
希望对您有所帮助!