spacy 3 - 返回的 lemma_ 将为空字符串

spacy 3 - lemma_ returned will be empty string

我使用 spacy 3 规范化了数万个文档。

  1. 为了加快这个过程,我尝试这样,
nlp = spacy.load('en_core_web_sm')
docs = nlp.tokenizer.pipe(doc_list)
return [[word.lemma_ for word in doc if word.is_punct == False and word.is_stop == False] for doc, _ in doc_list]

但返回的所有 lemma_ 都是空字符串。

  1. 所以我直接像下面这样使用nlp(doc),但是太慢了
a = [[word.lemma_ for word in nlp(doc) if word.is_punct == False and word.is_stop == False] for doc in doc_list]

我怎样才能正确地做到这一点?

区别在于您创建文档的方式。

  1. 在第一个示例中,您使用 nlp.tokenizer.pipe() - 这只会 运行 您所有文档的分词器,而不是词形还原器。因此,您得到的只是将文档拆分为标记,但未设置 lemma_ 属性。
  2. 在您使用 nlp(doc) 的第二个示例中,这将 运行 所有默认组件(即 ['tok2vec', 'tagger', 'parser', 'ner', 'attribute_ruler', 'lemmatizer']。由于 lemmatizer 是管道的一部分 lemma_ 属性已设置。但是,速度较慢,因为您正在 运行 安装所有组件,甚至是您不需要的组件。

你应该做什么:

import spacy

# Exclude components not required when loading the spaCy model.
nlp = spacy.load("en_core_web_sm", exclude=["tok2vec", "parser", "ner", "attrbute_ruler"]) 

# Extract lemmas as required.
a = [[word.lemma_ for word in nlp(doc) if word.is_punct == False and word.is_stop == False] for doc in doc_list]