Я использую SpaCy для десятков тысяч документов. В среднем на документ уходит около 5 секунд. Любые предложения о том, как ускорить токенизатор?
Некоторая дополнительная информация:
- Входные файлы - это текстовые файлы с символами новой строки
- Средний размер файла - около 400 КБ
- Токены каждого входного файла записываются в новую строку в выходном файле (хотя я могу изменить это, если это поможет увеличить скорость)
- Есть 1655 стоп-слов
- Выходной файл передается в быстрый текст
Вот мой код:
from pathlib import Path, PurePath
from time import time
st = time()
nlp = en_core_web_sm.load(disable = ['ner', 'tagger', 'parser', 'textcat'])
p = Path('input_text/').glob('*.txt')
files = ['input_text/' + x.name for x in p if x.is_file()]
#nlp = spacy.load('en-core-web-sm')
stopwords_file = 'stopwords.txt'
def getStopWords():
f = open(stopwords_file, 'r')
stopWordsSet = f.read()
return stopWordsSet
stopWordsSet = getStopWords()
out_file = 'token_results.txt'
for file in files:
#print (out_file)
with open(file, encoding="utf8") as f:
st_doc = time()
for line in f:
doc = nlp(line)
for token in doc:
if (not token.text.lower() in stopWordsSet
and not token.is_punct and not token.is_space and not token.like_num
and len(token.shape_)>1):
tup = (token.text, '|', token.lemma_)
appendFile = open(out_file, 'a', encoding="utf-8")
appendFile.write(" " + tup[0])
print((time() -st_doc), 'seconds elasped for', file)
appendFile.write('\n')
appendFile.close()
print((time()-st)/60, 'minutes elasped')