У меня есть следующий код Python, где я собираю данные из стандартного ввода в список и запускаю на нем синтаксическую сеть. Данные находятся в форме объектов json, из которых я извлечу текстовое поле и передам его в синтаксическую сеть.Соберите данные в кусках из stdin: Python
data = []
for line in sys.stdin:
data.append(line)
run_syntaxnet(data) ##This is a function##
Я делаю это, потому что я не хочу Syntaxnet запускать для каждого твита, так как это займет очень много времени, и, следовательно, к снижению производительности.
Кроме того, когда я запускаю этот код на очень больших данных, я не хочу постоянно собирать его и заканчивать память. Поэтому я хочу собирать данные в кусках - может быть как 10000 твитов за раз и запускать на них Syntaxnet. Может ли кто-нибудь помочь мне, как это сделать?
Кроме того, я хочу понять, что может быть максимальной длиной списка data
, так что у меня не хватает памяти.
EDIT:
Я использовал код:
data = []
for line in sys.stdin:
data.append(line)
if len(data) == 10000:
run_syntaxnet(data) ##This is a function##
data = []
, который работает прекрасно, если число строк в исходных данных кратна 10000. Я не уверен, что делать с остальными рядами.
Например, если общее число строк равно 12000, первые 10000 строк обрабатываются так, как я хочу, но следующий 2000 остановлен, так как условие len(data) > 10000
не выполняется.
Я хочу сделать что-то вроде:
if len(data) > 10000 or 'EOF of input file is reached':
run_syntaxnet(data)
Может кто-нибудь сказать мне, как проверить на EOF входного файла? Заранее спасибо!
PS: Все данные в файл python взяты из Pig Streaming. Кроме того, я не могу позволить себе подсчитать количество строк sin входных данных и отправить в качестве параметра, так как у меня есть миллионы строк, и подсчет будет принимать навсегда.
Посмотрите генераторы – iScrE4m