feat: von Hand nachbearbeitete Ausgabe wird nicht mehr überschrieben
abschrift_korrigieren.py merkt sich die Prüfsumme der geschriebenen Ausgabe in <Ausgabe>.parts/ausgabe.sha256. Weicht die vorhandene Datei davon und vom neuen Ergebnis ab, bleibt sie erhalten; das Ergebnis kommt nach <Name>.neu.korrigiert.txt (mit eigenem Bericht) und es gibt eine Warnung. --ueberschreiben ersetzt die Datei trotzdem. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
ed721b1773
commit
37e4a2bca0
1 changed files with 142 additions and 5 deletions
|
|
@ -33,6 +33,7 @@ MAX_WORD_DEVIATION = 0.05 # ab dieser Abweichung der Wortzahl wird gewarnt
|
|||
PARAGRAPH_WINDOW = 150 # Sätze pro Anfrage bei der Absatzgliederung
|
||||
MAX_PARAGRAPH_SENTENCES = 10 # längere Absätze werden nachträglich geteilt
|
||||
MIN_PARAGRAPH_SENTENCES = 3 # kürzere Absätze werden mit dem Nachbarn verbunden
|
||||
OUTPUT_RECORD = "ausgabe.sha256" # in <Ausgabe>.parts/: Prüfsumme der zuletzt geschriebenen Ausgabe
|
||||
|
||||
SENTENCE_END = re.compile(r"[.!?…][\"'»«“”)\]]*$")
|
||||
SENTENCE_SPLIT = re.compile(r"(?:(?<=[.!?…])|(?<=[.!?…][\"'»«“”)\]]))\s+")
|
||||
|
|
@ -641,6 +642,11 @@ def parse_args():
|
|||
"--kein-bericht", action="store_true",
|
||||
help="keinen Änderungsbericht <Ausgabe>.aenderungen.html schreiben",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--ueberschreiben", action="store_true",
|
||||
help="die Ausgabedatei auch dann überschreiben, wenn sie seit dem letzten Lauf "
|
||||
"von Hand geändert wurde (sonst entsteht <Name>.neu.korrigiert.txt)",
|
||||
)
|
||||
add_time_options(parser)
|
||||
args = parser.parse_args(range_argv(sys.argv[1:]))
|
||||
resolve_time_ranges(parser, args)
|
||||
|
|
@ -708,6 +714,35 @@ def read_source(args):
|
|||
return raw, args.output, base_language(args.lang or DEFAULT_LANGUAGE)
|
||||
|
||||
|
||||
def text_hash(text):
|
||||
return hashlib.sha256(text.encode("utf-8")).hexdigest()
|
||||
|
||||
|
||||
def new_output_path(target):
|
||||
"""rede.korrigiert.txt -> rede.neu.korrigiert.txt, out.txt -> out.neu.txt"""
|
||||
if target.name.endswith(".korrigiert.txt"):
|
||||
stem = target.name.removesuffix(".korrigiert.txt")
|
||||
return target.with_name(f"{stem}.neu.korrigiert.txt")
|
||||
return target.with_name(f"{target.stem}.neu{target.suffix}")
|
||||
|
||||
|
||||
def choose_output(target, content, parts_dir, overwrite=False):
|
||||
"""Where to write `content`: the target, unless it was changed by hand.
|
||||
|
||||
A target counts as changed by hand if it differs both from what the last
|
||||
run wrote there (checksum in parts_dir) and from the new content. Without
|
||||
a checksum (first run, .parts deleted) any differing target counts.
|
||||
"""
|
||||
if overwrite or not target.exists():
|
||||
return target
|
||||
current = target.read_text(encoding="utf-8")
|
||||
record = parts_dir / OUTPUT_RECORD
|
||||
last = record.read_text(encoding="utf-8").strip() if record.exists() else None
|
||||
if current == content or text_hash(current) == last:
|
||||
return target
|
||||
return new_output_path(target)
|
||||
|
||||
|
||||
def main():
|
||||
global MODEL
|
||||
args = parse_args()
|
||||
|
|
@ -800,7 +835,18 @@ def main():
|
|||
corrected_blocks.append((header, paragraphs))
|
||||
|
||||
text = join_segments(corrected_blocks, header_gap="\n\n")
|
||||
target.write_text(text + "\n", encoding="utf-8")
|
||||
content = text + "\n"
|
||||
output = choose_output(target, content, parts_dir, args.ueberschreiben)
|
||||
output.write_text(content, encoding="utf-8")
|
||||
if output == target:
|
||||
(parts_dir / OUTPUT_RECORD).write_text(text_hash(content) + "\n", encoding="utf-8")
|
||||
else:
|
||||
print(
|
||||
f"WARNUNG: {target} wurde seit dem letzten Lauf geändert (von Hand?) und "
|
||||
f"bleibt erhalten. Neues Ergebnis: {output} "
|
||||
"(mit --ueberschreiben wird die Datei ersetzt)"
|
||||
)
|
||||
target = output
|
||||
print(f"Fertig: {target}")
|
||||
|
||||
if not args.kein_bericht:
|
||||
|
|
|
|||
Loading…
Reference in a new issue