Представьте, что у вас есть два списка, первый из которых состоит из 700 слов, а второй - из 30 000 возможных предложений. Будет 21 000 000 комбинаций начала предложения и слова.
Кроме того, существует около 400 файлов с некоторыми результатами для каждого возможного сочетания предложения и слова. Каждый файл состоит из 170 000 000 строк и имеет следующую структуру:
this is the first sentence
1. result for that sentence
2. result for that sentence
...
nth result for that sentence
this is the second sentence
...
this is the nth sentence
...
Для каждого возможного предложения + словосочетание я хотел бы найти файл результатов, содержащий некоторую информацию о комбинации (для каждой комбинации есть только один файл результатов, в котором происходит комбинация) и считайте результаты. Вы можете сделать это в течение l oop:
all_results = []
#create combinations
for sentence in sentencelist:
for word in wordlist:
combo = str(sentence + ' ' + word)
#loop through results file while no result for combination has bin found
c_result = []
while not c_result:
for resultsfilename in os.listdir(resultsdirectory):
with open(resultsfilename, 'r') as infile:
results = infile.read().splitlines()
if combo in results:
c_result = function_to_find_pattern_based_on_continuation(continuation, results)
#append results and reset c_result
all_results.append(c_result)
c_result = []
Однако этот алгоритм имеет довольно продолжительное время работы, и мне интересно, как его можно улучшить. Например, мне интересно, как я мог предотвратить загрузку файлов результатов снова и снова. Кроме того, я хотел бы создать копию файлов результатов, и после того, как результаты предложения + словосочетания будут считаны из файла результатов, они могут быть удалены в копии (я не хочу менять файлы на привод). Однако каждый файл результатов имеет размер около 7 ГБ, поэтому не имеет смысла хранить каждый файл в переменной, верно?
Есть ли другие вещи, которые можно использовать для улучшения времени выполнения?
Edit1: Адаптирован размер списков. Edit2: Добавить в то время как l oop и комментарии в коде