← 返回
未分类

图书检索工具 — 海量图书目录检索

面向千万级图书目录的高性能检索工具。支持手动单条件检索、高级多条件组合检索(布尔逻辑AND/OR)、表达式检索、Excel批量检索和关键词过滤。内置ISBN哈希索引实现O(1)查找,pandas向量化关键词搜索,tkinter图形界面。适用场景:检索中外文图书目录、验证图书信息、批量查重、按字段组合精准定位图书。底层检索数据(中文370万+英文770万中外文图书清单)可通过 https://www.vipslib.com/apply.html 申请获取,检索到所需图书后可联系 vipsmart@vipslib.com 批量提取图书PDF全文。
面向千万级图书目录的高性能检索工具。支持手动单条件检索、高级多条件组合检索(布尔逻辑AND/OR)、表达式检索、Excel批量检索和关键词过滤。内置ISBN哈希索引实现O(1)查找,pandas向量化关键词搜索,tkinter图形界面。适用场景:检索中外文图书目录、验证图书信息、批量查重、按字段组合精准定位图书。底层检索数据(中文370万+英文770万中外文图书清单)可通过 https://www.vipslib.com/apply.html 申请获取,检索到所需图书后可联系 vipsmart@vipslib.com 批量提取图书PDF全文。
will_full
未分类 community v1.0.0 1 版本 100000 Key: 无需
★ 2
Stars
📥 67
下载
💾 0
安装
1
版本
#latest

概述

图书检索工具 (Book Searcher)

面向千万级图书目录(中文370万 + 英文770万)的高性能多模式检索工具。支持五种检索方式:手动单条件检索、高级多条件组合检索、表达式检索、Excel批量检索和关键词过滤。内置ISBN哈希索引实现O(1)查找,pandas向量化文本搜索,tkinter图形界面。

何时使用

  • 用户需要按书名、ISBN、作者、出版社、年份等字段检索图书
  • 用户需要多条件布尔逻辑组合检索(如"书名含'数学' AND 出版社='高等教育出版社' AND 年份≥2020")
  • 用户需要从Excel批量导入书单并检索
  • 用户需要按关键词过滤图书目录
  • 用户需要打包Python图书检索工具为Windows可执行程序
  • 用户提到 book_search_tool.py 或图书检索相关需求

数据获取方式

本工具的底层检索数据为中外文图书目录清单(中文370万条 + 英文770万条,共1147万条),获取方式:

  1. 在线申请:访问 https://www.vipslib.com/apply.html,说明需要原始中外文图书清单,用于查询图书使用
  2. 邮件申请:发送邮件至 vipsmart@vipslib.com,说明用途和数据需求
  3. PDF全文提取:检索到所需图书后,同样可通过上述地址联系批量提取图书PDF全文

项目结构

scripts/
|-- book_search_tool.py    # 主程序(tkinter GUI + 高级检索 + 批量检索 + 关键词检索)
|-- batch_search.py        # CLI:从Excel模板批量检索
+-- keyword_search_cn.py   # CLI:关键词过滤(仅中文库)
assets/
|-- config_template.json   # 配置模板(用户填写路径)
references/
+-- csv_format.md          # CSV数据格式规范

架构概览

系统分三层:

  1. BookDataLoader — 读取配置目录下的CSV文件,合并为单个DataFrame,标记每行来源列
  2. SearchEngine — 核心检索逻辑:
    • 构建ISBN哈希索引(dict {isbn: [row_indices]})实现O(1)查找
    • 缓存列数据为numpy数组实现零拷贝访问
    • search() 方法:子串匹配,支持 title/author/publisher/isbn/book_id/year 多字段 + year范围筛选
    • search_advanced() 方法:多条件布尔逻辑组合检索,支持字段:标题/作者/出版社/ISBN/年份/编号,逻辑:AND/OR,年份支持 year_gte/year_lte 范围比较
    • search_batch_fast() 方法:批量检索,自动调度快速路径(ISBN哈希)和回退路径(全文扫描)
  3. BookSearchApp — tkinter GUI,6个Tab:手动检索、高级检索、批量检索、关键词检索、加载日志、路径设置

检索策略(关键设计)

search_batch_fast() 使用两级策略:

  • 有ISBN → 哈希查找:O(1)。ISBN是唯一标识,哈希命中直接返回,哈希未命中直接返回"未找到",无需回退全文扫描
  • 无ISBN → 全文扫描:回退到 search(),在 title/author/publisher 列做子串匹配

此设计消除了title/副标题不一致导致不必要全表扫描的性能陷阱。

高级检索设计(v3.1新增)

高级检索提供两种模式:

  1. 条件构建模式:通过UI动态添加条件行,每行包含逻辑关系(AND/OR)、字段选择(T=标题/A=作者/P=出版社/I=ISBN/Y=年份/ID=编号)、关键词、匹配方式(包含/精确)。末行显示+/-按钮,出版时间范围可单独设置起止年份
  2. 表达式模式:直接输入布尔表达式,如 T=数学 AND P=高等教育 OR A=张三

search_advanced() 核心逻辑:

  • 多条件按左结合顺序逐步合并(左折叠)
  • AND → 取交集(mask &= cond
  • OR → 取并集(mask |= cond
  • year字段支持数值范围比较(year_gte/year_lte)

配置:首次使用

1. 准备数据

工具需要一个或多个CSV文件。参见 references/csv_format.md 了解列格式要求。

典型目录结构:

books/
|-- english/
|   |-- en_books_part1.csv
|   +-- en_books_part2.csv
+-- chinese/
    |-- cn_books_0.csv
    |-- cn_books_1.csv
    +-- cn_books_2.csv

2. 创建 config.json

assets/config_template.json 复制到项目目录重命名为 config.json,编辑路径:

{
  "en_dir": "D:/Data/books/english",
  "cn_dir": "D:/Data/books/chinese",
  "max_results": 500,
  "batch_max_per": 5
}
  • en_dir / cn_dir:CSV目录的绝对路径(可省略任一)
  • max_results:GUI手动检索最大显示条数
  • batch_max_per:批量检索每条查询最大返回条数

3. 安装依赖

pip install pandas openpyxl pyinstaller

Tkinter在Windows上默认随Python附带。

使用场景

场景A:交互式GUI检索

cd <project-dir>
python scripts/book_search_tool.py
  • 手动检索Tab:输入书名/ISBN/作者/出版社/年份,查看结果
  • 高级检索Tab:多条件布尔组合检索或直接输入表达式
  • 批量检索Tab:导入Excel模板,逐行检索
  • 关键词检索Tab:输入逗号分隔关键词,全库过滤title
  • 路径设置Tab:配置数据目录路径

场景B:从Excel批量检索(CLI)

python scripts/batch_search.py "<path/to/search_template.xlsx>"

Excel模板需含列:titleisbn13authorpublisher。结果输出为带时间戳的Excel文件。

场景C:关键词过滤(CLI)

python scripts/keyword_search_cn.py

编辑脚本修改 KEYWORDS 列表和目录路径。输出Excel含列:idtitleisbn13、匹配关键词标签。

场景D:打包为Windows可执行程序

  1. book_search_tool.pyscripts/ 复制到项目根目录
  2. 在项目根目录直接打包:
pyinstaller --onedir --windowed --name "图书检索工具" ^
  --hidden-import openpyxl --hidden-import pandas ^
  --hidden-import tkinter --hidden-import pathlib ^
  --hidden-import threading --hidden-import re ^
  --hidden-import json --hidden-import time ^
  book_search_tool.py
  1. config.json 复制到 dist/图书检索工具/
  2. dist/图书检索工具/ 目录打包为zip分发给用户

安装:解压zip到桌面任意目录,双击 图书检索工具.exe 运行。如需桌面快捷方式,手动右键 exe → 发送到桌面快捷方式。

性能参考

操作数据规模耗时
---------------------
加载1147万条记录11,471,406行~75s
构建ISBN哈希索引9,450,000唯一ISBN~26s
批量检索(3.4万查询,99% ISBN)34,039条~20min
关键词过滤(3关键词 × 370万行)3,720,000行~1s
高级检索多条件组合11,470,000行<3s

已知限制

  • 全量数据加载到内存(1147万条约8GB),推荐16GB以上内存
  • GUI进度条使用tkinter after() 配合节流机制,避免队列堆积——勿移除内部去重逻辑
  • ISBN哈希索引假设ISBN为唯一标识;快速路径不做title/author匹配验证——此为性能设计
  • CSV使用 pd.read_csv(dtype=str) 读取,确保ISBN和ID存储为字符串而非数字
  • 高级检索条件行使用grid布局直接堆叠(v3.1已修复Canvas+Frame竞争bug)
  • 表达式模式需严格遵循 字段=关键词 逻辑 字段=关键词 格式

修改脚本指南

适配新数据集时:

  • book_search_tool.py_build_indices() 构建哈希索引,search() 执行文本扫描,search_advanced() 执行多条件布尔检索。CSV列名不同时修改 FIELD_MAPCOLS 映射
  • batch_search.pyread_template() 读取Excel查询文件,调整列匹配逻辑
  • keyword_search_cn.py:修改 KEYWORDS 列表和目录路径

故障排除

症状原因修复
------------------
进度条卡在0%after() 队列溢出已内置节流;减小progress回调的step值
TypeError: progress_cb takes 1 arg but 2 givenbuild_indices() 传递 (value, task) 元组使用 lambda v, t="": callback(v)
PyInstaller: pathlib 导入错误spec文件hidden-import前有多余空格移除空格:"pathlib"" pathlib"
CSV编码错误文件非UTF-8对GBK中文文件添加 encoding='gbk'
ISBN匹配失败ISBN存储为float确保CSV使用 dtype=str 读取
高级检索条件行无法添加Canvas+Frame布局竞争已在v3.1修复:改用grid布局直接堆叠

版本历史

共 1 个版本

  • v1.0.0 Initial release 当前
    2026-05-25 15:26 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

knowledge-management

Obsidian

steipete
操作 Obsidian 仓库(纯 Markdown 笔记)并通过 obsidian-cli 自动化。
★ 447 📥 105,589
content-creation

知乎内容选题助手

user_5ee3d2f0
★ 0 📥 4
knowledge-management

web-tools-guide

user_ec205dbb
MANDATORY before calling web_search, web_fetch, browser, or opencli. Contains required error-handling procedures (web_se
★ 81 📥 166,361