Skip to content

Duplicate entries in the artists' books list (same catalog record minted as multiple nodes) #70

Description

@rybesh

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

  1. Fix at source — remove the 4 accidental double-entries in zotero.sqlite (correct fix for category 1; independent of the graph build).
  2. 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.
  3. 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

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingsource:zoteroField sourced from Zotero

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions