ryder-mawby/darknet-drug-classifier
GitHub: ryder-mawby/darknet-drug-classifier
这是一个多语言暗网毒品分类管道,用于将市场列表数据准确分类到57个细粒度类别,支持研究与监控。
Stars: 0 | Forks: 0
# 暗网毒品分类器
面向暗网市场列表数据的多语言毒品分类管道。将原始供应商列表标题解析为57个细粒度毒品类别,涵盖英语、德语、荷兰语、芬兰语和法语,意大利语、西班牙语和俄语支持正在进行中(目标数据为Hydra/Nemesis时期)。
最初使用Stata(`MASTER_PIPELINE.do`)为我的工作论文《反重力存在:来自暗网毒品市场的证据》(https://github.com/ryder-mawby/darknet-gravity-model/raw/main/Mawby_Gravity.pdf)开发——在353,983条Agora列表(2014–2015年)上验证,**准确率达98.4%**。此仓库是Python实现,并扩展用于实时市场数据。
## 功能概述
```
"China White — uncut, tested, 0.5g packs"
"100x Blue Xanax bars 2mg Galenika"
"Cocaïne 1g bolivienne pure 95%"
"10g Amnesia Haze Indoor AAA NL Anbau"
```
并返回:
| 字段 | 描述 |
|---|---|
| `drugtype` | 大类:`agricultural`、`synthetic`、`cocaine`、`cannabis`、`non_drug` |
| `drugtype_granular` | 57个细粒度标签之一(`heroin`、`fentanyl`、`benzodiazepines`等) |
| `synthetic` | 二元值:1 = 合成药物,0 = 农业/植物性药物 |
| `non_drug` | 如果列表涉及欺诈、数字商品、假冒产品等,则为1 |
| `non_drug_category` | 非毒品列表的子类别(13个类别) |
| `currency_accepted` | 从爬虫字段解析的支付标志(`BTC`、`XMR`、`USDT_TRC20`、托管/FE) |
## 管道架构
8个阶段,完全镜像`MASTER_PIPELINE.do`:
阶段1中的阿片类药物拆分是此数据中最困难的问题——同一市场类别(“阿片类药物”)包含海洛因、芬太尼、羟考酮和丁丙诺啡,它们在任何重力模型中都需要不同的处理。该管道使用200多个关键词的层次结构和消除歧义规则,在列表级别解析此问题(例如,“oxy” → 避免“oxygen”、“proxy”、“epoxy”)。
## 语言覆盖
| 语言 | 覆盖范围 |
|---|---|
| 英语 | 完整(所有8个阶段) |
| 德语 | 广义毒品类型 + 细粒度类别(兴奋剂、大麻、阿片类药物) |
| 荷兰语 | 广义毒品类型 + 细粒度类别 |
| 法语 | 广义毒品类型 + 细粒度类别 |
| 芬兰语 | 广义毒品类型 |
| 意大利语 | 进行中 |
| 西班牙语 | 进行中 |
| 俄语 | 进行中(Hydra数据) |
## 细粒度类别(57个)
```
Agricultural: heroin, morphine, codeine, opium, kratom
cocaine, crack_cocaine, cocaine_analogue
cannabis, synthetic_cannabinoid
Synthetic opioids: fentanyl, oxycodone, hydrocodone, hydromorphone,
oxymorphone, methadone, tramadol, tapentadol,
tilidin, synthetic_opioid, promethazine
Stimulants: mdma, mda, methamphetamine, amphetamine, adderall,
ritalin, modafinil, mephedrone, mdpv, cathinones
Psychedelics: lsd, psilocybin, dmt, 2cb, mescaline, nbome,
4_aco_dmt, tryptamine_rc, ibogaine, salvia,
psychedelic_other
Sedatives: benzodiazepines, novel_benzodiazepine, z_drug,
pregabalin, gabapentinoid
Dissociatives: ketamine, ghb_gbl, pcp, dxm, dissociative_other,
carisoprodol
Other: steroids, sildenafil, prescription_other,
opioid_antagonist (excluded from gravity panel)
Non-drug: fraud_financial, fake_documents, hacking_guides,
replica_goods, weapons, digital_goods, tobacco,
cannabis_seeds, paraphernalia, money_schemes,
vendor_admin, other_nondrug
```
## 安装
```
git clone https://github.com/ryder-mawby/darknet-drug-classifier
cd darknet-drug-classifier
pip install pandas
```
无其他依赖项。分类器本身是纯Python(无机器学习,无外部模型——关键词匹配是有意为之,旨在研究环境中保证可重复性和可解释性)。
## 用法
### 单个列表
```
from darknet_classifier import classify
result = classify(
title="100x Blue Xanax bars 2mg Galenika",
cat_general="Depressants",
)
# {
# "drugtype": "合成",
# "drugtype_granular": "benzodiazepines",
# "synthetic": 1,
# "non_drug": 0,
# "non_drug_category": ""
# }
```
### 批量管道(CSV → 分类输出)
```
from darknet_classifier import run_pipeline
run_pipeline(
input_path="anubis_all_20260519.csv",
output_dir="output/anubis",
market_name="anubis",
)
```
生成:
- `*_classified_full.csv` — 所有行,附加分类列
- `*_drugs_only.csv` — 仅毒品列表(non_drug=0,无阿片类药物拮抗剂)
- `*_nondrug.csv` — 非毒品列表,附带类别细分
- `*_gravity_panel.csv` — 按市场 × 出口商 × 进口商 × YM × drugtype 聚合的双边面板
### 列标准化
该管道会自动映射不同市场模式下的列名:
| 爬虫字段 | 内部字段 |
|---|---|
| `title`、`name`、`listing_title` | `TITLE` |
| `category`、`product_type` | `CATEGORY_GENERAL` |
| `ships_from`、`dispatch` | `SHIP_FROM` |
| `ships_to` | `SHIP_TO` |
| `has_btc`、`has_xmr`、`is_fe` | `HAS_BTC`、`HAS_XMR`、`IS_FE` |
| `scrape_date`、`date` | `YM` |
## 支付 / 货币标志
实时市场爬虫根据市场模式收集不同的支付信号。该管道将这些解析为统一的`currency_accepted`字段:
```
BTC|XMR [escrow] → accepts both, with escrow
XMR [FE] → Monero only, finalize early
USDT_TRC20 → Vortex market (USDT on TRC20 rail — dominant illicit stablecoin payment)
```
这与TRC20/USDT支付通道研究线索相关——经过USDT列表过滤的Vortex数据是直接观察2022年后非法市场从BTC/XMR转向稳定币趋势的窗口。
## 背景
此管道是为《反重力存在:来自暗网毒品市场的证据》(https://rydermawby.com)构建的,该论文将PPML重力模型应用于来自Hikari档案馆(Nicolas Christin, CMU)的353,983条清理后的加密市场列表,时间跨度为2016–2022年。核心发现是,标准的重力促进变量(邻近性、共同语言、殖民联系)在非法毒品贸易中符号反转——这与通过双边执法合作(MLAT)介导的检测风险机制相一致。
该分类管道也正被应用于David Décary-Hétu (UdeM) 提供的2013–2016年档案,该档案涵盖22个市场和约98.3万条毒品列表,用于本文的扩展研究。
## 准确率
| 数据集 | 数量 | 准确率 |
|---|---|---|
| Agora 2014–2015(验证集) | 353,983 | 98.4% |
| Décary-Hétu 档案 2013–2016 | ~983,000 | 与主结果一致 |
| 当前实时市场(2026) | 持续中 | 对新物质约50%* |
*2026年实时数据准确率较低(约50%),因为市场构成发生了变化——更新的物质、不同的俚语习惯、更混淆的标题。扩大当前市场的关键词覆盖范围是正在进行的工作。
## 复现
原始的Stata管道(`MASTER_PIPELINE.do`)和完整的分类附录可在 [darknet-gravity-model](https://github.com/ryder-mawby/darknet-gravity-model) 仓库中获取。此Python实现在Hikari档案馆测试集上产生相同的输出。
## 引用
如果您使用此管道,请引用工作论文:
```
Mawby, Ryder (2026). "Anti-Gravity Exists: Evidence from Darknet Drug Markets."
SSRN Working Paper. https://papers.ssrn.com/sol3/papers.cfm?abstract_id=6608299
```
标签:Python, Stata, 信息安全研究, 关键词匹配, 多语言处理, 多语言支持, 安全测试框架, 实时数据, 市场数据, 支付解析, 数据清洗, 数据管道, 文本分类, 无后门, 暗网, 毒品分类, 毒品市场分析, 犯罪研究, 软件工程, 逆向工具, 高准确率