in python/ts-to-word.py [0:0]
def write_detected_categories(document, category_list):
"""
If there are any detected categories then write out a simple list
:param document: Word document structure to write the table into
:param category_list: Details of detected categories
:return: A timestamp-keyed list of detected categories, which we'll use later when writing out the transcript
"""
timed_categories = {}
if category_list != {}:
# Start with a new single-column section
document.add_section(WD_SECTION.CONTINUOUS)
section_ptr = document.sections[-1]._sectPr
cols = section_ptr.xpath('./w:cols')[0]
cols.set(qn('w:num'), '1')
write_custom_text_header(document, "Categories Detected")
# Table header information
table = document.add_table(rows=1, cols=3)
table.style = document.styles[TABLE_STYLE_STANDARD]
hdr_cells = table.rows[0].cells
hdr_cells[0].text = "Category"
hdr_cells[1].text = "#"
hdr_cells[1].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells[2].text = "Timestamps found at"
# Go through each detected category
for next_cat in category_list.keys():
row_cells = table.add_row().cells
row_cells[0].text = next_cat
# Instances and timestamps for the category do not exist for "negative" categories
if category_list[next_cat]["PointsOfInterest"] != []:
row_cells[1].text = str(len(category_list[next_cat]["PointsOfInterest"]))
row_cells[1].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
# Now go through each instance of it
instance = 0
for next_timestamp in category_list[next_cat]["PointsOfInterest"]:
# Add the next timestamp to the document row, with separating punctuation if needed
start_time_millis = next_timestamp["BeginOffsetMillis"]
start_time_text = convert_timestamp(start_time_millis / 1000.0)
if instance > 0:
row_cells[2].paragraphs[0].add_run(", ")
row_cells[2].paragraphs[0].add_run(start_time_text)
instance += 1
# Now add this to our time-keyed category list
if start_time_millis not in timed_categories:
timed_categories[start_time_millis] = [next_cat]
else:
timed_categories[start_time_millis].append(next_cat)
# Formatting transcript table widths
widths = (Cm(4.0), Cm(1.0), Cm(12.2))
shading_reqd = False
for row in table.rows:
for idx, width in enumerate(widths):
row.cells[idx].width = width
if shading_reqd:
set_table_cell_background_colour(row.cells[idx], ALTERNATE_ROW_COLOUR)
shading_reqd = not shading_reqd
# Finish with some spacing
document.add_paragraph()
# Return our time-keyed category list
return timed_categories