实操前准备
工具安装
执行安装命令:pip install pandas scikit-learn jieba,三个库分别负责数据处理、聚类算法、中文分词,无需额外配置即可使用。
数据准备
将待聚类的档案整理为CSV文件,包含两列:id(档案唯一标识)、content(档案正文内容),示例数据如下:
- id,content
- 1,张三,2018年入职,计算机专业,从事Python开发5年
- 2,李四,2020年入职,会计专业,负责财务报表编制
- 3,王五,2019年入职,市场营销专业,负责线下活动策划
下载中文停用词表:复制链接https://raw.githubusercontent.com/goto456/stopwords/master/cn_stopwords.txt,保存为项目目录下的stopwords.txt(停用词是“的、了、在”这类无意义助词,能大幅提升聚类准确性)。
核心实操步骤
步骤1:加载与预处理数据

编写代码加载原始数据、停用词,用jieba分词处理档案内容,去除停用词和单字(减少噪声干扰)。
步骤2:文本特征提取
用TF-IDF算法将文本转换为计算机可识别的数值特征,该算法会给重要词汇分配更高权重(比如“Python”在技术类档案中权重远高于通用词),无需手动计算权重。
步骤3:执行聚类计算
用K-Means聚类算法完成分类,调整K值(n_clusters=k)对应需要的类别数,示例中设K=3对应技术、财务、市场三类,符合常见档案分类逻辑。
步骤4:输出聚类结果
将聚类标签与原始档案数据合并,保存为clustered_archive.csv,直接用Excel打开即可查看归类结果。
完整实操代码
```python
import pandas as pd
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
1. 加载档案数据
df = pd.read_csv('test_archive.csv')
2. 加载停用词表
with open('stopwords.txt', 'r', encoding='utf-8') as f:
stop_words = {line.strip() for line in f}
3. 档案文本分词与清洗
def process_text(text):
words = jieba.lcut(text)
过滤停用词、单字
filtered = [w for w in words if w not in stop_words and len(w) > 1]
return ' '.join(filtered)
df['processed_content'] = df['content'].apply(process_text)
4. 转换为TF-IDF特征
tfidf = TfidfVectorizer()
tfidf_matrix = tfidf.fit_transform(df['processed_content'])
5. K-Means聚类(可调整n_clusters修改类别数)
k = 3
kmeans = KMeans(n_clusters=k, random_state=42)
df['cluster_label'] = kmeans.fit_predict(tfidf_matrix)
6. 导出结果文件
df.to_csv('clustered_archive.csv', index=False, encoding='utf-8-sig')
```
结果调整技巧
- 若聚类结果混乱,先检查停用词表是否完整,补充“员工”“任职”这类通用重复词;
- 若某类档案被拆分,可调整K值(比如将K=3改为K=4,对应细分的技术子类);
- 如需优化分词,可添加自定义词典,代码中加入`jieba.load_userdict("custom_dict.txt")`,加入“财务报表”“线下活动”这类档案专属词汇。