| import re |
|
|
| |
| css = """ |
| .scrollable-table { |
| max-height: 300px; |
| overflow-y: auto; |
| border: 1px solid #ccc; |
| padding: 10px; |
| |
| } |
| .scrollable-table table { |
| width: 100%; |
| border-collapse: collapse; |
| background-color: #FFFFFF; |
| |
| } |
| .scrollable-table th, .scrollable-table td { |
| border: 1px solid #ddd; |
| padding: 8px; |
| text-align: left; |
| color: #000000 |
| |
| } |
| .scrollable-table th { |
| background-color: #EAF2FF; |
| color: #3366CC; |
| } |
| """ |
|
|
| def parse_transcript(transcript): |
| |
| pattern = re.compile(r'(\d{2}:\d{2})\s+(.+?)(?=\d{2}:\d{2}|$)', re.DOTALL) |
| matches = pattern.findall(transcript) |
| |
| timestamps = [] |
| texts = [] |
| |
| for match in matches: |
| timestamps.append(match[0]) |
| texts.append(match[1].strip()) |
| |
| return timestamps, texts |
|
|
| def create_transcript_table(timestamps, transcript_text): |
| table_html = '<div class="scrollable-table">\n' |
| table_html += '<table>\n' |
| table_html += ' <thead>\n' |
| table_html += ' <tr>\n' |
| table_html += ' <th>Timestamp</th>\n' |
| table_html += ' <th>Transcript</th>\n' |
| table_html += ' </tr>\n' |
| table_html += ' </thead>\n' |
| table_html += ' <tbody>\n' |
| for ts, text in zip(timestamps, transcript_text): |
| table_html += ' <tr>\n' |
| table_html += f' <td>{ts}</td>\n' |
| table_html += f' <td>{text}</td>\n' |
| table_html += ' </tr>\n' |
| table_html += ' </tbody>\n' |
| table_html += '</table>\n' |
| return table_html |
|
|
| def filter_transcript(): |
| timestamps = [ |
| "15.0 - 17.0", |
| "38.08 - 39.50" |
| ] |
| transcript_text = [ |
| "Sad (prompt; 1st)", |
| "Because he fell (no prompt; 2nd)" |
| ] |
| return timestamps, transcript_text |
|
|
| |
| def generate_guidance(): |
| guidance_text = """ Engagement: Student may display behaviors such as rocking when showing engagement. |
| Impact factors: Weather (e.g., raining) can impact student’s performance.""" |
| return guidance_text |