Spaces:
Running
Running
Download scripts/import_transcript_pdf.py from ignatius/curatorbot: direct link, hf CLI and curl.
- Browser
- Download file 2.11 kB
-
https://huggingface.co/spaces/ignatius/curatorbot/resolve/main/scripts/import_transcript_pdf.py
- Command line
-
hf download hf://spaces/ignatius/curatorbot/scripts/import_transcript_pdf.py
-
curl -L -o import_transcript_pdf.py https://huggingface.co/spaces/ignatius/curatorbot/resolve/main/scripts/import_transcript_pdf.py
2.11 kB
| """Turn a released museum transcript (PDF) into a Q/A transcript CuratorBot can analyse. | |
| python scripts/import_transcript_pdf.py private/RG-50.165.0093/transcript.pdf \ | |
| -o private/RG-50.165.0093/transcript.txt | |
| Prints the speakers it found and which one it took to be the interviewer. | |
| If it guessed wrong, rerun with --interviewer WH. Check the .txt before analysing: | |
| speaker codes in unusual layouts (several interviewers, OCR slips) may need a | |
| quick manual fix. Released transcripts have no timestamps, so the brief cites | |
| turn numbers instead of times. | |
| """ | |
| from __future__ import annotations | |
| import argparse | |
| import json | |
| import sys | |
| from pathlib import Path | |
| ROOT = Path(__file__).resolve().parent.parent | |
| sys.path.insert(0, str(ROOT)) | |
| from curatorbot import transcript as tx # noqa: E402 | |
| from curatorbot.importers import front_matter_fields, parse_speaker_transcript, pdf_text # noqa: E402 | |
| def main() -> int: | |
| p = argparse.ArgumentParser() | |
| p.add_argument("source", help="Transcript PDF, or a .txt already extracted from one") | |
| p.add_argument("-o", "--output", required=True, help="Q/A .txt to write (a .json with metadata is written beside it)") | |
| p.add_argument("--interviewer", help="Speaker code of the interviewer, if the guess is wrong") | |
| a = p.parse_args() | |
| src = Path(a.source) | |
| text = pdf_text(src) if src.suffix.lower() == ".pdf" else src.read_text(encoding="utf-8") | |
| res = parse_speaker_transcript(text, interviewer=a.interviewer) | |
| out = Path(a.output) | |
| out.parent.mkdir(parents=True, exist_ok=True) | |
| out.write_text(tx.to_qa_text(res["segments"]), encoding="utf-8") | |
| meta = {"speakers": res["speakers"], "interviewer": res["interviewer"], **front_matter_fields(res["front_matter"])} | |
| out.with_suffix(".json").write_text(json.dumps({"meta": meta, "segments": res["segments"]}, ensure_ascii=False, indent=1), encoding="utf-8") | |
| print(f"{len(res['segments'])} turns. Speakers {res['speakers']}; interviewer taken as {res['interviewer']}.") | |
| print(f"Front matter: {meta}") | |
| return 0 | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) | |