2017-08-21 21:22:49 +00:00
|
|
|
# coding: utf8
|
|
|
|
from __future__ import unicode_literals, division, print_function
|
|
|
|
|
|
|
|
import plac
|
|
|
|
from pathlib import Path
|
|
|
|
import ujson
|
|
|
|
import cProfile
|
|
|
|
import pstats
|
|
|
|
|
|
|
|
import spacy
|
|
|
|
import sys
|
|
|
|
import tqdm
|
|
|
|
import cytoolz
|
|
|
|
|
|
|
|
|
|
|
|
def read_inputs(loc):
|
|
|
|
if loc is None:
|
|
|
|
file_ = sys.stdin
|
|
|
|
file_ = (line.encode('utf8') for line in file_)
|
|
|
|
else:
|
|
|
|
file_ = Path(loc).open()
|
|
|
|
for line in file_:
|
|
|
|
data = ujson.loads(line)
|
|
|
|
text = data['text']
|
|
|
|
yield text
|
|
|
|
|
|
|
|
|
|
|
|
@plac.annotations(
|
|
|
|
lang=("model/language", "positional", None, str),
|
2017-10-27 12:38:39 +00:00
|
|
|
inputs=("Location of input file", "positional", None, read_inputs))
|
2017-08-21 21:22:49 +00:00
|
|
|
def profile(cmd, lang, inputs=None):
|
|
|
|
"""
|
|
|
|
Profile a spaCy pipeline, to find out which functions take the most time.
|
|
|
|
"""
|
2017-10-27 12:38:39 +00:00
|
|
|
nlp = spacy.load(lang)
|
2017-08-21 21:22:49 +00:00
|
|
|
texts = list(cytoolz.take(10000, inputs))
|
2017-10-27 12:38:39 +00:00
|
|
|
cProfile.runctx("parse_texts(nlp, texts)", globals(), locals(),
|
|
|
|
"Profile.prof")
|
2017-08-21 21:22:49 +00:00
|
|
|
s = pstats.Stats("Profile.prof")
|
|
|
|
s.strip_dirs().sort_stats("time").print_stats()
|
|
|
|
|
|
|
|
|
|
|
|
def parse_texts(nlp, texts):
|
|
|
|
for doc in nlp.pipe(tqdm.tqdm(texts), batch_size=128):
|
|
|
|
pass
|