Given a parse function like def parse_transcript(content): transcript_segments = [] pattern = r'\[(\d{2}:\d{2}:\d{2}\.\d{3}) --> (\d{2}:\d{2}:\d{2}\.\d{3})\] (.*)' matches = re.findall(pattern, content) for start_time, end_time, text in matches: start_seconds = timedelta(hours=int(start_time[:2]), minutes=int(start_time[3:5]), seconds=int(start_time[6:8]), milliseconds=int(start_time[9:])).total_seconds() end_seconds = timedelta(hours=int(end_time[:2]), minutes=int(end_time[3:5]), seconds=int(end_time[6:8]), milliseconds=int(end_time[9:])).total_seconds() transcript_segments.append((start_seconds, end_seconds, text)) return transcript_segments for data like [00:00:14.240 --> 00:00:14.420] the [00:00:14.420 --> 00:00:14.860] robust [00:00:14.860 --> 00:00:15.020] ness [00:00:15.020 --> 00:00:15.140] of [00:00:15.140 --> 00:00:15.500] neural [00:00:15.500 --> 00:00:15.870] networks [00:00:15.870 --> 00:00:16.200] . [00:00:16.200 --> 00:00:16.410] And [00:00:16.410 --> 00:00:16.700] this [00:00:16.700 --> 00:00:16.840] is [00:00:16.840 --> 00:00:17.200] joint write a merge() function that (1) calls parse and (2) merges words into sentences that end in period. Start with the first word and end with the period. Return a list of strings.
Given a parse function like def parse_transcript(content): transcript_segments = [] pattern = r'\[(\d{2}:\d{2}:\d{2}\.\d{3}) --> (\d{2}:\d{2}:\d{2}\.\d{3})\] (.*)' matches = re.findall(pattern, content) for start_time, end_time, text in matches: start_seconds = timedelta(hours=int(start_time[:2]), minutes=int(start_time[3:5]), seconds=int(start_time[6:8]), milliseconds=int(start_time[9:])).total_seconds() end_seconds = timedelta(hours=int(end_time[:2]), minutes=int(end_time[3:5]), seconds=int(end_time[6:8]), milliseconds=int(end_time[9:])).total_seconds() transcript_segments.append((start_seconds, end_seconds, text)) return transcript_segments for data like [00:00:14.240 --> 00:00:14.420] the [00:00:14.420 --> 00:00:14.860] robust [00:00:14.860 --> 00:00:15.020] ness [00:00:15.020 --> 00:00:15.140] of [00:00:15.140 --> 00:00:15.500] neural [00:00:15.500 --> 00:00:15.870] networks [00:00:15.870 --> 00:00:16.200] . [00:00:16.200 --> 00:00:16.410] And [00:00:16.410 --> 00:00:16.700] this [00:00:16.700 --> 00:00:16.840] is [00:00:16.840 --> 00:00:17.200] joint write a merge() function that (1) calls parse and (2) merges words into sentences that end in period. Start with the first word and end with the period. Return a list of strings.
To solve this problem, we need to merge words from a parsed transcript into sentences that end with a period. The solution involves parsing the transcript using a given function and then processing the parsed segments to form complete sentences. ### Approach 1. **Parsing the Transcript**: The provided `parse_transcript` function converts the transcript content into a list of segments, each containing start time, end time, and text (words or punctuation). 2. **Merging Segments into Sentences**: We iterate through each parsed segment, collecting words until we encounter a segment with a period. When a period is found, we join the collected words into a sentence, append the period, and reset the collection for the next sentence. This ensures that each sentence ends with a period and starts from the first word after the previous period. ### Solution Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import re from datetime import timedelta def parse_transcript(content): transcript_segments = [] pattern = r'\[(\d{2}:\d{2}:\d{2}\.\d{3}) --> (\d{2}:\d{2}:\d{2}\.\d{3})\] (.*)' matches = re.findall(pattern, content) for start_time, end_time, text in matches: start_seconds = timedelta( hours=int(start_time[:2]), minutes=int(start_time[3:5]), seconds=int(start_time[6:8]), milliseconds=int(start_time[9:]) ).total_seconds() end_seconds = timedelta( hours=int(end_time[:2]), minutes=int(end_time[3:5]), seconds=int(end_time[6:8]), milliseconds=int(end_time[9:]) ).total_seconds() transcript_segments.append((start_seconds, end_seconds, text.strip())) return transcript_segments def merge(content): segments = parse_transcript(content) sentences = [] current_sentence = [] for start, end, text in segments: stripped_text = text.strip() if stripped_text == '.': if current_sentence: sentence = ' '.join(current_sentence) + '.' sentences.append(sentence) current_sentence = [] else: current_sentence.append(stripped_text) return sentences |
I extracted the following code from that output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import re from datetime import timedelta def parse_transcript(content): transcript_segments = [] pattern = r'\[(\d{2}:\d{2}:\d{2}\.\d{3}) --> (\d{2}:\d{2}:\d{2}\.\d{3})\] (.*)' matches = re.findall(pattern, content) for start_time, end_time, text in matches: start_seconds = timedelta( hours=int(start_time[:2]), minutes=int(start_time[3:5]), seconds=int(start_time[6:8]), milliseconds=int(start_time[9:]) ).total_seconds() end_seconds = timedelta( hours=int(end_time[:2]), minutes=int(end_time[3:5]), seconds=int(end_time[6:8]), milliseconds=int(end_time[9:]) ).total_seconds() transcript_segments.append((start_seconds, end_seconds, text.strip())) return transcript_segments def merge(content): segments = parse_transcript(content) sentences = [] current_sentence = [] for start, end, text in segments: stripped_text = text.strip() if stripped_text == '.': if current_sentence: sentence = ' '.join(current_sentence) + '.' sentences.append(sentence) current_sentence = [] else: current_sentence.append(stripped_text) return sentences |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | import re from datetime import timedelta def parse_transcript(content): transcript_segments = [] pattern = r'\[(\d{2}:\d{2}:\d{2}\.\d{3}) --> (\d{2}:\d{2}:\d{2}\.\d{3})\] (.*)' matches = re.findall(pattern, content) for start_time, end_time, text in matches: start_seconds = timedelta( hours=int(start_time[:2]), minutes=int(start_time[3:5]), seconds=int(start_time[6:8]), milliseconds=int(start_time[9:]) ).total_seconds() end_seconds = timedelta( hours=int(end_time[:2]), minutes=int(end_time[3:5]), seconds=int(end_time[6:8]), milliseconds=int(end_time[9:]) ).total_seconds() transcript_segments.append((start_seconds, end_seconds, text.strip())) return transcript_segments def merge(content): segments = parse_transcript(content) sentences = [] current_sentence = [] for start, end, text in segments: stripped_text = text.strip() if stripped_text == '.': if current_sentence: sentence = ' '.join(current_sentence) + '.' sentences.append(sentence) current_sentence = [] else: current_sentence.append(stripped_text) return sentences def parse_transcript(content): transcript_segments = [] pattern = r'\[(\d{2}:\d{2}:\d{2}\.\d{3}) --> (\d{2}:\d{2}:\d{2}\.\d{3})\] (.*)' matches = re.findall(pattern, content) for start_time, end_time, text in matches: start_seconds = timedelta(hours=int(start_time[:2]), minutes=int(start_time[3:5]), seconds=int(start_time[6:8]), milliseconds=int(start_time[9:])).total_seconds() end_seconds = timedelta(hours=int(end_time[:2]), minutes=int(end_time[3:5]), seconds=int(end_time[6:8]), milliseconds=int(end_time[9:])).total_seconds() transcript_segments.append((start_seconds, end_seconds, text)) return transcript_segments answer = merge("[00:00:14.240 --> 00:00:14.420] the\n[00:00:14.420 --> 00:00:14.860] robust\n[00:00:14.860 --> 00:00:15.020] ness\n[00:00:15.020 --> 00:00:15.140] of\n[00:00:15.140 --> 00:00:15.500] neural\n[00:00:15.500 --> 00:00:15.870] networks\n[00:00:15.870 --> 00:00:16.200] .\n[00:00:16.200 --> 00:00:16.410] And\n[00:00:16.410 --> 00:00:16.700] this\n[00:00:16.700 --> 00:00:16.840] is\n[00:00:16.840 --> 00:00:17.200] joint\n") expected = [' the robustness of neural networks.', ' And this is joint'] assert answer == expected, f'Wrong answer; got {answer} instead of {expected}' print('All tests passed') |
Traceback (most recent call last):
File "/usr/src/app/main.py", line 58, in <module>
assert answer == expected, f'Wrong answer; got {answer} instead of {expected}'
^^^^^^^^^^^^^^^^^^
AssertionError: Wrong answer; got ['the robust ness of neural networks.'] instead of [' the robustness of neural networks.', ' And this is joint']
Testing if the previous output contains the string All tests passed
: False