File size: 6,103 Bytes
7f22d3c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
# CSV批量导入功能

## 📋 功能说明

添加了CSV批量导入功能,可以将类似Wiki网站的数据直接从CSV文件批量导入到数据库中,避免重复爬取,极大提高数据导入效率。

## ✅ 已实现的功能

### 1. CSV解析和导入
- ✅ 支持多种CSV格式(UTF-8、Latin-1编码)
- ✅ 自动识别CSV列(title, content, url, category等)
- ✅ 智能字段匹配(不区分大小写)
- ✅ 自动生成URL(如果CSV中没有URL列)

### 2. 批量处理
- ✅ 批量向量化和存储(默认每批50条)
- ✅ 自动独特性检测和晋升到Space R
- ✅ 进度反馈(实时显示导入进度)

### 3. 前端界面
- ✅ CSV文件选择器
- ✅ 密码验证(与URL爬取共用密码)
- ✅ URL前缀配置(可选)
- ✅ 上传状态反馈

### 4. 后端处理
- ✅ 异步后台处理(不阻塞请求)
- ✅ WebSocket实时进度推送
- ✅ 错误处理和日志记录
- ✅ 自动清理临时文件

## 🎯 使用方法

### 步骤 1: 准备CSV文件

CSV文件应包含以下列(列名不区分大小写):

**必需列:**
- `content` / `text` / `body` - 内容文本

**可选列:**
- `title` / `name` / `page` - 标题
- `url` / `link` - URL链接
- `category` / `type` - 分类

**CSV示例:**

```csv
title,content,url,category
"Machine Learning","Machine learning is a subset of artificial intelligence...","https://wiki.example.com/ml","Technology"
"Deep Learning","Deep learning uses neural networks...","https://wiki.example.com/deep-learning","Technology"
"Python Programming","Python is a high-level programming language...","https://wiki.example.com/python","Programming"
```

或者更简单的格式:

```csv
title,content
"Article 1","This is the content of article 1..."
"Article 2","This is the content of article 2..."
```

如果没有URL列,系统会自动生成URL(基于URL前缀和标题)。

### 步骤 2: 上传CSV文件

1. 在前端页面找到"Batch Import (Wiki Style)"区域
2. 点击"选择文件"按钮,选择CSV文件
3. 可选:输入URL前缀(例如:`https://wiki.example.com/page`4. 输入密码(与URL爬取相同的密码)
5. 点击"批量导入"按钮

### 步骤 3: 查看导入进度

导入过程中,您会看到:
- 实时进度提示(通过WebSocket推送)
- 成功/失败统计
- 自动晋升到Space R的内容数量

## 📊 CSV格式说明

### 支持的列名(不区分大小写)

**内容列**(优先级从高到低):
- `content`
- `text`
- `body`
- `description`
- `abstract`

如果以上列都不存在,系统会尝试组合所有非URL/标题列作为内容。

**标题列**(优先级从高到低):
- `title`
- `name`
- `page`

**URL列**(优先级从高到低):
- `url`
- `link`
- `href`

如果CSV中没有URL列,系统会根据以下规则生成:
- 如果提供了URL前缀:`{url_prefix}/{title_with_underscores}`
- 如果没有URL前缀:`csv_import/{title_with_underscores}``csv_import/{random_id}`

**分类列**- `category`
- `type`

### 数据要求

- 内容文本长度至少10个字符(太短的会被跳过)
- 支持多行文本(CSV格式中的换行符会被保留)
- 自动清理空值和多余空格

## 🔧 配置说明

### 环境变量

CSV导入功能使用与URL爬取相同的密码验证:
- `CRAWL_PASSWORD` - 在 `.env` 文件中设置

### 导入参数

- **批量大小**:默认50条/批(可在代码中调整)
- **独特性检测**:默认开启,独特内容会自动晋升到Space R
- **URL前缀**:可选,用于生成缺失的URL

## 📝 导入统计

导入完成后,系统会返回统计信息:

```json
{
  "total": 100,        // 总行数
  "processed": 100,    // 已处理行数
  "success": 95,       // 成功导入数
  "failed": 5,         // 失败数
  "promoted": 10       // 晋升到Space R的数量
}
```

## 🔍 错误处理

### 常见错误

1. **密码错误**
   - 错误信息:`密码错误,CSV导入被拒绝`
   - 解决:检查密码是否正确

2. **文件格式错误**
   - 错误信息:`只支持CSV文件格式`
   - 解决:确保文件扩展名为`.csv`

3. **编码问题**
   - 系统会自动尝试多种编码(UTF-8、Latin-1)
   - 如果仍有问题,请将CSV文件转换为UTF-8编码

4. **内容太短**
   - 内容少于10个字符的行会被跳过
   - 确保每行都有足够的内容

## 💡 使用建议

### 性能优化

1. **批量大小**
   - 默认50条/批,适合大多数情况
   - 对于大型CSV(>1000行),可以增加到100

2. **URL前缀**
   - 建议为不同来源的Wiki设置不同的URL前缀
   - 例如:`https://wiki.example.com/page``https://docs.example.com/article`

3. **分类标签**
   - 使用`category`列可以帮助后续搜索和过滤
   - 统一的分类命名有助于数据管理

### 数据质量

1. **内容清理**
   - 导入前建议清理HTML标签(如果CSV中包含)
   - 确保内容是可读的纯文本

2. **标题质量**
   - 良好的标题有助于生成有意义的URL
   - 标题应该是简洁、描述性的

3. **URL唯一性**
   - 如果CSV中有URL列,确保URL是唯一的
   - 重复的URL可能导致数据覆盖

## 🔒 安全说明

- CSV导入需要密码验证(与URL爬取共用)
- 文件上传后存储在临时目录,处理完成后自动删除
- 建议在生产环境中使用HTTPS

## 📚 相关文件

- `csv_importer.py` - CSV导入核心模块
- `web_server.py` - API端点和后台任务
- `static/index.html` - 前端上传界面
- `system_manager.py` - 数据库存储逻辑

## 🔄 更新日志

### v1.0 (当前版本)
- ✅ 支持多种CSV格式和列名
- ✅ 批量导入和进度反馈
- ✅ 自动独特性检测和晋升
- ✅ 密码验证和安全控制
- ✅ 前端上传界面

## 🚀 后续改进

可能的改进方向:
- [ ] 支持Excel文件导入(.xlsx)
- [ ] 支持JSON格式导入
- [ ] 导入预览功能(上传前预览前几行)
- [ ] 导入历史记录
- [ ] 重复数据检测和去重
- [ ] 自定义字段映射配置