Spaces:
Sleeping
Sleeping
| import re | |
| import math | |
| def group_sentences(text, target_sec=10): | |
| raw_sentences = re.split(r'(?<=[.?!])\s+', text.strip()) | |
| scenes = [] | |
| curr_text, curr_time = "", 0 | |
| for s in raw_sentences: | |
| if not s: continue | |
| s_time = max(5, math.ceil(len(s)/35)*5) | |
| if curr_time + s_time > target_sec and curr_text: | |
| scenes.append({"text": curr_text, "time": curr_time}) | |
| curr_text, curr_time = s, s_time | |
| else: | |
| curr_text = (curr_text + " " + s).strip() | |
| curr_time += s_time | |
| if curr_text: scenes.append({"text": curr_text, "time": curr_time}) | |
| return scenes | |
| def get_smart_filename(index, text): | |
| clean_text = re.sub(r'[\\/*?:"<>|]', "", text).strip() | |
| name_part = clean_text[:12] if len(clean_text) <= 12 else f"{clean_text[:6]}~{clean_text[-4:]}" | |
| return f"{index+1:02d}_{name_part}.png" | |
| def make_scene_snippet(text, head_len=10, tail_len=10, max_len=60): | |
| clean_text = " ".join((text or "").strip().split()) | |
| clean_text = re.sub(r'[\\/*?:"<>|]', "", clean_text) | |
| clean_text = re.sub(r"[^0-9A-Za-z가-힣\s.~]", " ", clean_text) | |
| clean_text = re.sub(r"[.]{2,}", ".", clean_text) | |
| clean_text = re.sub(r"\s+", " ", clean_text).strip() | |
| if not clean_text: | |
| return "scene" | |
| if len(clean_text) <= head_len + tail_len + 1: | |
| snippet = clean_text | |
| else: | |
| snippet = f"{clean_text[:head_len]}~{clean_text[-tail_len:]}" | |
| snippet = re.sub(r"\s+", " ", snippet).strip() | |
| return snippet[:max_len].rstrip(" .") | |