使用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())

解释:

  1. 读取文本数据: 代码首先读取名为'ps.csv'的文本文件,并将每行文本数据存储到列表'texts'中。
  2. 分词和去除停用词: 使用jieba库对每个文本进行分词,并去除停用词。将分词后的结果保存为列表'text_list',并将其写入名为'F.csv'的文件中。
  3. TF-IDF处理: 使用TfidfVectorizer类对文本数据进行TF-IDF处理,生成一个TF-IDF矩阵'X',并将其保存到名为'T.csv'的文件中。
  4. KMeans聚类: 使用KMeans类将TF-IDF矩阵'X'进行聚类,将数据分为5类。
  5. 输出结果: 输出每个文本所属的簇标签和特征矩阵。

关于选择5个类别: 这里将文本数据分为5类是基于KMeans聚类算法的需求,KMeans算法需要指定聚类的数量。作者选择将文本数据分为5类,可能是基于对数据的理解和分析,或者是为了方便后续处理和分析。具体应该根据实际问题和数据情况来选择合适的类别数量。

总结: 本代码示例展示了如何使用jieba分词库、TF-IDF算法和KMeans聚类算法对文本数据进行聚类。您可以根据自己的需求对代码进行修改和完善。

Python文本聚类:使用jieba分词、TF-IDF和KMeans算法进行文本聚类

原文地址: https://www.cveoy.top/t/topic/noRo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录