# The folder's file list is the top level of ONE table of contents: # level 0 rows are files, deeper rows are those files' own sections. level = corpus_toc[corpus_toc.level == 0] # 63 rows, one per file files = reason_on_toc(question, level, # the SAME router call section_signals=keyword_hits(question, level)) sections = [] for file_id in files.section_ids: # typically 1 to 3 level = corpus_toc[(corpus_toc.file_id == file_id) & (corpus_toc.level == 1)] while True: # the one-document loop pick = reason_on_toc(question, level) section = level[level.section_id.isin(pick.section_ids)] kids = immediate_children(corpus_toc, section) if kids.empty or section.n_pages.max() <= SMALL: break # a leaf, or short enough level = kids # open it, descend sections.append(section) # 63 files -> 1 file -> AC-2 ACCOUNT MANAGEMENT -> 5 pages out of 4,211