in python/ts-to-word.py [0:0]
def write_analytics_sentiment(data, document):
"""
Writes out tables for per-period, per-speaker sentiment from the analytics mode, as well as
the overall sentiment for a speaker
:param data: Transcribe results data
:param document: Docx document to add the tables to
"""
# Start with a new 2-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'), '2')
# Table 1 - Period sentiment per speaker
write_custom_text_header(document, "Call Sentiment per Quarter of the call")
table = document.add_table(rows=1, cols=5)
table.style = document.styles[TABLE_STYLE_STANDARD]
hdr_cells = table.rows[0].cells
hdr_cells[0].text = "Speaker"
hdr_cells[1].text = "Q1"
hdr_cells[2].text = "Q2"
hdr_cells[3].text = "Q3"
hdr_cells[4].text = "Q4"
for col in range(1, 5):
hdr_cells[col].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
# Work through our sentiment period data
period_sentiment = data["ConversationCharacteristics"]["Sentiment"]["SentimentByPeriod"]["QUARTER"]
for caller in period_sentiment:
# First column is the speaker
row_cells = table.add_row().cells
row_cells[0].text = caller.title()
col_offset = 1
# Further columns on that row hold the value for one period on the call
for period in period_sentiment[caller]:
row_cells[col_offset].text = str(period["Score"])
row_cells[col_offset].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
cell_colour = get_text_colour_analytics_sentiment(period["Score"])
set_table_cell_background_colour(row_cells[col_offset], cell_colour)
col_offset += 1
# Put in a short table footer, then move to the next column
document.add_paragraph() # Spacing
write_small_header_text(document, "SENTIMENT: Range from +5 (Positive) to -5 (Negative)", 0.9)
# Table 2 - Overall speaker sentiment
write_custom_text_header(document, "Overall Speaker Sentiment")
table = document.add_table(rows=1, cols=2)
table.style = document.styles[TABLE_STYLE_STANDARD]
hdr_cells = table.rows[0].cells
hdr_cells[0].text = "Speaker"
hdr_cells[1].text = "Sentiment"
hdr_cells[1].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
speaker_sentiment = data["ConversationCharacteristics"]["Sentiment"]["OverallSentiment"]
for caller in speaker_sentiment:
row_cells = table.add_row().cells
row_cells[0].text = caller.title()
row_cells[1].text = str(speaker_sentiment[caller])
row_cells[1].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
cell_colour = get_text_colour_analytics_sentiment(speaker_sentiment[caller])
set_table_cell_background_colour(row_cells[1], cell_colour)
# Keep the columns narrow for the 2nd table
widths = (Cm(2.2), Cm(1.5))
for row in table.rows:
for idx, width in enumerate(widths):
row.cells[idx].width = width
document.add_paragraph() # Spacing