bibclean: slugs, and whether the one a record has still names it

This commit is contained in:
funkpower
2026-09-19 14:23:36 -04:00
parent 7fa610c578
commit 14e1fcf3ef
16 changed files with 1342 additions and 34 deletions
+50
View File
@@ -0,0 +1,50 @@
"""Judge slugs the way the Python pipeline judges them.
Reads one `{"slug", "author", "title", "id"}` object per line and writes what
the slug module makes of each.
CATENA_PARITY_PYTHONPATH=/path/to/book-pipeline/src \
python3 oracle/slug.py < cases/slug/records.ndjson
"""
import json
import os
import sys
for path in os.environ.get("CATENA_PARITY_PYTHONPATH", "").split(os.pathsep):
if path:
sys.path.insert(0, path)
from slugify import slugify # noqa: E402
from book_pipeline import slugs # noqa: E402
def main() -> int:
out = sys.stdout
for line in sys.stdin.buffer.read().decode("utf-8").split("\n"):
if not line.strip():
continue
record = json.loads(line)
author, title, book_id = record.get("author"), record.get("title"), record["id"]
proposal = slugs.evaluate("x", record["slug"], author, title, book_id)
out.write(
json.dumps(
{
"slugify": slugify(title or ""),
"slug_for": slugs.slug_for(author, title, book_id),
"lead_author": slugs._lead_author(author),
"tier": proposal.tier if proposal else None,
"proposed": proposal.proposed_slug if proposal else None,
"reasons": proposal.reasons if proposal else [],
},
ensure_ascii=False,
sort_keys=True,
)
+ "\n"
)
return 0
if __name__ == "__main__":
raise SystemExit(main())