Python文本聚类:使用jieba分词、TF-IDF和KMeans算法进行文本聚类
使用jieba分词、TF-IDF和KMeans算法进行文本聚类
本代码示例展示了如何使用Python的jieba分词库、TF-IDF算法和KMeans聚类算法对文本数据进行聚类。
代码:
import jieba
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
import csv
# 读取文本文件,每行为一个文本数据
with open('ps.csv', 'r', encoding='gbk') as f:
texts = f.readlines()
# 对每个文本进行分词,保存为字符串列表
text_list = []
stopwords = set(open('stopwords.txt', 'r', encoding='utf-8').read().split('
'))
for text in texts:
words = jieba.cut(text.strip())
words = [word for word in words if word not in stopwords]
text_list.append(' '.join(words))
# 保存分词结果
with open('F.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
for text in text_list:
writer.writerow([text])
# 对文本数据进行tf-idf处理
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(text_list)
# 保存去停用词结果
with open('T.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
for row in X.toarray():
writer.writerow(row)
# 使用KMeans聚类
kmeans = KMeans(n_clusters=5, random_state=0)
kmeans.fit(X)
# 输出每个文本所属的簇标签和特征矩阵
#labels = kmeans.labels_
#print('每个文本所属的簇标签:', labels)
# 输出每个文本所属的簇标签和特征矩阵
labels = kmeans.labels_
for i, text in enumerate(texts):
print('第'+str(labels[i])+'类'+ ':' +text.strip())
print('特征矩阵:
', X.toarray())
print(X)
np.savetxt('jz.txt', X.toarray())
解释:
- 读取文本数据: 代码首先读取名为'ps.csv'的文本文件,并将每行文本数据存储到列表'texts'中。
- 分词和去除停用词: 使用jieba库对每个文本进行分词,并去除停用词。将分词后的结果保存为列表'text_list',并将其写入名为'F.csv'的文件中。
- TF-IDF处理: 使用TfidfVectorizer类对文本数据进行TF-IDF处理,生成一个TF-IDF矩阵'X',并将其保存到名为'T.csv'的文件中。
- KMeans聚类: 使用KMeans类将TF-IDF矩阵'X'进行聚类,将数据分为5类。
- 输出结果: 输出每个文本所属的簇标签和特征矩阵。
关于选择5个类别: 这里将文本数据分为5类是基于KMeans聚类算法的需求,KMeans算法需要指定聚类的数量。作者选择将文本数据分为5类,可能是基于对数据的理解和分析,或者是为了方便后续处理和分析。具体应该根据实际问题和数据情况来选择合适的类别数量。
总结: 本代码示例展示了如何使用jieba分词库、TF-IDF算法和KMeans聚类算法对文本数据进行聚类。您可以根据自己的需求对代码进行修改和完善。
原文地址: https://www.cveoy.top/t/topic/noRo 著作权归作者所有。请勿转载和采集!