"""Сверка txt с PDF: какие слова из pdftotext не попали в txt (с учётом количества).""" import re import subprocess import sys from collections import Counter from pathlib import Path WORD = re.compile(r"[\wё]+", re.I) def words(text: str) -> Counter[str]: text = re.sub(r"(\w)-\s*\n\s*(\w)", r"\1\2", text) # переносы return Counter(w.lower() for w in WORD.findall(text)) args = sys.argv[1:] out = None if "--out" in args: i = args.index("--out") out = Path(args[i + 1]) del args[i : i + 2] for arg in args: pdf = Path(arg) ref = words(subprocess.run(["pdftotext", str(pdf), "-"], capture_output=True, text=True).stdout) got = words(((out / pdf.name) if out else pdf).with_suffix(".txt").read_text()) lost = ref - got total = sum(ref.values()) print(f"{pdf.name}: слов {total}, потеряно {sum(lost.values())} ({sum(lost.values()) / total:.2%})") print(" ", lost.most_common(40))