|
| 1 | +# 域名分布统计工具使用说明 |
| 2 | + |
| 3 | +## 概述 |
| 4 | + |
| 5 | +`domain_stats.py` 是一个专门用于统计WebMainBench数据集中域名分布的工具。它可以帮助你分析: |
| 6 | + |
| 7 | +- 域名的分布情况 |
| 8 | +- TLD(顶级域名)的分布 |
| 9 | +- 域名与内容类型的关系 |
| 10 | +- TLD与语言的关系 |
| 11 | + |
| 12 | +## 快速开始 |
| 13 | + |
| 14 | +### 基本使用 |
| 15 | + |
| 16 | +```bash |
| 17 | +python scripts/domain_stats.py data/WebMainBench_7887_with_meta.jsonl |
| 18 | +``` |
| 19 | + |
| 20 | +### 指定输出目录 |
| 21 | + |
| 22 | +```bash |
| 23 | +python scripts/domain_stats.py data/WebMainBench_7887_with_meta.jsonl \ |
| 24 | + --output-dir results/my_domain_analysis |
| 25 | +``` |
| 26 | + |
| 27 | +## 输入数据格式 |
| 28 | + |
| 29 | +脚本需要JSONL格式的输入文件,每行一个JSON对象: |
| 30 | + |
| 31 | +```json |
| 32 | +{ |
| 33 | + "track_id": "xxx", |
| 34 | + "url": "https://example.com/page", |
| 35 | + "html": "...", |
| 36 | + "main_html": "...", |
| 37 | + "convert_main_content": "...", |
| 38 | + "meta": { |
| 39 | + "language": "en", |
| 40 | + "table": [], |
| 41 | + "code": [], |
| 42 | + "equation": [], |
| 43 | + "level": "simple", |
| 44 | + "style": "Article" |
| 45 | + } |
| 46 | +} |
| 47 | +``` |
| 48 | + |
| 49 | +## 输出文件 |
| 50 | + |
| 51 | +脚本会在指定的输出目录生成以下文件: |
| 52 | + |
| 53 | +### 1. domain_statistics.csv |
| 54 | + |
| 55 | +**完整的域名统计表格**,包含每个域名的详细信息: |
| 56 | + |
| 57 | +| 字段 | 说明 | |
| 58 | +|------|------| |
| 59 | +| Domain | 域名 | |
| 60 | +| Sample_Count | 该域名的样本数量 | |
| 61 | +| Percentage | 占总样本的百分比 | |
| 62 | +| Top_Language | 该域名最常见的语言 | |
| 63 | +| Top_Style | 该域名最常见的网页风格 | |
| 64 | +| Top_Level | 该域名最常见的复杂度级别 | |
| 65 | +| Has_Table | 包含表格的样本数 | |
| 66 | +| Has_Code | 包含代码的样本数 | |
| 67 | +| Has_Equation | 包含公式的样本数 | |
| 68 | + |
| 69 | +**示例:** |
| 70 | +```csv |
| 71 | +Domain,Sample_Count,Percentage,Top_Language,Top_Style,Top_Level,Has_Table,Has_Code,Has_Equation |
| 72 | +aniruddhadeb.com,39,0.49%,en,Article,mid,11,9,36 |
| 73 | +politics.stackexchange.com,30,0.38%,en,Forum_or_Article_with_commentsection,mid,10,0,0 |
| 74 | +``` |
| 75 | + |
| 76 | +### 2. tld_statistics.csv |
| 77 | + |
| 78 | +**TLD分布统计表格**: |
| 79 | + |
| 80 | +```csv |
| 81 | +TLD,Count,Percentage |
| 82 | +com,4550,57.69% |
| 83 | +org,816,10.35% |
| 84 | +cn,459,5.82% |
| 85 | +``` |
| 86 | + |
| 87 | +### 3. unique_domains.txt |
| 88 | + |
| 89 | +**所有独立域名的列表**(每行一个域名,按字母顺序排序): |
| 90 | + |
| 91 | +``` |
| 92 | +aniruddhadeb.com |
| 93 | +en.wikipedia.org |
| 94 | +money.cnn.com |
| 95 | +... |
| 96 | +``` |
| 97 | + |
| 98 | +### 4. domain_stats.json |
| 99 | + |
| 100 | +**JSON格式的统计摘要**,包含: |
| 101 | + |
| 102 | +```json |
| 103 | +{ |
| 104 | + "summary": { |
| 105 | + "total_samples": 7887, |
| 106 | + "unique_domains": 5945, |
| 107 | + "unique_tlds": 150 |
| 108 | + }, |
| 109 | + "tld_distribution": { |
| 110 | + "com": 4550, |
| 111 | + "org": 816, |
| 112 | + ... |
| 113 | + }, |
| 114 | + "top_50_domains": { |
| 115 | + "aniruddhadeb.com": 39, |
| 116 | + "politics.stackexchange.com": 30, |
| 117 | + ... |
| 118 | + } |
| 119 | +} |
| 120 | +``` |
| 121 | + |
| 122 | +## 统计结果示例 |
| 123 | + |
| 124 | +基于 `WebMainBench_7887_with_meta.jsonl` 的统计结果: |
| 125 | + |
| 126 | +### 📊 基本统计 |
| 127 | + |
| 128 | +- **总样本数**: 7,887 |
| 129 | +- **独立域名数**: 5,945 |
| 130 | +- **平均每域名样本数**: 1.33 |
| 131 | +- **只有1个样本的域名**: 4,828 (81.2%) |
| 132 | + |
| 133 | +### 🌐 TLD分布 (Top 10) |
| 134 | + |
| 135 | +| TLD | 数量 | 占比 | |
| 136 | +|-----|------|------| |
| 137 | +| .com | 4,550 | 57.69% | |
| 138 | +| .org | 816 | 10.35% | |
| 139 | +| .cn | 459 | 5.82% | |
| 140 | +| .net | 318 | 4.03% | |
| 141 | +| .uk | 235 | 2.98% | |
| 142 | +| .edu | 180 | 2.28% | |
| 143 | +| .de | 101 | 1.28% | |
| 144 | +| .au | 94 | 1.19% | |
| 145 | +| .ru | 69 | 0.87% | |
| 146 | +| .gov | 59 | 0.75% | |
| 147 | + |
| 148 | +### 🏆 Top 10 域名 |
| 149 | + |
| 150 | +| 域名 | 样本数 | 占比 | |
| 151 | +|------|--------|------| |
| 152 | +| aniruddhadeb.com | 39 | 0.49% | |
| 153 | +| politics.stackexchange.com | 30 | 0.38% | |
| 154 | +| www.ask.com | 29 | 0.37% | |
| 155 | +| en.wikipedia.org | 27 | 0.34% | |
| 156 | +| www.china.org.cn | 23 | 0.29% | |
| 157 | +| money.cnn.com | 22 | 0.28% | |
| 158 | +| data.epo.org | 21 | 0.27% | |
| 159 | +| m.weibo.cn | 19 | 0.24% | |
| 160 | +| spanish.china.org.cn | 15 | 0.19% | |
| 161 | +| china.org.cn | 14 | 0.18% | |
| 162 | + |
| 163 | +### 📑 内容类型分布 |
| 164 | + |
| 165 | +- **包含表格的域名**: 2,876 个 |
| 166 | +- **包含代码的域名**: 406 个 |
| 167 | +- **包含公式的域名**: 148 个 |
| 168 | + |
| 169 | +**包含表格最多的域名 (Top 5):** |
| 170 | +1. data.epo.org - 21个样本 |
| 171 | +2. www.china.org.cn - 21个样本 |
| 172 | +3. en.wikipedia.org - 20个样本 |
| 173 | +4. money.cnn.com - 18个样本 |
| 174 | +5. spanish.china.org.cn - 14个样本 |
| 175 | + |
| 176 | +**包含代码最多的域名 (Top 5):** |
| 177 | +1. aniruddhadeb.com - 9个样本 |
| 178 | +2. oca.weizmann.ac.il - 6个样本 |
| 179 | +3. elitetvstream.com - 6个样本 |
| 180 | +4. www.economagic.com - 5个样本 |
| 181 | +5. studylibfr.com - 5个样本 |
| 182 | + |
| 183 | +**包含公式最多的域名 (Top 5):** |
| 184 | +1. aniruddhadeb.com - 36个样本 |
| 185 | +2. www.esaral.com - 8个样本 |
| 186 | +3. www.layoutready.com - 8个样本 |
| 187 | +4. eng.libretexts.org - 8个样本 |
| 188 | +5. money.cnn.com - 7个样本 |
| 189 | + |
| 190 | +### 🌍 TLD与语言关系 |
| 191 | + |
| 192 | +**主要TLD的语言分布:** |
| 193 | + |
| 194 | +| TLD | 主要语言 | 占比 | |
| 195 | +|-----|----------|------| |
| 196 | +| .com | 英文 | 90.3% | |
| 197 | +| .org | 英文 | 96.8% | |
| 198 | +| .cn | 中文 | 66.0% | |
| 199 | +| .net | 英文 | 86.8% | |
| 200 | +| .uk | 英文 | 99.1% | |
| 201 | +| .edu | 英文 | 98.9% | |
| 202 | + |
| 203 | +## 使用场景 |
| 204 | + |
| 205 | +### 1. 数据集质量评估 |
| 206 | + |
| 207 | +```bash |
| 208 | +# 分析域名多样性 |
| 209 | +python scripts/domain_stats.py data/dataset.jsonl |
| 210 | + |
| 211 | +# 查看是否有域名过度集中的问题 |
| 212 | +head -20 results/domain_statistics.csv |
| 213 | +``` |
| 214 | + |
| 215 | +### 2. 内容类型分析 |
| 216 | + |
| 217 | +查看哪些域名包含特定类型的内容(表格、代码、公式),帮助: |
| 218 | +- 理解数据集的内容分布 |
| 219 | +- 识别专业性网站(如教育、技术类) |
| 220 | +- 评估基准测试的覆盖范围 |
| 221 | + |
| 222 | +### 3. 语言多样性评估 |
| 223 | + |
| 224 | +通过TLD与语言的关系分析: |
| 225 | +- 验证数据集的国际化程度 |
| 226 | +- 识别特定地区的网站集中度 |
| 227 | +- 评估语言标注的准确性 |
| 228 | + |
| 229 | +### 4. 与Common Crawl集成 |
| 230 | + |
| 231 | +导出的域名列表可用于查询Common Crawl图数据: |
| 232 | + |
| 233 | +```bash |
| 234 | +# 获取域名列表 |
| 235 | +python scripts/domain_stats.py data/dataset.jsonl |
| 236 | + |
| 237 | +# 使用域名列表查询CC图(如果有对应工具) |
| 238 | +# 分析域名的PageRank、流量等级等 |
| 239 | +``` |
| 240 | + |
| 241 | +## 进阶使用 |
| 242 | + |
| 243 | +### 筛选特定TLD |
| 244 | + |
| 245 | +```bash |
| 246 | +# 统计后,用grep筛选特定TLD |
| 247 | +grep "\.edu" results/domain_analysis/domain_statistics.csv |
| 248 | +``` |
| 249 | + |
| 250 | +### 分析高频域名 |
| 251 | + |
| 252 | +```bash |
| 253 | +# 查看样本数>=10的域名 |
| 254 | +awk -F',' '$2 >= 10' results/domain_analysis/domain_statistics.csv |
| 255 | +``` |
| 256 | + |
| 257 | +### 统计域名分类 |
| 258 | + |
| 259 | +```python |
| 260 | +import pandas as pd |
| 261 | + |
| 262 | +# 读取统计结果 |
| 263 | +df = pd.read_csv('results/domain_analysis/domain_statistics.csv') |
| 264 | + |
| 265 | +# 按风格分组统计 |
| 266 | +style_counts = df.groupby('Top_Style').agg({ |
| 267 | + 'Domain': 'count', |
| 268 | + 'Sample_Count': 'sum' |
| 269 | +}) |
| 270 | +print(style_counts) |
| 271 | +``` |
| 272 | + |
| 273 | +## 常见问题 |
| 274 | + |
| 275 | +### Q1: 为什么有些域名的样本数特别多? |
| 276 | + |
| 277 | +**A:** 这可能表明: |
| 278 | +- 数据采集过程中对某些网站采样较多 |
| 279 | +- 某些网站内容丰富,适合作为测试样本 |
| 280 | +- 需要检查是否存在数据偏倚 |
| 281 | + |
| 282 | +### Q2: 如何判断域名分布是否合理? |
| 283 | + |
| 284 | +**A:** 可以参考以下指标: |
| 285 | +- **单样本域名占比**: 理想情况下应该较高(如>80%),表示域名多样性好 |
| 286 | +- **Top域名占比**: 最大域名的样本数不应超过总样本的5% |
| 287 | +- **TLD多样性**: 应包含多种国家和地区的TLD |
| 288 | + |
| 289 | +### Q3: CSV文件太大怎么办? |
| 290 | + |
| 291 | +**A:** 可以只查看前几行或使用编程方式处理: |
| 292 | + |
| 293 | +```bash |
| 294 | +# 查看前100行 |
| 295 | +head -100 results/domain_analysis/domain_statistics.csv |
| 296 | + |
| 297 | +# 或使用pandas |
| 298 | +python -c "import pandas as pd; df = pd.read_csv('results/domain_analysis/domain_statistics.csv'); print(df.head(50))" |
| 299 | +``` |
| 300 | + |
| 301 | +## 输出示例 |
| 302 | + |
| 303 | +运行脚本后,终端会显示: |
| 304 | + |
| 305 | +``` |
| 306 | +============================================================ |
| 307 | +1. 基本统计 |
| 308 | +============================================================ |
| 309 | +总样本数: 7887 |
| 310 | +独立域名数: 5945 |
| 311 | +平均每域名样本数: 1.33 |
| 312 | +
|
| 313 | +每域名样本数统计: |
| 314 | + 最小值: 1 |
| 315 | + 最大值: 39 |
| 316 | + 平均值: 1.33 |
| 317 | + 中位数: 1 |
| 318 | +
|
| 319 | +只有1个样本的域名: 4828 (81.2%) |
| 320 | +
|
| 321 | +============================================================ |
| 322 | +2. 顶级域名(TLD)分布 |
| 323 | +============================================================ |
| 324 | +
|
| 325 | +总共 150 种TLD |
| 326 | +
|
| 327 | + .com 4550 (57.69%) ████████████████████████████ |
| 328 | + .org 816 (10.35%) █████ |
| 329 | + .cn 459 ( 5.82%) ██ |
| 330 | + ... |
| 331 | +
|
| 332 | +[更多统计信息...] |
| 333 | +``` |
| 334 | + |
| 335 | +## 技术细节 |
| 336 | + |
| 337 | +### 域名提取 |
| 338 | + |
| 339 | +使用Python的`urlparse`从URL中提取域名: |
| 340 | + |
| 341 | +```python |
| 342 | +from urllib.parse import urlparse |
| 343 | + |
| 344 | +url = "https://www.example.com/path" |
| 345 | +domain = urlparse(url).netloc # 结果: www.example.com |
| 346 | +``` |
| 347 | + |
| 348 | +### TLD提取 |
| 349 | + |
| 350 | +简单地提取域名最后一个点后的部分: |
| 351 | + |
| 352 | +```python |
| 353 | +domain = "www.example.com" |
| 354 | +tld = domain.split('.')[-1] # 结果: com |
| 355 | +``` |
| 356 | + |
| 357 | +### Meta信息聚合 |
| 358 | + |
| 359 | +对每个域名,统计其所有样本的meta信息: |
| 360 | +- 语言分布(Counter) |
| 361 | +- 风格分布(Counter) |
| 362 | +- 复杂度分布(Counter) |
| 363 | +- 特殊内容计数(表格、代码、公式) |
| 364 | + |
| 365 | +## 更新日志 |
| 366 | + |
| 367 | +### 2024-11-18 |
| 368 | +- ✅ 创建初始版本 |
| 369 | +- ✅ 支持基本域名统计 |
| 370 | +- ✅ 支持TLD分布分析 |
| 371 | +- ✅ 支持内容类型分析 |
| 372 | +- ✅ 支持语言-TLD关联分析 |
| 373 | +- ✅ 生成多种格式输出(CSV, JSON, TXT) |
| 374 | + |
| 375 | +--- |
| 376 | + |
| 377 | +*文档由WebMainBench团队维护* |
| 378 | + |
0 commit comments