一个从 E/ExHentai 元数据转储数据库中聚合标签频次与样例画廊的脚本。它会:
- 从原始
api_dump.sqlite
读取gallery
表 - 过滤失效与过旧数据,统计各命名空间下的标签出现次数
- 为每个标签挑选最近发表的最多 25 个样例(
gid/token
列表) - 生成新的
aggregated.sqlite
,并额外统计dumped
字段的日期分布 - 自动压缩输出为
aggregated.sqlite.gz
从 GitHub Release 下载的
aggregated.sqlite.gz
可直接使用或参考。
- Node.js:^22.14.0 或 ^24.3.0
- pnpm:10.14.0
-
安装依赖
pnpm install
-
指定原始数据库路径(必做)
-
打开
src/main.ts
,将常量ORIG_DB_PATH
改为你本地的api_dump.sqlite
实际路径。 -
示例:
const ORIG_DB_PATH = 'D:\\data\\api_dump.sqlite\\api_dump.sqlite';
-
-
运行脚本
pnpm start
- 进度会按约 1% 一次打印。
- 结束后,项目根目录会生成:
aggregated.sqlite
aggregated.sqlite.gz
在 src/main.ts
顶部:
ORIG_DB_PATH
:原始转储数据库路径(必填,本地路径)。validDumpedThreshold
:有效阈值(Unix 时间戳,脚本中用日期字符串转毫秒/1000 取得)。默认:2025/07/15
。
如需更改筛选日期或命名空间,请按需修改并重新运行。
- 仅处理
gallery.current_gid IS NULL
的记录。 - 有效记录判定:
expunged = 0
且removed = 0
且(dumped ?? 0) > validDumpedThreshold
。 - 标签解析:原始字段形如
['tag1','tag2']
的字符串,脚本会替换引号后以 JSON 解析为数组。 - 统计:
- 以键
"${namespace}||${tag}"
聚合计数count
。 - 收集候选样例
{ gid, token, posted }
。
- 以键
- 写入:
- 候选按
posted
降序,取前 25 个,拼接为多行gid/token
字符串写入。 - 最终插入新表
tag_aggregate(namespace, tag, count, galleries)
。
- 候选按
- 同时统计
dumped
的日期分布,写入表dumped_distribution(date, count)
(来自原始库全部gallery.dumped
的聚合)。 - 完成后将
aggregated.sqlite
gzip 压缩为aggregated.sqlite.gz
。
-
文件:
aggregated.sqlite
:聚合后的 SQLite 数据库。aggregated.sqlite.gz
:压缩版。
-
表:
-
tag_aggregate
namespace
TEXT:命名空间tag
TEXT:标签名count
INTEGER:标签在有效记录中的出现次数galleries
TEXT:最多 25 行,形如gid/token
的样例(按posted
新到旧)
-
dumped_distribution
date
TEXT:YYYY-MM-DD
count
INTEGER:该日dumped
的记录数
-
在任意 SQLite 客户端中(如 DB Browser for SQLite)或脚本中执行:
-
查看出现次数最多的 20 个标签:
SELECT namespace, tag, count FROM tag_aggregate ORDER BY count DESC LIMIT 20;
-
查看某个标签的样例画廊(示例以
female/sample_tag
为例):SELECT galleries FROM tag_aggregate WHERE namespace = 'female' AND tag = 'sample_tag';
-
查看
dumped
的日期分布(按日期升序):SELECT date, count FROM dumped_distribution ORDER BY date ASC;
-
运行报错:找不到原始数据库
- 请确认
src/main.ts
中的ORIG_DB_PATH
指向存在的api_dump.sqlite
文件。
- 请确认
-
安装
better-sqlite3
失败- 首先确保 Node 版本与预编译版本兼容,并重试安装。
- 若回退到本地编译,请安装 C++ 构建工具与 Python(Windows 可装「Visual Studio Build Tools」+ Python),然后再次
pnpm install
。
-
运行时间较长/内存占用
- 数据量较大时属正常,脚本会打印进度。建议保证足够的磁盘空间与可用内存。
GPL-3.0-only