关键词自动分类:下载时按关键词建文件夹
Auto-Categorize by Keyword: Folder per Topic
1 万张图全堆在一个文件夹,后期找图就抓狂。按关键词/主题自动建文件夹,是图片采集的标配。
1. 文件名 → 关键词 → 文件夹
import re
from pathlib import Path
def extract_keyword_from_url(url):
filename = url.split('/')[-1].lower()
name = re.sub(r'\.\w+$', '', filename)
parts = re.split(r'[_ -]', name)
return parts[0] if parts else 'uncategorized'
def categorize_download(url, base_dir='downloads'):
keyword = extract_keyword_from_url(url)
save_dir = Path(base_dir) / keyword
save_dir.mkdir(parents=True, exist_ok=True)
filename = url.split('/')[-1]
save_path = save_dir / filename
download_with_retry(url, save_path)
for url in urls:
categorize_download(url)
2. 用外部关键词表分类(更准)
KEYWORD_MAP = {
'小米': ['小米', 'xiaomi', 'mi13', '小米13'],
'华为': ['华为', 'huawei', 'p60', 'mate'],
'苹果': ['苹果', 'iphone', 'apple', 'ios'],
'三星': ['三星', 'samsung', 'galaxy'],
}
def smart_categorize(url, keyword_map=KEYWORD_MAP):
filename = url.lower()
for category, keywords in keyword_map.items():
for kw in keywords:
if kw in filename:
return category
return '其他'
def categorize_download(url, base_dir='downloads'):
category = smart_categorize(url)
save_dir = Path(base_dir) / category
save_dir.mkdir(parents=True, exist_ok=True)
filename = url.split('/')[-1]
save_path = save_dir / filename
download_with_retry(url, save_path)
实战技巧:关键词表要宽进严出 — 把可能的拼写、缩写、英文名都列上,然后人工抽样检查 100 张图看分类是否合理,不准的再补关键词。
3. 重复图片去重(感知哈希)
from PIL import Image
import imagehash
def is_duplicate(img1_path, img2_path, threshold=5):
h1 = imagehash.phash(Image.open(img1_path))
h2 = imagehash.phash(Image.open(img2_path))
return abs(h1 - h2) < threshold
import os
images = list(Path('downloads/小米').glob('*.jpg'))
seen_hashes = {}
for img_path in images:
h = imagehash.phash(Image.open(img_path))
if h in seen_hashes:
img_path.unlink()
print(f'删除重复: {img_path.name}')
else:
seen_hashes[h] = img_path
关键词分类 + 去重,1 万张图自动整理成 4-5 个清晰子文件夹,可以直接交付。