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, 信息安全研究, 关键词匹配, 多语言处理, 多语言支持, 安全测试框架, 实时数据, 市场数据, 支付解析, 数据清洗, 数据管道, 文本分类, 无后门, 暗网, 毒品分类, 毒品市场分析, 犯罪研究, 软件工程, 逆向工具, 高准确率