Worldcat 版本和馆藏发布
annas-archive.li/blog, 2025-09-11
简而言之:我们正在发布数千万条 WorldCat 记录的版本和馆藏数据,几乎涵盖了记录在 WorldCat 中的所有 ISBN。此次发布包括大约 2000 万本书的数据,这些书籍被认为仅限于世界上少数机构持有,并且尚未收录在安娜的档案中。
我们现在有了罕见书籍的待办清单,以便将它们归档并确保它们能永久保存。此版本可作为种子下载。
背景
安娜的档案的使命是保存人类的书面语言。虽然我们的种子遍布全球,共分发了 5300 万本书籍,但我们才刚刚开始得到关键问题的答案:
1. 有多少书曾经出版过?
2. 已出版的书籍中有多少百分比已在档案中保存?
3. 我们应该优先投入时间和精力保存哪些书籍?
在 2023 年 10 月,我们发布了 13 亿条 WorldCat 数据抓取,其中包含了几乎所有在 WorldCat 记录的书籍的元数据。此数据抓取给出了第一个问题的答案。随后,我们举办了数据科学和可视化竞赛,帮助我们了解了第二个问题(我们大约拥有 10-20%)。
虽然 WorldCat 数据集有 13 亿条元数据记录,但缺乏版本和馆藏信息。馆藏数据告诉我们全世界有多少图书馆拥有某一本书的副本,最重要的是,这些书籍的位置在哪里。版本信息也很重要,因为它允许我们去重属于同一基本作品的记录。版本和馆藏数据是此次发布的重点。
通过结合之前的 WorldCat 元数据和新的馆藏信息,我们终于可以创建一个罕见书籍的待办清单,以便归档并保存!
技术描述
之前发布的 WorldCat 数据抓取包含了数亿本书的详细元数据记录,以它们的“OCLC 号”进行索引。自 2023 年以来,WorldCat 在防止大规模访问和数据抓取方面提高了保护 - 他们现在在所有页面和 API 端点上使用 CloudFlare。虽然这让我们的任务更具挑战性,但我们没有被吓倒!我们只需要找到一种方法来过滤和优先处理 OCLC 号列表,然后仔细抓取版本和馆藏记录。
首先,我们将抓取限制在具有定义的 ISBN 的记录。虽然这排除了 ISBN 出现前(70 年代)的书籍,但将搜索空间从 13 亿减少到更现实的 1.7 亿记录。
WorldCat 的馆藏数据 API 端点可以查询“一个版本”或“所有版本”。由于我们最关心的是稀有作品(而不太关心该作品的各种版本),收集“所有版本”的馆藏数据就已足够。我们还可以使用哪些 OCLC 号代表同一作品的版本或“版本集群”的数据来进一步减少查询次数。我们只需对一个版本集群中的成员查询馆藏数据,并设置“所有版本”参数。
我们首先通过抓取 search_editions 端点来发现这些版本集群。这对应于 https://search.worldcat.org/formats-editions/{oclc_number} 上的信息。在该端点对抓取变得效率低下之前,我们从 7100 万个 OCLC 号中收集了版本数据。 search_editions 端点返回以 briefRecords 格式的信息,这也是我们以前见过的,每个版本集群的成员都有一个条目。这些记录在线路中出现,包含 "type":"briefrecords_json","from_filenames":["search_editions_response/XXX"
{"numberOfRecords": 2, "briefRecords": [{"oclcNumber": "100001", "title": "Transport engines of exceptionally high specific output: a symposium arranged by the Internal Combustion Engines Group [of] the Institution of Mechanical Engineers", "titleInfo": {"text": "Transport engines of exceptionally high specific output: a symposium arranged by the Internal Combustion Engines Group [of] the Institution of Mechanical Engineers"}, "creator": "Institution of Mechanical Engineers (Great Britain). Internal Combustion Engines Group", "contributors": [{"nonPersonName": {"text": "Institution of Mechanical Engineers (Great Britain). Internal Combustion Engines Group"}, "isPrimary": false}, {"nonPersonName": {"text": "University of Nottingham"}, "isPrimary": false}], "date": "1969", "machineReadableDate": "1969", "language": "eng", "generalFormat": "Book", "specificFormat": "PrintBook", "publisher": "Institution of Mechanical Engineers", "publicationPlace": "London", "isbns": ["0852980086", "9780852980088"], "subjectsText": ["Internal combustion engines Congresses", "Moteurs a\u0300 combustion interne Congre\u0300s", "Internal combustion engines", "Conference papers and proceedings"], "series": "Institution of Mechanical Engineers (Great Britain)", "seriesVolumes": ["1968-69, v. 183, pt. 3B"], "peerReviewed": "N"}, ... ]
我们发现的版本集群使得我们大大减少了馆藏查询的次数,但它是个不完整的数据集。我们需要一种新方法来去除代表同一作品的 OCLC 号的重复。
在更深入探索最初的 WorldCat 数据抓取后,我们设计了一种基于 ISBN 的方法。需要注意的是,一个 WorldCat 记录可以列出多个 ISBN,而一个 ISBN 可能与具有不同 OCLC 号的多个 WorldCat 记录相关联。有时,具有相同 ISBN 的 WorldCat 记录代表显然不同的书(例如书名、作者等)。为了理清这种重复和重叠的信息,我们创建了从 ISBN 到 OCLC 号的映射,然后将具有相同 ISBN 和相似书名(由 Levenshtein 相似度>80%决定)的所有记录合并。这使我们能够为每个 ISBN-书名对选择一个 OCLC 号进行抓取。我们根据先前发现的版本集群(同一版本集群内的 OCLC 号已合并)和初始 WorldCat 数据抓取中的“其他格式”字段,进一步减少了要抓取的馆藏信息列表。我们最初从170M的记录列表开始馆藏抓取,缩减到70M条记录。
我们抓取的第一个端点是“search_holdings_summary”端点。我们在查询中设置了“所有版本”参数。这返回了关于 OCLC 号的馆藏和版本数目的信息。这些记录在版本中按 search_holdings_summary_all_editions 类型分类。
{"totalHoldingCount": 804, "totalEditions": 20}
摘要端点给出了持有某书馆藏副本的图书馆总数,这使我们能够优先查询实际馆藏端点的稀有书籍。然后我们查询了 search_holdings 端点,返回持有每本书的图书馆的信息。这些记录在版本中按 search_holdings_all_editions_response 类型分类。馆藏列表对应于在 "other_meta_type":"library" 记录中指定的图书馆 ID。
{"totalHoldingCount": 1, "holdings": [57663], "numPublicLibraries": 1}
我们首先重点查询在不超过十个图书馆中存有的书籍的 search_holdings 端点。由于对馆藏端点的限制,大多数响应仅限于前十个结果,但这对于我们识别稀有书籍的目标来说影响不大。如有必要,可以通过更改查询中的位置参数获得更多结果。有时,这两个馆藏端点为“totalHoldingCount”数值提供了截然不同的信息。发生这种情况时,我们会重新抓取其中一个或两个端点,并能够改善大多数显著不同的记录。
类型为 search_holdings_all_editions_response_type 的记录对应于 search_holdings 端点响应的质量。general 记录最完整,而 syndicated 记录仅限于一组“精选”图书馆。null 对应于端点受限前收集的记录,并可被视为 general。
总体来说,此版本包含 7100 万个 OCLC 号的馆藏数量信息,以及 5000 万个 OCLC 号的馆藏信息,代表了大多数被 10 个或更少图书馆持有的书籍。
识别珍稀书籍
虽然我们拥有数千万的OCLC编号/ISBN的持有数量和位置数据,但识别真正的珍稀书籍并不像筛选最少持有的项目那么简单。OCLC数据库包含大量不完整、不准确和重复的记录,使这一任务变得困难。为了识别高质量的珍稀书籍,我们采用了以下启发式方法。在此次分析中,我们使用ISBN作为主键,以便于在其他Anna的档案metadata集合之间进行比较。
* 获取所有"totalHoldingCount"为X且X最多为十的OCLC编号。这可以过滤出更高质量的记录,这些记录的持有信息一致,且很可能实际存在于图书馆中。
* For a given OCLC number, if it is associated with 1 ISBN, and that ISBN is not associated with any other OCLC numbers, we call this a “tier 1” rare book. * If the OCLC number is associated with multiple ISBNS, or the ISBN is associated with more than 1 OCLC numbers, and we have holding information for all of them, and all holdings are at most X, we call this a “tier 2” rare book. * The OCLC number is recorded as “tier 3” otherwise (and may be a false positive).在两个端点均返回“totalHoldingCount”数为1的800万OCLC编号中:
* 59%属于第1层
* 第1层记录只有1.8%被包含在Anna的档案中!
* 6%属于第2层
* 第2层记录只有2.3%被包含在Anna的档案中!
* 35%属于第3层 — 可能是假阳性的珍稀书籍
* 第3层记录有4.8%被包含在Anna的档案中,比例高于其他类别。
我们可以对每个持有数量范围进行这种操作,以获得一个排序的珍稀书籍列表。
珍稀书籍保存在何处?
我们可以查看珍稀书籍列表,以识别它们被保存在何处,以及它们之间的任何共同点。对于只在单个图书馆持有的第1层书籍,最常见的图书馆是:
* 407864 books: National Diet Library (id: 87542)
* 291366 books: Biblioteca Nacional de España (id: 85312)
* 272538 books: LIBRIS - National Library of Sweden (id: 62465)
* 236242 books: Bibliothèque nationale de France (id: 40913)
* 135312 books: National Library of Finland (id: 73592)
* 110528 books: Koninklijke Bibliotheek (id: 87606)
* 109845 books: National Library of the Czech Republic (id: 53646)
* 94595 books: Biblioteca Nazionale Centrale di Roma (id: 51294)
* 80307 books: Library and Archives Canada / Bibliothèque et Archives Canada (id: 57299)
* 68693 books: Askews and Holts Library Services Ltd (id: 21513)
您会在该列表中注意到许多国家和学术图书馆。许多“珍稀书籍”都是博士论文,在一些国家,如瑞典,博士论文需要有ISBN。国家图书馆通常很好地保存博士论文,使其免费开放。但我们还需要进一步筛选,以便找到优先添加到Anna的档案的最佳书籍。
未来方向
我们已经完成了收集和组织此数据集的繁重工作,但分析才刚刚开始。我们需要更多工作来找到真正珍稀的书籍。所以请获取torrent,将其导入数据库,帮我们一起努力吧!我们将为最好的项目提供终身会员资格。从长远来看,我们设想一项努力扫描珍稀书籍的计划,以便将它们永远保存(我们可能会围绕此设定奖金)。敬请期待。
感谢
再次感谢OCLC团队。你们创建了一个最大、最有价值的metadata集合。通过我们的共同努力,我们可以确保这些书籍永远被保存下来。如果任何对“WorldCat”有深入了解的人对我们的方法或对本或其他Datasets的解读有意见,请联系我们。
- Anna's Archive团队的志愿者“M”