Вы должны использовать функцию spacy nlp.pipe, если вы перебираете несколько документов.Это позволит вам включить размер пакета, а также многопоточность.Spacy не настроен так, как вы предлагаете.
Кроме того, использование стоп-слов nltk будет узким местом, я думаю.Если вы используете spacy, используйте вместо этого стоп-слова spacy.Они должны быть оптимизированы для использования в просторах, в отличие от nltk.
import spacy
from spacy.attrs import *
import numpy as np
nlp = spacy.load('en_core_web_lg')
texts = ["this is some sentence","This is the last sentence"]
max_length =10
data = np.zeros((len(texts), max_length), dtype=np.uint64)
for row, doc in enumerate(nlp.pipe(texts, n_threads=8, batch_size=10000)):
dat = doc.to_array([LEMMA, IS_STOP])
# Check to see if text length is not 0
if len(dat) > 0:
delete = np.where(dat[:, 1] == 1)
dat = np.delete(dat, delete, 0)
length = min(len(dat), max_length)
data[row, :length] = dat[:length, 0].ravel()
Это оставит вас с пространственными хеш-данными, хранящимися в массиве.Эти хэш-данные могут быть затем преобразованы путем доступа к словарю пространства.У меня нет времени, чтобы проверить это прямо сейчас, но я думаю, это будет намного быстрее.Надеюсь, это поможет.