Problem
The artists' books list shows the same book more than once — e.g. (Ho + go)² = it and 28 days : a deck of cards each appear twice. Across the index, 51 titles appear on more than one row (a few on three).
Root cause
The construct query mints one ab:ArtistsBook node per Zotero itemKey and does no bibliographic deduplication. The source collection (Zotero lib 1, the curated Artists' Books Collection the pipeline builds from — see Zotero/README.md) contains multiple item records that map to the same catalog record, so each surfaces as its own list entry. The pipeline is faithfully reflecting the source; the duplication is upstream of the graph.
The repeated titles fall into three distinct categories, which is why a naive title-based dedup would be wrong:
1. Accidental double-entries — same bib record, identical call number (4)
The same item entered twice. (28 days was added to Zotero 88 seconds apart.) These are data-entry mistakes and safe to merge/remove.
| title |
itemKeys |
call number |
catalog |
| Nada para el destino = Nothing for destiny |
U3BJIXIE, N9YFMRAC |
N7433.4.V47 N23 2009 |
UNCb6975170 |
| Performing an archive |
RSGVH7R8, F5XMI2TG |
TR655 .L352 2015 |
UNCb8400904 |
| 28 days : a deck of cards |
TJEXM6ME, Q7GM2XJS |
N7433.4.N425 A13 2000 |
UNCb5647598 |
| A girl's life |
FWSWMASH, T3KKZBKH |
N7433.4.D83 G58 2002 |
UNCb4192956 |
2. Multiple physical copies — same bib record, differing (copy-specific) call numbers (40)
Legitimately separate holdings of the same work (… c. 2). One bibliographic record, multiple copies. Whether these should collapse to one browse entry is a policy call. Examples (12 of 40):
| title |
itemKeys |
call numbers |
catalog |
| Fragments of the peculiar institution |
X3KX92BL, PXCQU5L6, IA54GVQX |
…F73 2016 / …F73 2016 / N6537.S3636 A4 2016 |
UNCb8562276 |
| Printed web. |
VZC5BRP9, ZICHM787 |
…P75 no.2(2014) / …P75 no.1(2014) |
UNCb7690550 |
| El muro = The wall |
YJ9V49Y6, CBUYF3ST |
…M87 2009 c. 2 / …M87 2009 |
UNCb5944456 |
| Sheherezade : a flip book |
GAHFZ256, 566PNJJ7 |
…S54 1988 / …S54 1988 c. 2 |
UNCb2238039 |
| (Ho + go)² = it |
SQDPPBXK, YGVJRI4Y |
…H6 1986 / …H6 c. 2 |
UNCb4293240 |
((Ho + go)² lands here — copy 1 vs c. 2 of the same UNC record UNCb4293240.)
3. Same title, DIFFERENT bib record — distinct works (9) — must NOT be merged
Different books that merely share a title (different catalog records, often different author/year). Title-based dedup would wrongly collapse these.
| title |
itemKeys (→ distinct catalog records) |
| Canto a Matanzas |
4EC84LP7→UNCb7981223, XY9DI4TS→UNCb7672486 |
| Memory loss |
3L36U9YX→UNCb5645973, U64L9DKA→UNCb2262050 |
| No man's land |
885A8TBX→UNCb7614589, CJB8FZKV→UNCb7614590 |
| Ohio |
RYZJVH45→UNCb7406945, MKPJRPYM→UNCb7201879 |
| Sierra suite : (overheard) |
566FGEFI→UNCb9407230, 2B2582MX→UNCb11208956, EED7JCA6→UNCb11208955 |
| Suite vénitienne |
DBI69A84→UNCb4538590, 3M6P242S→UNCb8390381 |
| Versus |
3HXRSQYY+AS9A8WPX→UNCb8257169 (a copy pair), RZEMGHH9→UNCb9730172 |
| War cut |
TBSWMXFY→UNCb7356631, BBS6NWT3→UNCb4483215 |
(Versus spans categories 2 and 3 — two copies of one record plus a distinct work.)
Scope (counts, verified against Zotero/artists-books.csv, 1,341 rows)
- 44 catalog records are shared by >1 Zotero item → 45 redundant rows.
- 4 are accidental double-entries (identical call number).
- 40 are multi-copy holdings (differing call numbers).
- 9 repeated titles map to >1 distinct catalog record (distinct works — not duplicates).
- Also surfaced: 1 record with an empty title (
9MQS4NXM, no catalog URL) — separate data-quality nit.
The right dedup key
Not the title. The shared catalog record is the reliable signal — it's already in the source as the url column (e.g. catalog.lib.unc.edu/catalog/UNCb4293240); OCLC (from the MARC 001/WorldCat) would work equally. Grouping by catalog record cleanly separates category 3 from 1 & 2.
Options
- Fix at source — remove the 4 accidental double-entries in
zotero.sqlite (correct fix for category 1; independent of the graph build).
- Collapse in the construct query by catalog-record URL (or OCLC) — merges categories 1 and 2 onto one node; pick a surviving
itemKey and optionally record "N copies" / both call numbers.
- Leave as-is — the list then faithfully mirrors the library's holdings (every physical copy shown).
A decision is needed on category 2 (collapse copies vs. show every holding) before implementing 2.
Notes
Problem
The artists' books list shows the same book more than once — e.g.
(Ho + go)² = itand28 days : a deck of cardseach appear twice. Across the index, 51 titles appear on more than one row (a few on three).Root cause
The construct query mints one
ab:ArtistsBooknode per ZoteroitemKeyand does no bibliographic deduplication. The source collection (Zotero lib 1, the curated Artists' Books Collection the pipeline builds from — seeZotero/README.md) contains multiple item records that map to the same catalog record, so each surfaces as its own list entry. The pipeline is faithfully reflecting the source; the duplication is upstream of the graph.The repeated titles fall into three distinct categories, which is why a naive title-based dedup would be wrong:
1. Accidental double-entries — same bib record, identical call number (4)
The same item entered twice. (
28 dayswas added to Zotero 88 seconds apart.) These are data-entry mistakes and safe to merge/remove.U3BJIXIE,N9YFMRACN7433.4.V47 N23 2009RSGVH7R8,F5XMI2TGTR655 .L352 2015TJEXM6ME,Q7GM2XJSN7433.4.N425 A13 2000FWSWMASH,T3KKZBKHN7433.4.D83 G58 20022. Multiple physical copies — same bib record, differing (copy-specific) call numbers (40)
Legitimately separate holdings of the same work (
… c. 2). One bibliographic record, multiple copies. Whether these should collapse to one browse entry is a policy call. Examples (12 of 40):X3KX92BL,PXCQU5L6,IA54GVQXVZC5BRP9,ZICHM787YJ9V49Y6,CBUYF3STGAHFZ256,566PNJJ7SQDPPBXK,YGVJRI4Y(
(Ho + go)²lands here — copy 1 vsc. 2of the same UNC recordUNCb4293240.)3. Same title, DIFFERENT bib record — distinct works (9) — must NOT be merged
Different books that merely share a title (different catalog records, often different author/year). Title-based dedup would wrongly collapse these.
4EC84LP7→UNCb7981223,XY9DI4TS→UNCb76724863L36U9YX→UNCb5645973,U64L9DKA→UNCb2262050885A8TBX→UNCb7614589,CJB8FZKV→UNCb7614590RYZJVH45→UNCb7406945,MKPJRPYM→UNCb7201879566FGEFI→UNCb9407230,2B2582MX→UNCb11208956,EED7JCA6→UNCb11208955DBI69A84→UNCb4538590,3M6P242S→UNCb83903813HXRSQYY+AS9A8WPX→UNCb8257169 (a copy pair),RZEMGHH9→UNCb9730172TBSWMXFY→UNCb7356631,BBS6NWT3→UNCb4483215(
Versusspans categories 2 and 3 — two copies of one record plus a distinct work.)Scope (counts, verified against
Zotero/artists-books.csv, 1,341 rows)9MQS4NXM, no catalog URL) — separate data-quality nit.The right dedup key
Not the title. The shared catalog record is the reliable signal — it's already in the source as the
urlcolumn (e.g.catalog.lib.unc.edu/catalog/UNCb4293240); OCLC (from the MARC001/WorldCat) would work equally. Grouping by catalog record cleanly separates category 3 from 1 & 2.Options
zotero.sqlite(correct fix for category 1; independent of the graph build).itemKeyand optionally record "N copies" / both call numbers.A decision is needed on category 2 (collapse copies vs. show every holding) before implementing 2.
Notes
csv-module script overZotero/artists-books.csvgrouping byurl/title(used to produce the counts above).