feat: Ausschnitte an Satzgrenzen erweitern (--exakt schneidet genau)
Bei -s/-e werden angeschnittene Sätze an beiden Enden vollständig aufgenommen (höchstens 30 s über den Zeitraum hinaus). rede_korrigieren.py weist das Modell bei Ausschnitten zusätzlich an, nichts zu ergänzen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
9bbf325bd3
commit
faea4bf465
1 changed files with 234 additions and 28 deletions
|
|
@ -142,6 +142,10 @@ PROMPTS = {
|
|||
"glossary": "Glossar: korrekte Schreibweisen von Namen und Begriffen, die in "
|
||||
"dieser Rede vorkommen. Falsch erkannte Varianten davon in der Abschrift "
|
||||
"stillschweigend korrigieren:",
|
||||
"excerpt": "Der Text ist ein Ausschnitt aus einer längeren Rede und kann mitten "
|
||||
"im Satz beginnen oder enden. Vervollständige angeschnittene Sätze nicht und "
|
||||
"ergänze kein Wort, auch nicht in einer Markierung; lass einen unvollständigen "
|
||||
"Anfang oder Schluss unverändert stehen.",
|
||||
},
|
||||
"en": {
|
||||
"system": SYSTEM_EN,
|
||||
|
|
@ -150,6 +154,10 @@ PROMPTS = {
|
|||
"glossary": "Glossary: correct spellings of names and terms that occur in "
|
||||
"this speech. Silently correct misrecognized variants of them in the "
|
||||
"transcript:",
|
||||
"excerpt": "The text is an excerpt from a longer speech and may begin or end "
|
||||
"in the middle of a sentence. Do not complete cut-off sentences and do not "
|
||||
"add any word, not even in a mark; leave an incomplete beginning or ending "
|
||||
"unchanged.",
|
||||
},
|
||||
}
|
||||
DEFAULT_LANGUAGE = "de"
|
||||
|
|
@ -163,13 +171,16 @@ PARAGRAPH_FORMAT = {
|
|||
}
|
||||
|
||||
|
||||
def build_system(glossary, lang=DEFAULT_LANGUAGE):
|
||||
"""Append glossary terms (correct spellings) to the system prompt."""
|
||||
def build_system(glossary, lang=DEFAULT_LANGUAGE, excerpt=False):
|
||||
"""Append the excerpt note and glossary terms (correct spellings) to the system prompt."""
|
||||
prompts = PROMPTS[lang]
|
||||
system = prompts["system"]
|
||||
if excerpt:
|
||||
system += f"\n{prompts['excerpt']}\n"
|
||||
if not glossary:
|
||||
return prompts["system"]
|
||||
return system
|
||||
terms = "\n".join(f"- {term}" for term in glossary)
|
||||
return f"{prompts['system']}\n{prompts['glossary']}\n{terms}\n"
|
||||
return f"{system}\n{prompts['glossary']}\n{terms}\n"
|
||||
|
||||
|
||||
def read_glossary(path):
|
||||
|
|
@ -544,7 +555,7 @@ def save_raw_text(path, raw):
|
|||
def read_source(args):
|
||||
"""Return the raw transcript, the output path and the language of the speech."""
|
||||
if args.url is not None:
|
||||
info, lines = fetch_text(args.url, args.lang, args.start, args.ende)
|
||||
info, lines = fetch_text(args.url, args.lang, args.start, args.ende, args.exakt)
|
||||
lang = base_language(args.lang or original_language(info) or DEFAULT_LANGUAGE)
|
||||
if lang not in PROMPTS:
|
||||
raise SystemExit(
|
||||
|
|
@ -558,7 +569,7 @@ def read_source(args):
|
|||
|
||||
raw = args.input.read_text(encoding="utf-8-sig")
|
||||
if args.input.suffix.lower() == ".vtt":
|
||||
raw = "\n".join(vtt_to_lines(raw, args.start, args.ende))
|
||||
raw = "\n".join(vtt_to_lines(raw, args.start, args.ende, args.exakt))
|
||||
return raw, args.output, base_language(args.lang or DEFAULT_LANGUAGE)
|
||||
|
||||
|
||||
|
|
@ -583,7 +594,8 @@ def main():
|
|||
)
|
||||
terms += more_terms
|
||||
replacements += more_replacements
|
||||
system = build_system(terms, lang)
|
||||
excerpt = args.start is not None or args.ende is not None
|
||||
system = build_system(terms, lang, excerpt)
|
||||
|
||||
# Subtitle line breaks carry no meaning; send plain running text
|
||||
text = " ".join(raw.split())
|
||||
|
|
|
|||
Loading…
Reference in a new issue