Skip to content

Commit 2ca83f5

Browse files
committed
feat: add domain statics
1 parent 80b4040 commit 2ca83f5

File tree

3 files changed

+723
-0
lines changed

3 files changed

+723
-0
lines changed

scripts/DOMAIN_STATS_README.md

Lines changed: 378 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,378 @@
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+

scripts/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
|------|------|
3131
| `analyze_style_results.py` | 分析网页类型分布 |
3232
| `quick_style_stats.py` | 快速统计网页类型 |
33+
| `domain_stats.py` | **域名分布统计** - 统计域名、TLD、内容类型分布 |
3334

3435
## 🚀 快速开始
3536

0 commit comments

Comments
 (0)